MathJax

MathJax-2

MathJax-3

Google Code Prettify

置頂入手筆記

EnterproseDB Quickstart — 快速入門筆記

由於考慮採用 EnterpriseDB 或是直接用 PostgreSQL 的人,通常需要一些入手的資料。這邊紀錄便提供相關快速上手的簡單筆記 ~ 這篇筆記以 資料庫安裝完畢後的快速使用 為目標,基本紀錄登入使用的範例:

2016年12月5日 星期一

PostgreSQL 的稽核紀錄(Audit Log)功能套件 - pgAudit

稽核日誌(Audit Log)泛指用來紀錄程式活動的紀錄,在企業中很常被應用。在資料庫使用也是重要的功能。

一般要紀錄資料庫活動,可以自己用 Trigger 設計。不過在 EnterpriseDB 提供的企業版 PostgreSQL 裡面也有 edb_audit 的功能,可以不用自己設計 Trigger 就能進行紀錄。

而使用原生的 PostgreSQL,則可以用 PGAudit 這個專案。

這篇便紀錄在 CentOS7 下使用 PGAudit 套件的練習。

以下安裝流程,對於 EnterpriseDB 發行的 PostgreSQL 發行版亦適用:惟需要將相關路徑社製作些許調整。


為了能編譯套件,CentOS7 裡面需要有編譯工具,以及 openssl 和 postgresql 的 C header 套件
[root@vm ~]# yum group install 'Development Tools'
[root@vm ~]# yum install openssl-devel
[root@vm ~]# -- 假設已經安裝 PostgreSQL Yum Repo 套件
[root@vm ~]# yum install postgresql96-devel

接著下載套件:到 https://github.com/pgaudit/pgaudit/releases 找原始碼下載
[root@vm ~]# wget https://github.com/pgaudit/pgaudit/archive/1.0.3.tar.gz
[root@vm ~]# tar -xvf 1.0.3.tar.gz
[root@vm pgaudit-1.0.3]# cd pgaudit-1.0.3/

設置 PostgreSQL 程式位置相關環境變數,然後就進行編譯
[root@vm pgaudit-1.0.3]# # -- 使用 PostgreSQL YUM Repo 安裝的版本
[root@vm pgaudit-1.0.3]# export PATH=$PATH:/usr/pgsql-9.6/bin/
[root@vm pgaudit-1.0.3]# # -- 使用 EnterpriseDB 的發行版
[root@vm pgaudit-1.0.3]# source /opt/PostgreSQL/9.6/pg_env.sh
[root@vm pgaudit-1.0.3]# # -- 進行編譯
[root@vm pgaudit-1.0.3]# make USE_PGXS=1
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -DLINUX_OOM_ADJ=0 -fpic -I. -I./ -I/usr/pgsql-9.6/include/server -I/usr/pgsql-9.6/include/internal -D_GNU_SOURCE -I/usr/include/libxml2  -I/usr/include  -c -o pgaudit.o pgaudit.c
gcc -Wall -Wmissing-prototypes -Wpointer-arith -Wdeclaration-after-statement -Wendif-labels -Wmissing-format-attribute -Wformat-security -fno-strict-aliasing -fwrapv -fexcess-precision=standard -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -DLINUX_OOM_ADJ=0 -fpic -shared -o pgaudit.so pgaudit.o  -L/usr/pgsql-9.6/lib -Wl,--as-needed  -L/usr/lib64 -Wl,--as-needed -Wl,-rpath,'/usr/pgsql-9.6/lib',--enable-new-dtags  
[root@vm pgaudit-1.0.3]# make USE_PGXS=1 install
/bin/mkdir -p '/usr/pgsql-9.6/lib/postgresql'
/bin/mkdir -p '/usr/pgsql-9.6/share/postgresql/extension'
/bin/mkdir -p '/usr/pgsql-9.6/share/postgresql/extension'
/usr/bin/install -c -m 755  pgaudit.so '/usr/pgsql-9.6/lib/postgresql/pgaudit.so'
/usr/bin/install -c -m 644 .//pgaudit.control '/usr/pgsql-9.6/share/postgresql/extension/'
/usr/bin/install -c -m 644 .//pgaudit--1.0.sql  '/usr/pgsql-9.6/share/postgresql/extension/'

這樣便安裝完畢。

要啟用 pgAudit 套件,需要設定 postgresql.conf 的 shared_preload_library 參數
# - Kernel Resource Usage -

shared_preload_libraries = 'pgaudit'


此外先把 pgAudit 會用到的參數先加進去(以下從 readme 整理而來)
bash-4.2$ cat <<EOF  >> $PGDATA/postgresql.conf


# - pgAudit Extension -


#pgaudit.log = 'none'                   # read        Commands that read database objects (SELECT)
                                        # write       DML commands that modify database objects
                                        #             (e.g. INSERT)
                                        # privilege   DCL commands that are related to access privileges
                                        #             (e.g. GRANT/REVOKE)
                                        # user        DDL commands that are related to database users
                                        #             (e.g. CREATE/DROP/ALTER ROLE)
                                        # definition  User-level DDL commands (e.g. CREATE TABLE)
                                        # config      Administrator-level commands that change the database
                                        #             configuration (e.g. CREATE LANGUAGE, CREATE OPERATOR
                                        #             CLASS)
                                        # admin       Administrator-level commands that are not configuration
                                        #             related (e.g. CLUSTER, VACUUM, REINDEX)
                                        # function    Function execution


#pgaudit.log_catalog = on


#pgaudit.log_level = log                # values in order of decreasing detail:
                                        #   debug5
                                        #   debug4
                                        #   debug3
                                        #   debug2
                                        #   debug1
                                        #   info
                                        #   notice
                                        #   warning
                                        #   log


#pgaudit.log_parameter = off
#pgaudit.log_relation = off
#pgaudit.log_statement_once = off
#pgaudit.role = ''


EOF

然後把資料庫重新啟動。
[root@vm pgaudit-1.0.3]# service postgresql-9.6 restart

接著就可以使用套件了。

和一般 PostgreSQL 套件一樣,要先在需要的建立
postgres=# CREATE EXTENSION pgaudit;
CREATE EXTENSION

接著可以對某個帳戶、對某個物件、對某個資料庫設置要紀錄的事項。可以設置的參數都列在上面新增的 postgresql.conf GUC 了。

在此作一個範例:設定監控 postgres Database 的讀取活動
ALTER DATABASE postgres SET pgaudit.log TO 'read';
SELECT pg_reload_conf();

pgAudit 的紀錄寫在 Log 內容內,並帶有 AUDIT 標籤:
postgres=#  \! tail -f  /opt/PostgreSQL/9.6/data/pg_log/postgresql-2016-10-18_023850.log
2016-10-18 06:47:58 UTC LOG:  AUDIT: SESSION,1,1,READ,SELECT,,,select pg_reload_conf();,
2016-10-18 06:47:58 UTC LOG:  received SIGHUP, reloading configuration files
2016-10-18 06:48:27 UTC LOG:  AUDIT: SESSION,3,1,READ,SELECT,,,select * from test ;,


以上簡單示範 pgAudit 的功能。另外,在 EnterpriseDB 公司的企業版,有內建 Audit Log 功能,可以把 Audit Log 以獨立於資料庫 Log 的檔案匯出,還提供 CSV 與 XML 格式匯出。詳情可以參照EnterpriseDB 企業版 9.5 版的手冊頁面

參考:


沒有留言:

張貼留言