GaussDB(DWS)运维 -- 查看审计日志
DWS提供审计日志查看接口,官方的介绍请看具体方法请看这里。官方的介绍方法是直接调用提供的函数接口查询。此方法比较简单直接,但是查询某个比较大的事件范围内比较具体的审计项的时候,查询效率比较低。此处介绍一种稍微复杂点,但是性能比较高效的方法。此方法需要借助DWS的分布式运维函数pgxc_parallel_query实现。
1)查询权限
只有拥有AUDITADMIN属性的用户才可以查看审计记录
2)官方查询接口pg_query_audit
审计日志需通过数据库接口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)
可以使用如下函数获取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;
- 点赞
- 收藏
- 关注作者
评论(0)