数据仓库服务 GAUSSDB(DWS)-安全函数:pg_query_audit_details()

时间:2024-04-18 16:25:15

pg_query_audit_details()

描述:查看审计日志并将审计日志中的object_name和object_details字段由json格式解析出来。该函数仅8.2.1.100及以上集群版本支持。

返回值类型:record

函数返回字段如下:

表4 pg_query_audit()函数返回字段

名称

类型

描述

begintime

timestamp with time zone

操作的执行开始时间。

endtime

timestamp with time zone

操作的执行结束时间。

operation_type

text

操作类型,具体类型见表2

audit_type

text

审计类型,具体类型见表3

result

text

操作结果。

username

text

执行操作的用户名。

database

text

数据库名称。

client_conninfo

text

客户端连接信息,即gsql,jdbc或odbc。

transaction_xid

text

事务ID。

query_id

text

查询ID。

node_name

text

节点名称。

session_id

text

会话ID。

local_port

text

本地端口。

remote_port

text

远端端口。

object_name

text

表名、函数名、视图名。

column_name

text

列名。

type_of_use

text

对象的使用类型:

1:仅涉及(在实际使用中,此标志位暂不存在)

2:执行过程中访问(语句中出现的列以及在解析过程中访问到的列)

4:条件中发现(条件类型语句中,不包括条件表达式及函数)

8:inner join中发现

16:outer join中发现

32:聚合节点中发现(包括distinct、group by、聚集函数)

64:full join中发现

该列数值为叠加显示的数值。

use_type

text

type_of_use解析出的具体类型:

1:Reference only

2:Access

4:Conditional

8:Inner join

16:Outer join

32:Sum

64:Full join

command_text

text

操作的执行命令。

示例:

  1. 查询审计语句中所有对象的列及其在语句中使用的类型:
    1
    2
    SET audit_object_details = on;
    SELECT object_name,object_details,result_rows,error_code,command_text FROM pg_query_audit('2023-05-12-03 8:00:00','2023-05-12 22:55:00') where command_text like '%student%';
    

    查询结果如下:

    1
    2
    3
    4
    5
    6
                                object_name                           |                                      object_details                                      | result_rows | error_code |                                                                                command_text
    ------------------------------------------------------------------+------------------------------------------------------------------------------------------+-------------+------------+-------------------------------------------------------------------------------------------------------------------------------------------------------
     student                                                          |                                                                                          | 0           |            | CREATE TABLE student(stuNo int, stuName TEXT);
     studentscore                                                     |                                                                                          | 0           |            | CREATE TABLE studentscore(stuNo int, stuscore int);
     ["public.student_view01","public.studentscore","public.student"] |                                                                                          | 0           |            | CREATE OR REPLACE VIEW student_view01 AS SELECT * FROM student t1 where t1.stuNo in (select stuNo from studentscore t2 where t1.stuNo = t2.stuNo);
     ["public.student_view01","public.student","public.studentscore"] | {"public.student":[{"stuno":"6"},{"stuname":"2"}],"public.studentscore":[{"stuno":"6"}]} | 0           |            | SELECT * FROM student_view01
    
  2. 查询结果object_details中显示部分语句执行过程中,涉及到的列及其使用类型,使用json格式进行记录。
    使用pg_query_audit_details函数对object_name和object_details列进行解析:
    1
    SELECT database,object_name,column_name,type_of_use,use_type FROM pg_query_audit_details('2021-02-03 8:00:00','2024-02-03 22:55:00','current') where command_text like '%student%';
    

    查询结果如下:

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     database |      object_name      | column_name | type_of_use |      use_type
    ----------+-----------------------+-------------+-------------+--------------------
     gaussdb  | student               |             | 2           | Access
     gaussdb  |                       |             | 2           | Access
     gaussdb  | studentscore          |             | 2           | Access
     gaussdb  |                       |             | 2           | Access
     gaussdb  | public.student_view01 |             | 2           | Access
     gaussdb  | public.studentscore   |             | 2           | Access
     gaussdb  | public.student        |             | 2           | Access
     gaussdb  |                       |             | 2           | Access
     gaussdb  | public.student        | stuno       | 6           | Access,Conditional
     gaussdb  | public.student        | stuname     | 2           | Access
     gaussdb  | public.studentscore   | stuno       | 6           | Access,Conditional
     gaussdb  | public.student_view01 |             | 2           | Access
     gaussdb  | public.student        |             | 2           | Access
     gaussdb  | public.studentscore   |             | 2           | Access
     gaussdb  |                       |             | 2           | Access
    (15 rows)
    
support.huaweicloud.com/sqlreference-830-dws/dws_06_0048.html