GaussDB(DWS)运维 -- 查看审计日志

举报
譡里个檔 发表于 2024/07/10 21:50:07 2024/07/10
【摘要】 DWS提供审计日志查看接口,官方的介绍请看具体方法请看这里。官方的介绍方法是直接调用提供的函数接口查询。此方法比较简单直接,但是查询某个比较大的事件范围内比较具体的审计项的时候,查询效率比较低。此处介绍一种稍微复杂点,但是性能比较高效的方法。此方法需要借助DWS的分布式运维函数pgxc_parallel_query实现。1)查询权限只有拥有AUDITADMIN属性的用户才可以查看审计记录2)...

DWS提供审计日志查看接口,官方的介绍请看具体方法请看这里。官方的介绍方法是直接调用提供的函数接口查询。此方法比较简单直接,但是查询某个比较大的事件范围内比较具体的审计项的时候,查询效率比较低。此处介绍一种稍微复杂点,但是性能比较高效的方法。此方法需要借助DWS的分布式运维函数pgxc_parallel_query实现。


1)查询权限

只有拥有AUDITADMIN属性的用户才可以查看审计记录

2)官方查询接口pg_query_audit

审计日志需通过数据库接口pg_query_auditpgxc_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)

可以使用如下函数获取pg_query_audit函数的定义

SELECT (pg_get_functiondef(oid)).definition FROM pg_proc WHERE proname = 'pg_query_audit';

在9.1.0上函数的定义如下

CREATE OR REPLACE FUNCTION pg_catalog.pg_query_audit(
begin timestamp with time zone, 
"end" timestamp with time zone, 
OUT begintime timestamp with time zone, 
OUT endtime timestamp with time zone, 
OUT operation_type text, 
OUT audit_type text, 
OUT result text, 
OUT username text, 
OUT database text, 
OUT client_conninfo text, 
OUT object_name text, 
OUT object_details text, 
OUT command_text text, 
OUT detail_info text, 
OUT transaction_xid text, 
OUT query_id text, 
OUT node_name text, 
OUT session_id text, 
OUT local_port text, 
OUT remote_port text, 
OUT result_rows text, 
OUT error_code text
) 
  RETURNS SETOF record                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    
  LANGUAGE internal                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       
  NOT FENCED NOT SHIPPABLE ROWS 10                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
 AS $function$pg_query_audit$function$  

函数的各个入参的定义可以参考连接安全函数介绍,在审计日志查询过程中,我们经常使用入参begin、end来确定查询日志的查询范围,使用operation_type或者audit_type来确定要审计的动作,使用object_name来明确要查询的审计对象

3)推荐查询方法

一般我们推荐使用pgxc_parallel_query内置调用pg_query_audit的方式实现审计日志的查询,比如我们要查询表public.hxzg_sb_sbb在最近半个月的的truncate记录,我们可以使用如下SQL

SELECT * FROM pgxc_parallel_query('cn', '
SELECT * FROM pg_query_audit(now()-15, now()) 
WHERE 1 = 1 
AND audit_type = ''ddl_table''
AND object_name LIKE ''%hxzg_sb_sbb%''
') 
AS(begintime timestamptz, endtime timestamptz, operation_type text, audit_type text, 
result text, username text, database text, client_conninfo text, 
object_name text, object_details text, command_text text, detail_info text, 
transaction_xid text, query_id text, node_name text, session_id text, local_port text, 
remote_port text, result_rows text, error_code text)
ORDER BY begintime;

pgxc_parallel_query的第一个入参为'cn',第二个入参是要执行的单CN审计日志查询语句(注意转义)。


比如要查询表dfm_pgxc_locks_wait_history历史上做exchange的记录,可以使用如下SQL

SELECT * FROM pgxc_parallel_query('cn', '
SELECT * FROM pg_query_audit(now()-15, now()) 
WHERE 1 = 1 
AND audit_type = ''ddl_table''
AND object_name LIKE ''%dfm_pgxc_locks_wait_history''
AND command_text iLIKE ''%exchange%''
') 
AS(begintime timestamptz, endtime timestamptz, operation_type text, audit_type text, 
result text, username text, database text, client_conninfo text, 
object_name text, object_details text, command_text text, detail_info text, 
transaction_xid text, query_id text, node_name text, session_id text, local_port text, 
remote_port text, result_rows text, error_code text)
ORDER BY begintime;


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。