稽核日誌(Audit Log)泛指用來紀錄程式活動的紀錄,在企業中很常被應用。在資料庫使用也是重要的功能。
一般要紀錄資料庫活動,可以自己用 Trigger 設計。不過在 EnterpriseDB 提供的企業版 PostgreSQL 裡面也有 edb_audit 的功能,可以不用自己設計 Trigger 就能進行紀錄。
這篇便紀錄在 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
[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/'
這樣便安裝完畢。
# - Kernel Resource Usage - shared_preload_libraries = 'pgaudit'
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
接著就可以使用套件了。
postgres=# CREATE EXTENSION pgaudit; CREATE EXTENSION
接著可以對某個帳戶、對某個物件、對某個資料庫設置要紀錄的事項。可以設置的參數都列在上面新增的 postgresql.conf GUC 了。
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 版的手冊頁面。
參考:
沒有留言:
張貼留言