# 转储DWS数据库审计日志
DWS支持记录数据库中的连接和用户活动相关信息。这些审计日志信息有助于用户监控数据库以确保安全、进行故障排除及定位历史操作记录。DWS的审计日志默认存储于数据库中，用户可以将审计日志转储到OBS中，便于负责监控数据库中活动的用户查看这些日志信息，目前支持开启审计日志转储和内核审计日志转储，两者功能隔离，可以分别开启或关闭。内核审计日志转储可直接将数据库老化的本地审计日志转储到OBS。
#### 前提条件
DWS集群创建成功后，可以为集群开启审计日志转储，将审计日志转储到OBS中，方便查看。**开启审计日志转储前需满足如下条件：**
已创建用于存储审计日志的OBS桶，具体操作请参见《对象存储服务控制台指南》中的[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)章节。
#### 约束与限制
- 非OBS场景下，此功能不可用。
- 内核审计日志转储仅9.1.1.200及以上集群版本支持，如果界面不支持该功能请联系技术支持人员。
- 增删CN等变更CN场景会导致数据丢失，建议在执行变更期间关闭审计日志转储。
- CN节点故障可能导致丢失该节点数据。
- 开启审计日志转储后，如果保存的审计日志大小超过1GB就会转储，这可能会导致查询结果异常，用户请谨慎操作。
- 开启审计日志转储目录分区版本支持：
  - 针对8.1.3.x集群仅8.1.3.322及以上集群版本支持。
  
  - 针对8.2.0.x集群仅8.2.0.106及以上集群版本支持。
  
  - 8.2.1及以上集群版本支持。
  
  - 历史版本需联系技术支持人员升级使用，升级后用户需手动打开。
   
 
 #### 开启日志转储
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，选择**"集群 \> 集群列表"**。
3. 在集群列表中，单击需要开启日志转储的集群的名称，然后在上侧导航栏单击**"安全设置"**。
4. 在"审计配置"区域中，开启日志转储开关，日志转储参数说明如下表所示。开启时弹窗提示**"因为审计日志保留策略的原因，OBS转储的日志需要自己主动删除"** ，确认无误后单击"**确定"** 。
   
   每个区域的每个项目首次开启日志转储功能时，系统将提示您需创建名称为"DWSAccessOBS"的委托，委托创建成功后，DWS可以将审计日志转储至OBS中。
   默认情况下，只有华为云账号或拥有Security Administrator权限的用户才具备查询委托和创建委托的权限。账号中的IAM用户，默认没有查询委托和创建委托的权限，此时需联系有权限的用户在当前页面完成对DWS的委托授权，详情请参见[委托DWS管理资源](https://support.huaweicloud.com/mgtg-dws/dws_01_0083.html)。
   图1开启审计日志转储
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002587065608.png "点击放大")
   表1日志转储参数说明 
   | 参数名称    | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|
   | 转储目录分区  | 支持日志转储时可采用OBS外表读取，转储至OBS时审计日志会采用csv格式且使用gz格式压缩。                                                                                                                                                                                                                                                                                                                                                                                |
   | OBS桶   | 存储审计数据的OBS桶名称。如果没有可选择的OBS桶，可以单击**"查看OBS桶** **"** 进入[OBS管理控制台](https://console.huaweicloud.com/obs)创建新的OBS桶，具体操作请参见《对象存储服务控制台指南》中的[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)章节。 此外，OBS桶支持指定其他用户授权的桶，但需要用户手动输入其他租户授权的桶名来指定OBS桶转储审计日志，输入长度不能小于3个字符，详情请参见[审计日志/内核审计日志转储至其他用户授权的OBS桶]。 |
   | OBS路径  | 在OBS中存储审计文件的自定义目录。多级目录可用"/"进行分隔，不能以"/"开头。路径取值范围：1\~50个字符。如果填写的OBS路径不存在时，系统会先创建该OBS路径再进行转储。                                                                                                                                                                                                                                                                                                                                   |
   | 转储周期（分） | 根据用户配置的时间，周期性的将保存的审计日志（大小超过1GB）数据转储到OBS中。取值范围：5～43200。单位为分钟。例如用户设置为10，则表示每10分钟系统会自动将保存的日志转储至已创建的OBS桶中。                                                                                                                                                                                                                                                                                                                         |
      
   
   
5. 单击**"应用"** 。
   
   "配置状态"显示为**"应用中"**，表示系统正在保存配置。
   等待一段时间后当"配置状态"显示为**"** **已同步"**，表示已保存配置并生效。
   
   
 
#### 开启内核审计日志转储
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，选择**"集群 \> 集群列表"**。
3. 在集群列表中，单击需要开启内核审计日志转储的集群的名称，然后在上侧导航栏单击**"安全设置"**。
4. 在"审计配置"区域中，开启内核审计日志转储开关。弹窗提示**"因为审计日志保留策略的原因，OBS转储的日志需要自己主动删除"** ，确认无误后单击"**确定"** 。
   
   每个区域的每个项目首次内核开启审计日志转储功能时，系统将提示您需创建名称为"DWSAccessOBS"的委托，委托创建成功后，DWS可以将审计日志转储至OBS中。
   默认情况下，只有华为云账号或拥有Security Administrator权限的用户才具备查询委托和创建委托的权限。账号中的IAM用户，默认没有查询委托和创建委托的权限，此时需联系有权限的用户在当前页面完成对DWS的委托授权，详情请参见[委托DWS管理资源](https://support.huaweicloud.com/mgtg-dws/dws_01_0083.html)。
   图2开启内核审计日志转储
   ![](https://support.huaweicloud.com/mgtg-dws/figure/zh-cn_image_0000002617505191.png "点击放大")
   
   表2内核审计日志转储参数说明 
   | 参数名称        | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                  |
   |:---|:---|
   | OBS桶       | 存储内核审计数据的OBS桶名称。如果没有可选择的OBS桶，可以单击"查看OBS桶"进入[OBS管理控制台](https://console.huaweicloud.com/obs)创建新的OBS桶，具体操作请参见《对象存储服务控制台指南》中的[创建桶](https://support.huaweicloud.com/usermanual-obs/zh-cn_topic_0045829088.html)章节。 此外，OBS桶支持指定其他用户授权的桶，但需要用户手动输入其他租户授权的桶名来指定OBS桶转储内核审计日志，输入长度不能小于3个字符，详情请参见[审计日志/内核审计日志转储至其他用户授权的OBS桶]。 |
   | 内核审计日志OBS路径 | 在OBS中存储内核审计文件的自定义目录。多级目录可用"/"进行分隔，不能以"/"开头。路径取值范围：1\~50个字符。如果填写的OBS路径不存在时，系统会先创建该OBS路径再进行转储。                                                                                                                                                                                                                                                                                                                         |
      
   
   
5. 单击**"** **应用"** 。
   
   "配置状态"显示为**"** **应用中"**，表示系统正在保存配置。
   等待一段时间后当"配置状态"显示为**"已同步"**，表示已保存配置并生效。
   
   
6. 开启内核审计日志转储后，可以通过**pg_query_audit函数** 查看转储的审计日志，详情请参见[使用系统函数查看数据库审计日志](https://support.huaweicloud.com/mgtg-dws/dws_01_0183.html#ZH-CN_TOPIC_0000002617505075__zh-cn_topic_0000001405788485_zh-cn_topic_0000001233761719_s0aec83296dc54e8f92966415aaaa3a6f)。
   
   或选择日志存放的OBS桶和文件夹进入查看具体的日志文件，可参见[6]。
   
   
 
 #### 审计日志/内核审计日志转储至其他用户授权的OBS桶
当前用户（转储用户）在执行审计日志转储或内核审计日志转储时，可以指定其他用户（授权用户）授权的OBS桶。
1. 转储用户从控制台获取账号ID，并提供给授权用户。详情请参见[如何获取账号ID](https://support.huaweicloud.com/api-dws/dws_02_0067.html)。
2. 授权用户[登录OBS管理控制台](https://console.huaweicloud.com/obs)。
3. 创建桶策略。 
   详情请参见[对其他账号授予桶的读写权限](https://support.huaweicloud.com/perms-cfg-obs/obs_40_0025.html)章节。
   1. 在桶列表单击目标桶的桶名称，进入**"对象"**页面。
   
   2. 在左侧导航栏，选择**"权限控制 \> 桶策略"**，进入桶策略页面。
   
   3. 在"桶策略"页面，单击**"创建"**。
   
   4. 授权用户在创建桶策略页面单击**"可视化视图"** ，配置桶策略进行跨用户的授权，参数配置如下表所示，确认无误后单击页面右下角**"创建"** 保存。
      表3桶策略配置说明 
      | 参数     | 样例值                                                                                                                                   |
      |:---|:---|
      | 策略名称  | 输入自定义策略的名称。                                                                                                                           |
      | 效力    | 允许。                                                                                                                                   |
      | 被授权用户 | 勾选**"其他账号"** ，单击输入框下方的**"添加委托账号"** ，在输入框中填写委托方的账号ID和委托名称。格式为"domainId/agencyname"，其中domainId为步骤1中转储用户获取的账号ID，委托名称为**"DWSAccessOBS"**。 |
      | 授权资源    | 整个桶（包括桶内对象）。                                                                                                                           |
      | 授权操作  | 选择"**自定义配置"** ，**"选择动作"**至少配置4种：ListBucket/HeadBucket/GetObject/PutObject。                                                           |
         
      
    
   
   
4. 转储用户进入DWS审计日志/内核审计日志转储配置页面，在OBS桶选择框中手动输入上述授权的OBS桶名。 
   转储用户使用集群进行审计日志/内核审计日志转储到OBS桶后，授权用户可在OBS桶中查看相应路径下的审计日志文件。
   
   
 
#### 修改审计日志转储
开启审计日志转储后，可以对转储配置进行修改。例如，修改日志存放的OBS桶和路径，转储周期等。
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，选择**"集群 \> 集群列表"**。
3. 在集群列表中，单击您想要修改审计日志转储的集群的名称，然后在上侧导航栏单击**"** **安全设置"**。
4. 在"审计配置"区域中，修改审计日志转储配置。
5. 单击**"应用"** 。
   
   "配置状态"显示为**"应用中** **"**，表示系统正在保存配置。
   等待一段时间后当"配置状态"显示为**"已同步** **"**，表示已保存配置并生效。
   
   
 
#### 查看转储的审计日志
开启审计日志转储后，可以通过OBS查看转储的审计日志。
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，选择**"集群 \> 集群列表"**。
3. 在集群列表中，单击需要查看审计日志转储记录的集群的名称，然后在上侧导航栏单击**"** **安全设置"**。
4. 在"审计配置"区域中，单击**"** **查看转储记录"**。
5. 在**"审计日志转储记录"** 弹出框中，单击**"查看OBS桶"** ，进入[OBS管理控制台](https://console.huaweicloud.com/obs)。
6. 选择日志存放的OBS桶和文件夹进入查看具体的日志文件。
   
   可以选择将日志文件下载，解压并打开查看。审计日志文件字段说明如下。
   表4审计日志文件字段说明 
   | 名称                | 类型                        | 描述                                                              |
   |:---|:---|:---|
   | begintime         | timestamp with time zone | 操作的执行开始时间。                                                       |
   | endtime            | timestamp with time zone | 操作的执行结束时间。                                                       |
   | operation_type    | text                     | 操作类型，具体类型见[表5]。  |
   | audit_type        | text                    | 审计类型，具体类型见[表6]。 |
   | result            | text                      | 操作结果。                                                            |
   | username            | text                     | 执行操作的用户名。                                                       |
   | database          | text                     | 数据库名称。                                                          |
   | client_conninfo  | text                     | 客户端连接信息，即gsql，jdbc或odbc等。                                        |
   | object_name      | text                    | 操作对象名称。                                                         |
   | object_details      | text                    | 操作对象详情。                                                        |
   | command_text    | text                     | 操作的执行命令。                                                         |
   | detail_info        | text                     | 执行操作详细信息。                                                        |
   | transaction_xid | text                     | 事务ID。                                                            |
   | query_id        | text                    | 查询ID。                                                            |
   | node_name         | text                     | 节点名称。                                                           |
   | thread_id         | text                     | 线程ID。                                                            |
   | local_port        | text                      | 本地端口。                                                            |
   | remote_port        | text                      | 远端端口。                                                            |
   | result_rows     | text                   | 操作结果行数。                                                        |
   | error_code       | text                     | 错误码。                                                            |
      
    表5operation_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          | 表示对加载操作进行审计。                                                                                                                                          |
      
    表6audit_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                                                                                                                                              | 表示审计类型为加载操作。                                                                                                                                                                                                                   |
      
   
   
 
#### 关闭审计日志转储/内核审计日志转储
审计日志转储/内核审计日志转储开启后，如果不需要将审计日志转储/内核审计日志转储到OBS中，可以将审计日志转储/内核审计日志转储关闭。
1. [登录DWS管理控制台](https://console.huaweicloud.com/dws)。
2. 在左侧导航栏中，选择**"集群 \> 集群列表"**。
3. 在集群列表中，单击需要关闭审计日志转储/内核审计日志转储的集群的名称，然后在上侧导航栏单击**"安全设置"**。
4. 在"审计配置"区域中，关闭审计日志转储/内核审计日志转储开关。
5. 单击**"** **应用"** 。
   
   "配置状态"显示为**"** **应用中"**，表示系统正在保存配置。
   等待一段时间后当"配置状态"显示为**"** **已同步"**，表示已保存配置并生效。
   
   
 
