更新时间:2024-03-06 GMT+08:00

安全函数

  • gs_password_deadline()

    描述:显示当前帐户距离密码过期的时间。密码过期后提示用户修改密码。与GUC参数password_effect_time相关。

    返回值类型:interval

    示例:

    1
    2
    3
    4
    5
    SELECT gs_password_deadline();
      gs_password_deadline   
    -------------------------
     83 days 17:44:32.196094
    (1 row)
    
  • gs_password_expiration()

    描述:显示当前帐户距离密码过期的时间。密码过期后用户无法登录数据库。与创建用户的DDL语句PASSWORD EXPIRATION period相关,函数返回值大于等于-1,如果创建用户时未指定PASSWORD EXPIRATION period,该函数的缺省值为-1,表示没有过期限制。

    返回值类型:interval

    示例:

    1
    2
    3
    4
    5
    SELECT gs_password_expiration();
      gs_password_expiration   
    -------------------------
     29 days 23:59:49.731482
    (1 row)
    
  • login_audit_messages(flag boolean)

    描述:查看登录用户的登录信息。

    返回值类型:元组

    示例:

    • 查看上一次登录认证通过的日期、时间和IP等信息。
      1
      2
      3
      4
      5
      SELECT * FROM login_audit_messages(true);
        username  | database |       logintime        |     type      | result |  client_conninfo   
      ------------+----------+------------------------+---------------+--------+--------------------
           dbadmin    | gaussdb | 2017-06-02 15:28:34+08 | login_success | ok     | gsql@[local]
      (1 row)
      
    • 查看上一次登录认证失败的日期、时间和IP等信息。
      1
      2
      3
      4
      SELECT * FROM login_audit_messages(false) ORDER BY logintime desc limit 1;
        username  | database |       logintime        |     type     | result |     client_conninfo     
      ------------+----------+------------------------+--------------+--------+-------------------------
      (0 rows)
      
    • 查看自从最后一次认证通过以来失败的尝试次数、日期和时间。
      1
      2
      3
      4
      SELECT * FROM login_audit_messages(false);
        username  | database |       logintime        |     type     | result |     client_conninfo     
      ------------+----------+------------------------+--------------+--------+-------------------------
      (0 rows)
      
  • login_audit_messages_pid(flag boolean)

    描述:查看登录用户的登录信息。与login_audit_messages的区别在于结果基于当前backendid向前查找。所以不会因为同一用户的后续登录,而影响本次登录的查询结果。也就是查询不到该用户后续登录的信息。

    返回值类型:元组

    示例:

    • 查看上一次登录认证通过的日期、时间和IP等信息。
      1
      2
      3
      4
      5
      SELECT * FROM login_audit_messages_pid(true);
        username  | database |       logintime        |     type      | result |  client_conninfo | backendid
      ------------+----------+------------------------+---------------+--------+--------------------
           dbadmin    | gaussdb | 2017-06-02 15:28:34+08 | login_success | ok     | gsql@[local] | 140311900702464
      (1 row)
      
    • 查看上一次登录认证失败的日期、时间和IP等信息。
      1
      2
      3
      4
      SELECT * FROM login_audit_messages_pid(false) ORDER BY logintime desc limit 1;
        username  | database |       logintime        |     type     | result |     client_conninfo   | backendid
      ------------+----------+------------------------+--------------+--------+-------------------------
      (0 rows)
      
    • 查看自从最后一次认证通过以来失败的尝试次数、日期和时间。
      1
      2
      3
      4
      SELECT * FROM login_audit_messages_pid(false);
        username  | database |       logintime        |     type     | result |     client_conninfo    | backendid
      ------------+----------+------------------------+--------------+--------+-------------------------
      (0 rows)
      
  • pg_query_audit()

    描述:查看当前CN节点审计日志。

    返回值类型:SETOF record

    函数返回字段如下:

    名称

    类型

    描述

    begintime

    timestamp with time zone

    操作的执行开始时间。

    endtime

    timestamp with time zone

    操作的执行结束时间。

    operation_type

    text

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

    audit_type

    text

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

    result

    text

    操作结果。

    username

    text

    执行操作的用户名。

    database

    text

    数据库名称。

    client_conninfo

    text

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

    object_name

    text

    操作对象名称。

    command_text

    text

    操作的执行命令。8.1.1之前的低版本集群该字段的审计内容包含在detail_info中。

    detail_info

    text

    执行操作详细信息。

    transaction_xid

    text

    事务ID。

    query_id

    text

    查询ID。

    node_name

    text

    节点名称。

    thread_id

    text

    线程ID。

    local_port

    text

    本地端口。

    remote_port

    text

    远端端口。

    表1 operation_type操作类型项

    操作类型

    描述

    audit_switch

    表示对用户打开和关闭审计日志操作场景进行审计。

    login_logout

    表示对用户登录和登出操作场景进行审计。

    system

    表示对系统的启停、实例切换操作场景进行审计。

    sql_parse

    表示对SQL语句解析场景进行审计。

    user_lock

    表示对用户锁定和解锁操作的场景进行审计。

    grant_revoke

    表示对用户权限授予和回收操作场景进行审计。

    violation

    表示对用户访问存在越权的场景进行审计。

    ddl

    表示对DDL操作场景进行审计,因为DDL操作会根据操作对象进行更细粒度控制,仍然沿用审计开关audit_system_object,即由audit_system_object控制对哪些对象的DDL操作进行审计(此处不配置ddl,只要配置了audit_system_object,审计也会生效)。

    dml

    表示对DML操作场景进行审计。

    select

    表示对select操作场景进行审计。

    internal_event

    表示对内部事件操作场景进行审计。

    user_func

    表示对用户自定义函数、存储过程、匿名块操作场景进行审计。

    special_func

    表示对特殊函数调用操作场景进行审计,特殊函数包括:pg_terminate_backend和pg_cancel_backend。

    copy

    表示对copy操作场景进行审计。

    set

    表示对set操作场景进行审计。

    transaction

    表示对事务操作场景进行审计。

    vacuum

    表示对vacuum操作场景进行审计。

    analyze

    表示对analyze操作场景进行审计。

    cursor

    表示对游标操作的场景进行审计。

    anonymous_block

    表示对匿名块操作场景进行审计。

    explain

    表示对explain操作场景进行审计。

    show

    表示对show操作场景进行审计。

    lock_table

    表示对锁表操作场景进行审计。

    comment

    表示对comment操作场景进行审计。

    preparestmt

    表示对PREPARE、EXECUTE、DEALLOCATE操作场景进行审计。

    cluster

    表示对cluster操作场景进行审计。

    constraints

    表示对constraints操作场景进行审计。

    checkpoint

    表示对CHECKPOINT操作场景进行审计。

    barrier

    表示对BARRIER操作场景进行审计。

    cleanconn

    表示对clean connection操作场景进行审计。

    seclabel

    表示对安全标签操作进行审计。

    notify

    表示对通知操作进行审计。

    load

    表示对加载操作进行审计。

    表2 audit_type审计类型项

    审计类型

    描述

    audit_open/audit_close

    表示审计类型为打开和关闭审计日志操作。

    user_login/user_logout

    表示审计类型为用户登录/退出成功的操作和用户。

    system_start/system_stop/system_recover/system_switch

    表示审计类型为系统的启停、实例切换操作。

    sql_wait/sql_parse

    表示审计类型为SQL语句解析。

    lock_user/unlock_user

    表示审计类型为用户锁定和解锁成功的操作。

    grant_role/revoke__role

    表示审计类型为用户权限授予和回收的操作。

    user_violation

    表示审计类型为用户访问存在越权的操作。

    ddl_数据库对象

    表示审计类型为DDL操作,因为DDL操作由会根据操作对象进行更细粒度控制,仍然沿用审计开关audit_system_object,即由audit_system_object控制对哪些对象的DDL操作进行审计(此处不配置ddl,只要配置了audit_system_object,审计也会生效)。

    例如:ddl_sequence表示审计类型为序列相关操作。

    dml_action_insert/dml_action_delete/dml_action_update/dml_action_merge/dml_action_select

    表示审计类型为INSERT、DELETE、UPDATE、MERGE等DML操作。

    internal_event

    表示审计类型为内部事件。

    user_func

    表示审计类型为用户自定义函数、存储过程、匿名块操作。

    special_func

    表示审计类型为特殊函数调用操作,特殊函数包括:pg_terminate_backend和pg_cancel_backend。

    copy_to/copy_from

    表示审计类型为COPY相关操作。

    set_parameter

    表示审计类型为SET操作。

    trans_begin/trans_commit/trans_prepare/trans_rollback_to/trans_release/trans_savepoint/trans_commit_prepare/trans_rollback_prepare/trans_rollback

    表示审计类型为事务相关操作。

    vacuum/vacuum_full/vacuum_merge

    表示审计类型为VACUUM相关操作。

    analyze/analyze_verify

    表示审计类型为ANALYZE相关操作。

    cursor_declare/cursor_move/cursor_fetch/cursor_close

    表示审计类型为游标相关操作。

    codeblock_execute

    表示审计类型为匿名块。

    explain

    表示审计类型为EXPLAIN操作。

    show

    表示审计类型为SHOW操作。

    lock_table

    表示审计类型为锁表操作。

    comment

    表示审计类型为COMMENT操作。

    prepare/execute/deallocate

    表示审计类型为PREPARE、EXECUTE或DEALLOCATE操作。

    cluster

    表示审计类型为CLUSTER操作。

    constraints

    表示审计类型为CONSTRAINTS操作。

    checkpoint

    表示审计类型为CHECKPOINT操作。

    barrier

    表示审计类型为BARRIER操作。

    cleanconn

    表示审计类型为CLEAN CONNECTION操作。

    seclabel

    表示审计类型为安全标签操作。

    notify

    表示审计类型为通知操作。

    load

    表示审计类型为加载操作。

  • pgxc_query_audit()

    描述:查看所有CN节点审计日志。

    返回值类型:record

    函数返回字段同pg_query_audit函数。

  • pg_delete_audit()

    描述:删除指定时间段的审计日志。
    返回值类型:void

    基于数据库安全考虑,不提供删除指定时间段的审计日志的函数接口,调用该函数将直接报“ERROR: For security purposes, it is not allowed to manually delete audit logs”。