# 使用pgaudit插件
#### 简介
金融机构、政府机构和许多行业都需要保留 审计日志以满足监管要求。通过将 PostgreSQL 审计扩展 (pgAudit) 与TaurusDB for PostgreSQL 数据库实例一起使用，可以捕获审计员通常需要或满足法规要求的详细记录。例如，您可以设置pgAudit扩展来跟踪对特定数据库和表所做的更改、记录进行更改的用户以及许多其他详细信息。
更多信息，请参见[pgaudit官方文档](https://github.com/pgaudit/pgaudit)。
 #### 插件安装/卸载
- 安装插件
  ```
  SELECT control_extension ('create', 'pgaudit');
  ```
  
- 删除插件
  ```
  SELECT control_extension ('drop', 'pgaudit');
  ```
  
 
#### 基本使用
设置pgaudit扩展
1. 首先需要在插件管理中预加载pgaudit插件，因为pgaudit扩展会安装用于审核数据定义语言 (DDL) 语句的事件触发器。 默认插件管理中已预加载pgaudit插件，也可通过如下命令查看是否加载成功。
   ```
   show shared_preload_libraries;
                                shared_preload_libraries  
   ---------------------------------------------------------------------------------
    pg_stat_statements,pgaudit,passwordcheck.so,pg_sql_history,auth_delay,pglogical
   (1 row)
   ```
   
2. 加载成功后再进行创建插件，请参考[插件安装/卸载]。
3. 插件安装好后，需要开启审计日志。 如需开通审计日志功能，请[提交工单](https://console.huaweicloud.com/ticket/?locale=zh-cn#/ticketindex/createIndex)申请。
   1. 在控制台上单击实例名称，在"概览"页面，选择"SQL审计"页签。
   
   2. 单击"设置SQL审计"。
   
   3. 在弹框中，开启审计日志开关，可选择审计日志保留天数。
      图1设置SQL审计   
      ![](https://support.huaweicloud.com/usermanual-taurusdb-pg/figure/zh-cn_image_0000002373663336.png "点击放大")
      
      
    
4. 开启审计日志后，还需要配置参数。
   单击"参数修改"页签，搜索"pgaudit.log"参数（指定会话审计日志将记录哪些类型的语句）并设置为适合业务需要的值，可以捕获对日志的插入、更新、删除和其他一些类型的更改。"pgaudit.log"参数取值如下：
   表1参数值说明 
   | 参数值        | 描述                                                             |
   |:---|:---|
   | none     | 这是原定设置值。不记录任何数据库更改。                                              |
   | all      | 记录所有内容（read、write、function、role、ddl、misc）。                    |
   | ddl      | 记录所有数据定义语言（DDL）语句（不包括在 ROLE 类中）。                                |
   | function | 记录函数调用和DO块。                                                      |
   | misc      | 记录其他命令，例如：DISCARD、FETCH、CHECKPOINT、VACUUM、SET                   |
   | read      | 当源为关系（例如表）或查询时记录SELECT和COPY。                                    |
   | role      | 记录与角色和权限相关的语句，例如：GRANT、REVOKE、CREATE ROLE、ALTER ROLE、DROP ROLE |
   | write      | 当目标为关系（表）时，记录INSERT、UPDATE、DELETE、TRUNCATE和COPY。                 |
      
   pgaudit还有一些参数，可根据业务需要在界面上进行设置。
   表2参数说明 
   | 参数名称                               | 描述                                                 |
   |:---|:---|
   | pgaudit.log                       | 指定会话审计日志记录将记录哪些类的语句。                               |
   | pgaudit.log_catalog                 | 指定在语句中的所有关系都在pg_catalog中的情况下，应该启用会话日志记录。             |
   | pgaudit.log_client_authentication | 控制是否记录用户认证的信息。                                      |
   | pgaudit.log_extra_field           | 控制是否记录PID、IP、用户名、数据库等字段。                            |
   | pgaudit.log_file_rotation_age      | 设置独立审计日志的轮转时间。                                     |
   | pgaudit.log_parameter             | 指定审核日志记录应该包含与语句传递的参数。                              |
   | pgaudit.log_relation               | 指定会话审核日志记录是否应该为SELECT或DML语句中引用的每个关系(表、视图等)创建单独的日志项。 |
   | pgaudit.log_rows                  | 指定审计日志记录应包括语句检索或影响的行。                                 |
   | pgaudit.log_write_txid             | 控制是否记录写操作（insert/update等）的txid。                     |
   | pgaudit.logstatementonce           | 指定日志记录是否包含语句、文本和参数。                                |
   | pgaudit.log_client                  | 指定审计日志是否发送到客户端。                                       |
   | pgaudit.log_level                    | 指定用于日志条目的日志级别。                                       |
   | pgaudit.write_into_pg_log_file    | 控制是否仍旧向PostgreSQL的运行日志记录审计信息。                      |
      
   如果您需要在客户端上显示审计日志，可以通过修改以下参数进行配置：
   - "pgaudit.write_into_pg_log_file"和"pgaudit.log_client"参数值同时为on，再根据"pgaudit.log_level"参数选择客户端显示的日志级别（例如notice），客户端再次进行查询时，可以在客户端显示对应级别的审计日志。
   
   - "pgaudit.write_into_pg_log_file"和"pgaudit.log_client"参数只要有一个值为off，客户端不会显示审计日志。
   
   - "pgaudit.log_level"仅在"pgaudit.log_client"打开时启用。
    
 
