GaussDB(DWS)數據庫安全守護者之審計日志

      網友投稿 1582 2025-03-31

      數據庫安全對數據庫系統來說至關重要,而數據庫審計日志是數據庫安全的重要一環。GaussDB(DWS)將用戶的所有操作寫入審計日志。數據庫安全管理員可以利用這些日志信息,重現導致數據庫現狀的一系列事件,找出非法操作的用戶、時間和內容等。

      1.??? 審計日志配置

      關于審計功能的配置,需要清楚審計開關的設計:

      audit_enabled:審計總開關,為布爾型開關,默認值為on,表示開啟審計功能。審計總開關的開啟和關閉也會被記錄到審計日志中。

      audit_inner_tool:內部維護工具對應的審計開關,控制是否對來自內部維護工具的操作進行審計;為布爾型開關,默認值為off,表示關閉對來自內部維護工具的操作進行審計。內部維護工具包括:cm_agent、gs_clean、OM、gs_roach、gs_redis、wlm、gs_ctl、gs_rewind等。

      audit_operation_exec:執行成功操作對應的審計開關,支持對各操作類型進行配置,只有審計類型被配置,對應的操作執行成功時才會被記錄到審計日志中。

      audit_operation_error:執行失敗操作對應的審計開關,支持對各操作類型進行配置,只有審計類型被配置,對應的操作執行失敗時才會被記錄到審計日志中。

      audit_system_object:控制DDL操作對象的審計開關,數據庫的DDL(CREATE,ALTER,DROP,表對象還包含TRUNCATE)操作的對象較多,通過該配置參數在操作對象維度上對審計進行更細粒度的控制。

      以上開關屬于SIGHUP類型,可以通過以下兩種方式進行設置,以設置審計總開關為例:

      方式一:gs_guc set設置后,重啟數據庫使參數生效;

      gs_guc set -Z coordinator -Z datanode -N all -I all -c "audit_enabled=on"

      gs_om -t stop && gs_om -t start

      方式二:gs_guc reload動態加載,不需要重啟數據庫,直接生效。

      gs_guc reload -Z coordinator -Z datanode -N all -I all? -c "audit_enabled=on"

      注意:事務操作具有一定的特殊性,一個事務塊涉及到多個語句的執行。如果在事務塊進行中,對事務審計配置項(transaction)進行動態修改,將導致該事務塊的審計記錄不完整的問題。事務審計部分對這種情況按如下約定方式處理:

      事務進行中事務配置項開啟(無頭有尾),不審計后續操作(無頭有尾不記尾)

      事務進行中事務配置項關閉(有頭無尾),審計后續操作直到事務end(有頭無尾不掉尾)

      事務進行中,事務開關保持開啟,但審計總開關開啟(開總閘),因事務塊的部分語句已經執行完畢,無法記錄,所以不審計改事務塊的后續操作(無頭有尾不記尾)

      事務進行中,事務開關保持開啟,但審計總開關關閉(斷總閘),因事務塊部分操作已經被記錄,為保證事務記錄的完整性,審計線程將繼續運行,直到該事務塊的end被審計后審計線程才退出(有頭無尾不掉尾)

      事務進行中,事務開關保持開啟,會話結束,記錄事務回滾(未提交事務必回滾)

      1.1審計開關audit_operation_exec的配置

      audit_operation_exec的默認配置項為:login,logout,database_process,user_lock,grant_revoke,set

      表示對用戶登錄、注銷、數據庫啟動\停止\切換\恢復、用戶鎖定\解鎖、權限授予\收回、SET操作的成功場景進行審計。

      如需要增加審計insert操作,可以通過以下方式進行設置:

      gs_guc reload -Z coordinator -Z datanode -N all -I all? -c "audit_operation_exec= login,logout,database_process,user_lock,grant_revoke,set,insert"

      支持的配置項如下:

      配置項

      描述

      none

      表示未配置審計項,如果同時配置了其他任何審計項,則none失效

      all

      表示對所有操作成功的場景進行審計。如果同時配置了其他任何審計項,則覆蓋所有其他審計項的配置。

      需要注意,即使配置為all,也不表示對所有的DDL操作進行審計,仍然需要結合audit_system_object,對DDL操作的對象級別進行控制

      login

      表示對用戶登錄成功的場景進行審計,默認配置

      logout

      表示對用戶退出進行審計,默認配置

      database_process

      表示對數據庫啟動、停止、切換、恢復操作進行審計,默認配置

      user_lock

      表示對用戶鎖定和解鎖成功的場景進行審計,默認配置

      grant_revoke

      表示對用戶權限授予和回收成功的場景進行審計,默認配置

      ddl

      表示對DDL操作成功的場景進行審計,因為DDL操作由會根據操作對象進行更細粒度控制,仍然沿用審計開關audit_system_object,即由audit_system_object控制對哪些對象的DDL操作進行審計(此處不配置ddl,只要配置了audit_system_object,審計也會生效)

      select

      表示對select操作成功的場景進行審計

      copy

      表示對copy操作成功的場景進行審計

      userfunc

      表示對用戶自定義函數、存儲過程、匿名塊操作成功的場景進行審計

      set

      表示對set操作成功的場景進行審計,默認配置

      transaction

      表示對事務操作成功的場景進行審計

      vacuum

      表示對vacuum操作成功的場景進行審計

      analyze

      表示對analyze操作成功的場景進行審計

      explain

      表示對explain操作成功的場景進行審計

      specialfunc

      表示對特殊函數調用操作成功的場景進行審計,包括:pg_terminate_backend、pg_cancel_backend

      insert

      表示對insert操作成功的場景進行審計

      update

      表示對update操作成功的場景進行審計

      delete

      表示對delete操作成功的場景進行審計

      merge

      表示對merge操作成功的場景進行審計

      show

      表示對show操作成功的場景進行審計

      checkpoint

      表示對checkpoint操作成功的場景進行審計

      barrier

      表示對barrier操作成功的場景進行審計

      cluster

      表示對cluster操作成功的場景進行審計

      comment

      表示對comment操作成功的場景進行審計

      cleanconn

      表示對clean connection操作成功的場景進行審計

      prepare

      表示對PREPARE、EXECUTE、DEALLOCATE操作成功的場景進行審計

      constraints

      表示對constraints操作成功的場景進行審計

      cursor

      表示對游標操作成功的場景進行審計

      1.2審計開關audit_operation_error的配置

      audit_operation_error的默認配置項為:login

      表示對登錄失敗的場景進行審計;

      GaussDB(DWS)數據庫安全守護者之審計日志

      如需要增加審計insert操作,可以通過以下方式進行設置:

      gs_guc reload -Z coordinator -Z datanode -N all -I all? -c "audit_operation_error= login,insert"

      支持的配置項如下:

      配置項

      描述

      none

      表示未配置審計項,如果同時配置了其他任何審計項,則none失效

      syn_success

      表示同步audit_operation_exec的配置,即配置了某操作執行成功場景的審計,則對應的執行失敗場景也記入審計。需注意,配置了syn_success后,仍可以繼續配置其他操作執行失敗場景的審計;

      如果audit_operation_exec配置為all,則所有的失敗場景均記入審計;如果audit_operation_exec配置為none,則syn_success等同于none,即未配置審計項

      parse

      表示對用戶輸入命令解析失敗場景進行審計,包含等待命令超時的失敗場景

      login

      表示對用戶登錄失敗的場景進行審計,默認配置

      user_lock

      表示對用戶鎖定和解鎖失敗的場景進行審計

      violation

      表示對用戶訪問存在越權的場景進行審計

      grant_revoke

      表示對用戶權限授予和回收失敗的場景進行審計

      ddl

      表示對DDL操作失敗的場景進行審計,因為DDL操作由會根據操作對象進行更細粒度控制,仍然需要結合audit_system_object的配置情況,所以此處配置ddl后,將對audit_system_object指定類型的DDL失敗場景進行審計

      select

      表示對SELECT操作失敗的場景進行審計

      copy

      表示對COPY操作失敗的場景進行審計

      userfunc

      表示對用戶自定義函數、存儲過程、匿名塊操作失敗的場景進行審計

      set

      表示對SET操作失敗的場景進行審計

      transaction

      表示對事務操作失敗的場景進行審計

      vacuum

      表示對VACUUM操作失敗的場景進行審計

      analyze

      表示對ANALYZE操作失敗的場景進行審計

      explain

      表示對EXPLAIN操作失敗的場景進行審計

      specialfunc

      表示對特殊函數調用操作失敗的場景進行審計,包括:pg_terminate_backend、pg_cancel_backend

      insert

      表示對INSERT操作失敗的場景進行審計

      update

      表示對UPDATE操作失敗的場景進行審計

      delete

      表示對DELETE操作失敗的場景進行審計

      merge

      表示對MERGE操作失敗的場景進行審計

      show

      表示對SHOW操作失敗的場景進行審計

      checkpoint

      表示對CHECKPOINT操作失敗的場景進行審計

      barrier

      表示對BARRIER操作失敗的場景進行審計

      cluster

      表示對CLUSTER操作失敗的場景進行審計

      comment

      表示對COMMENT操作失敗的場景進行審計

      cleanconn

      表示對CLEAN CONNECTION操作失敗的場景進行審計

      prepare

      表示對PREPARE、EXECUTE、DEALLOCATE操作失敗的場景進行審計

      constraints

      表示對CONSTRAINTS操作失敗的場景進行審計

      cursor

      表示對游標操作失敗的場景進行審計

      blacklist

      表示對黑名單操作的執行失敗進行審計

      1.3審計開關audit_system_object的配置

      audit_system_object的值由22個二進制位的組合求出,這22個二進制位分別代表GaussDB(DWS)的22類數據庫對象。

      每一位可以取值0或1,取值的含義為:

      取值為0:表示不審計對應的數據庫對象的DDL操作;

      取值為1:表示審計對應的數據庫對象的DDL操作;

      例如:默認值為12295,對應的二進制為0011 0000 0000 0111(高位在前,低位在后),表示打開第0位、第1位、第2位、第12位、第13位對應對象的DDL操作的審計,具體對應DATABASE、SCHEMA、USER、DATA SOURCE、NODE GROUP這五個對象。

      如需要增加審計table類型的DDL操作,可以通過以下方式進行設置:

      table在第3位,對應的十進制為8

      在原有12295的基礎上加上8,得12303

      將audit_system_object的值設置為12303即可,如下:

      gs_guc reload -Z coordinator -Z datanode -N all -I all? -c "audit_system_object = 12303"

      這22個二進制位代表的具體含義如下:

      二進制位

      含義說明

      第0位

      是否審計DATABASE對象的CREATE、DROP、ALTER操作

      第1位

      是否審計SCHEMA對象的CREATE、DROP、ALTER操作

      第2位

      是否審計USER對象的CREATE、DROP、ALTER操作

      第3位

      是否審計TABLE對象的CREATE、DROP、ALTER、TRUNCATE操作

      第4位

      是否審計INDEX對象的CREATE、DROP、ALTER操作

      第5位

      是否審計VIEW對象的CREATE、DROP、ALTER操作

      第6位

      是否審計TRIGGER對象的CREATE、DROP、ALTER操作

      第7位

      是否審計PROCEDURE/FUNCTION對象的CREATE、DROP、ALTER操作

      第8位

      是否審計TABLESPACE對象的CREATE、DROP、ALTER操作

      第9位

      是否審計RESOURCE POOL對象的CREATE、DROP、ALTER操作

      第10位

      是否審計WORKLOAD對象的CREATE、DROP、ALTER操作

      第11位

      是否審計SERVER FOR HADOOP對象的CREATE、DROP、ALTER操作

      第12位

      是否審計DATA SOURCE對象的CRAETE、DROP、ALTER操作

      第13位

      是否審計NODE GROUP對象的CREATE、DROP、ALTER操作

      第14位

      是否審計ROW LEVEL SECURITY對象的CREATE、DROP、ALTER操作

      第15位

      是否審計TYPE對象的CREATE、DROP、ALTER操作

      第16位

      是否審計TEXT SEARCH對象(CONFIGURATION和DICTIONARY)的CREATE、DROP、ALTER操作

      第17位

      是否審計DIRECTORY對象的CREATE、DROP、ALTER操作

      第18位

      是否審計SYNONYM對象的CREATE、DROP、ALTER操作

      第19位

      是否審計REDACTION POLICY對象的CREATE、DROP、ALTER操作

      第20位

      是否審計SEQUENCE對象的CREATE、DROP、ALTER操作

      第21位

      是否審計NODE對象的CREATE、DROP、ALTER操作

      2.??? 審計日志查看

      只有擁有AUDITADMIN屬性的用戶才可以查看審計記錄。

      審計日志需通過數據庫接口pg_query_audit和pgxc_query_audit查看。pg_query_audit可以查看當前CN的審計日志,pgxc_query_audit可以查看所有CN的審計日志:

      pg_query_audit(timestamptz startime,timestamptz endtime, audit_log) pgxc_query_audit(timestamptz startime,timestamptz endtime)

      參數說明:

      startime和endtime分別表示審計記錄的開始時間和結束時間,滿足審計條件的記錄為startime ≤ 單條審計信息記錄的結束時間 < endtime;

      對于pg_query_audit,可以通過audit_log指定所查看的審計日志所在的物理文件路徑,當不指定audit_log時,默認查看連接當前實例的審計日志信息。

      審計日志查看結果解析,各字段含義如下:

      begintime

      執行操作的開始時間

      endtime

      執行操作的結束時間,查看審計日志是根據此時間判斷的

      operation_type

      操作類型

      audit_type

      審計類型

      result

      執行操作的結果

      username

      執行操作的用戶名

      database

      數據庫名稱

      client_conninfo

      客戶端信息

      object_name

      操作對象的名稱

      command_text

      執行操作的命令

      detail_info

      執行操作詳細信息

      transaction_xid

      事務id

      query_id

      query id

      node_name

      節點名稱

      thread_id

      線程id

      local_port

      本地節點

      remote_port

      遠端節點

      調用pg_query_audit查看審計日志記錄:

      postgres=# SELECT * FROM pg_query_audit('2021-02-23 21:49:00','2021-02-23 21:50:00');

      查詢結果如下:

      begintime | endtime | operation_type | audit_type | result | username | database | client_conninfo | object_name | command_text | detail_info | transaction_xid | query_id | node_name | thread_id | local_port | remote_port ---------------------------+---------------------------+----------------+------------+--------+------------+----------+-----------------+-------------+--------------+------------------------------------------------------------------+-----------------+----------+--------------+---------------------------------+------------+------------- 2021-02-23 21:49:57.76+08 | 2021-02-23 21:49:57.82+08 | login_logout | user_login | ok | ommdbadmin | postgres | gsql@[local] | postgres | login db | login db(postgres) successfully, the current user is: ommdbadmin | 0 | 0 | coordinator1 | 140324035360512@667403397820909 | 27777 |

      調用pgxc_query_audit查看所有CN節點的審計日志記錄:

      postgres=# SELECT * FROM pgxc_query_audit('2021-02-23 22:05:00','2021-02-23 22:07:00') where audit_type = 'user_login' and username = 'user1';

      查詢結果如下:

      begintime | endtime | operation_type | audit_type | result | username | database | client_conninfo | object_name | command_text | detail_info | transaction_xid | query_id | node_name | thread_id | local_port | remote_port ----------------------------+----------------------------+----------------+------------+--------+----------+----------+-----------------+-------------+-----------------+-------------------------------------------------------------+-----------------+----------+--------------+---------------------------------+------------+------------- 2021-02-23 22:06:22.219+08 | 2021-02-23 22:06:22.271+08 | login_lgout | user_login | ok | user1 | postgres | gsql@[local] | postgres | login db | login db(postgres) successfully, the current user is: user1 | 0 | 0 | coordinator2 | 140689577342720@667404382271356 | 27782 | 2021-02-23 22:05:51.697+08 | 2021-02-23 22:05:51.749+08 | login_lgout | user_login | ok | user1 | postgres | gsql@[local] | postgres | login db | login db(postgres) successfully, the current user is: user1 | 0 | 0 | coordinator1 | 140525048424192@667404351749143 | 27777 |

      3.??? 審計日志維護

      用戶必須擁有審計權限。

      可以通過配置相關參數,實現對包括審計日志存儲路徑、單個審計日志文件的大小等功能的維護。

      審計日志維護相關的配置項如下:

      配置項

      含義

      默認值

      audit_directory

      審計文件的存儲目錄

      mpp/用戶名/pg_audit

      audit_data_format

      審計日志文件的格式

      binary(當前僅支持二進制格式)

      audit_rotation_interval

      創建一個新審計日志文件的時間間隔

      1440min

      audit_rotation_size

      單個審計日志文件的最大容量

      10MB

      audit_resource_policy

      審計日志的保存策略

      on(表示使用空間優先策略)

      audit_space_limit

      審計文件占用的磁盤空間總量

      1GB

      audit_file_remain_time

      審計日志文件的最小保存時間

      90d

      audit_file_remain_threshold

      審計目錄下審計文件的最大數量

      1048576

      審計日志保存方式

      目前,常用的審計日志保存方式為記錄到表中和記錄到OS文件中兩種方式。但是表是數據庫對象,如果采用記錄到表中的方式,容易出現用戶非法操作審計表的情況,審計記錄的準確性難以保證,因此,從數據庫安全角度出發,GaussDB(DWS)采用記錄到OS文件的方式來保存審計結果,保證了審計結果的可靠性。

      審計日志保存策略

      審計日志有兩種保存策略,由參數audit_resource_policy控制:

      (1)on表示采用空間優先策略,日志總量超過audit_space_limit時,將清理最早的審計日志文件。

      (2)off表示采用時間優先策略,在空間audit_space_limit允許的情況下,存儲時間audit_file_remain_time以內的日志,超過時間audit_file_remain_time的審計日志文件將被清理;當audit_file_remain_time設置過大,導致審計日志所占空間達到audit_space_limit時,將清理最早的審計日志文件。

      EI企業智能 Gauss AP 云安全 數據倉庫服務 GaussDB(DWS)

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:玩轉GaussDB(DWS)資源負載管理系列 -- 各種配置參數和語句狀態眼花繚亂,配置參數全解,看這一篇就清楚了
      下一篇:怎么篩選?(怎么篩選重復數據)
      相關文章
      亚洲av永久无码精品网站| 亚洲乱码无码永久不卡在线| 久久夜色精品国产噜噜噜亚洲AV | 精品国产香蕉伊思人在线在线亚洲一区二区 | 久久精品国产亚洲AV网站| 国产成A人亚洲精V品无码| 情人伊人久久综合亚洲| 亚洲精品中文字幕乱码三区| 国产亚洲精品国产| 久久精品国产精品亚洲艾草网| 亚洲国产AV无码专区亚洲AV | 亚洲精华液一二三产区| 亚洲av日韩综合一区久热| 校园亚洲春色另类小说合集| 无码一区二区三区亚洲人妻| 亚洲AV无码乱码在线观看性色扶| 亚洲高清无码专区视频| 精品国产香蕉伊思人在线在线亚洲一区二区 | 亚洲va久久久久| 亚洲Av无码国产一区二区 | 美国毛片亚洲社区在线观看| 亚洲Av无码乱码在线观看性色| 国产成人99久久亚洲综合精品| 国产亚洲精品不卡在线| 亚洲精品乱码久久久久久按摩| 亚洲国产精品特色大片观看完整版| 亚洲VA中文字幕不卡无码| 亚洲一区中文字幕久久| 亚洲熟妇av一区| 亚洲人成未满十八禁网站| www.亚洲精品.com| 国产综合亚洲专区在线| 亚洲成在人线av| 亚洲国产精品网站久久| 亚洲日韩乱码中文字幕| 亚洲国产成人精品91久久久 | 亚洲综合无码无在线观看| 在线观看亚洲网站| 国产亚洲午夜高清国产拍精品| 久久精品夜色国产亚洲av| 亚洲不卡视频在线观看|