前提条件
- 审计功能总开关audit_enabled已开启。(audit_enabled默认值为ON,若关闭请参考 修改数据库参数设置为ON)。
- 已配置需要审计的审计项。各审计项及其开启办法,请参考 设置数据库审计日志。
- 数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。
- 数据库各个节点审计日志单独记录。
- 只有拥有AUDITADMIN属性的用户才可以查看审计记录。
查看数据库审计日志方式
方式一:由于审计日志会占用一定磁盘空间,为了防止本地磁盘文件过大,DWS支持审计日志转储,用户可以开启“开启审计日志转储”功能,将审计日志转储到OBS(用户需创建用于存储审计日志的OBS桶)中进行查看或下载,详细内容请参考 转储数据库审计日志章节的 查看审计日志转储记录。
方式二:通过依赖于云日志服务LTS的“集群日志管理”功能查看采集的审计数据库日志或进行日志下载,详细内容请参考 集群日志管理章节的 查看集群日志。
方式三:数据库的审计日志默认存储于数据库中,连接集群后,使用pg_query_audit函数进行查看。详细内容请参考下方 使用pg_query_audit函数查看数据库审计日志。
使用pg_query_audit函数查看数据库审计日志
- 使用SQL客户端工具成功连接集群,连接方式请参考 连接集群。
- 使用函数pg_query_audit查询当前CN节点的审计日志,其语法为:
pg_query_audit(timestamptzstartime **,timestamptz ** endtime , audit_log )
参数startime和endtime分别表示审计记录的开始时间和结束时间,audit_log表示所查看的审计日志信息所在的物理文件路径,当不指定audit_log时,默认查看连接当前实例的审计日志信息。
例如,查看指定时间段当前CN节点审计记录。
SELECT FRO Mpg_query_audit(' 2021-02-23 21:49:00 ',' 2021-02-2321: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
---------------------------+---------------------------+----------------+----------
--+--------+------------+----------+-----------------+-------------+---------------
--+------------------------------------------------------------------+-------------
----+----------+--------------+------------------------------+------------+--------
-----q
2021-02-23 21:49:57.76+08 | 2021-02-23 21:49:57.82+08 | login_logout | user_login
| ok | dbadmin | gaussdb | gsql@[local] | gaussdb | login db | login
db(gaussdb) successfully, the current user is: dbadmin | 0 | 0 |
coordinator1 | 140324035360512@667403397820909 | 27777 |
该条记录表明,用户dbadmin在2021-02-23 21:49:57.82+08登录数据库gaussdb。其中client_conninfo字段在log_hostname启动且IP连接时,字符@后显示反向DNS查找得到的主机名。
- 使用函数pgxc_query_audit可以查询所有CN节点的审计日志,其语法为:
pgxc_query_audit(timestamptz startime,timestamptzendtime )
例如,查看指定时间段所有CN节点审计记录。
ELECT * 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 | gaussdb | gsql@[local] | gaussdb | login db
2022-11-25 233
| login db(gaussdb) 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 | gaussdb | gsql@[local] | gaussdb | login db
| login db(gaussdb successfully, the current user is: user1 | 0 | 0
| coordinator1 | 140525048424192@667404351749143 | 27777 |
查询结果显示,用户user1在CN1和CN2的成功登录记录。