GaussDB A 审计功能简介


数据库审计,指的是将用户对数据库的所有操作写入审计日志中,使得数据库安全管理员可以利用这些日志信息,找出非法操作的用户,时间和内容等。

如何使用数据库审计,这里以审计事务功能为例:

1. 设置审计配置项

要使数据库能够审计到某项功能,需要打开审计的总开关(audit_operation_exec)和对应的审计项开关(audit_operation_exec),二者均支持动态加载,在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。

  1. 首先打开审计总开关audit_enabled(默认开启)。登录数据库,检查audit_enabled状态
    postgres=# show audit_enabled;
     audit_enabled 
    ---------------
     off
    (1 row)
    若为off ,则使用如下命令打开
    gs_guc reload -Z coordinator -Z datanode -N all -I all  -c "audit_enabled=on"
  2. 然后打开具体审计事务配置项
    gs_guc reload -Z coordinator -Z datanode -N all -I all  -c "audit_operation_exec='transaction'"
    postgres=# show audit_operation_exec;
     audit_operation_exec 
    ----------------------
     transaction
    (1 row)

 audit_operation_exec 默认的配置项有login, logout, database_process, user_lock, grant_revoke, set,如果想增加审计配置项,进行追加配置即可,目前支持的配置项有all,login,logout,database_process,user_lock,grant_revoke,ddl,select,copy,userfunc,set,transaction,vacuum,analyze,explain,specialfunc,insert,insert_filter,update,delete,merge,show,checkpoint,barrier,cluster,comment,cleanconn,prepare,constraints,cursor。有两点需要注意,其一如果审计ddl操作,需要另外配置audit_system_object 来审计具体某个对象的ddl 操作;其二如果是审计事务,事务内部的操作是否审计需要结合其具体的配置项是否配置。

 2. 查看审计日志。

审计查询命令是pg_query_audit, 其使用方法为


pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)

startime 和 endtime 分别表示审计记录的开始时间和结束时间,audit_log 表示所查看的审计日志新的所在的物理文件路径,当不指定audit_log 时,默认查看连接当前实例的审计日志信息。

通过查询pgxc_query_audit 可以查询所有CN节点的审计日志信息:

pgxc_query_audit(timestamptz startime,timestamptz endtime)

 

除了上面审计成功的场景之外,还可以通过配置audit_operation_error 来审计失败的操作记录。默认的配置项有login,目前支持的配置项有syn_success,parse,login,user_lock,violation,grant_revoke,ddl,select,copy,userfunc,set,transaction,vacuum,analyze,explain,specialfunc,insert,update,delete,merge,show,checkpoint,barrier,cluster,comment,cleanconn,prepare,constraints,cursor,blacklist。当配置了该参数之后,其对应的失败操作也会被记录到审计日志当中,如下例

postgres=# create table t1(id int);
ERROR:  relation "t1" already exists
postgres=# 
postgres=# select * from pg_query_audit('2021-03-21','2021-03-30') order by endtime desc limit 1;
-[ RECORD 1 ]---+--------------------------------
begintime       | 2021-03-21 11:49:41.643+08
endtime         | 2021-03-21 11:49:41.652+08
operation_type  | ddl
audit_type      | ddl_table
result          | failed
username        | perfadm
database        | postgres
client_conninfo | gsql@[local]
object_name     | t1
command_text    | create table t1(id int);
detail_info     | relation "t1" already exists
transaction_xid | 0
query_id        | 1062177
node_name       | cn_5001
thread_id       | 139916885260032@669613657906735
local_port      | 6000
remote_port     | 

20210321-170346(WeLinkPC).png

(完)