
# CREATE AUDIT POLICY
#### 功能描述
创建统一审计策略。
#### 注意事项
- 审计策略的创建与维护有权限限制，只有poladmin、sysadmin或初始用户有权限进行此操作。

- 在创建审计策略之前，需要确保已经开启安全策略开关，即设置GUC参数"enable_security_policy=on"后，脱敏策略才会生效。
- 系统管理员或安全策略管理员可以访问GS_AUDITING_POLICY、GS_AUDITING_POLICY_ACCESS、GS_AUDITING_POLICY_PRIVILEGES和GS_AUDITING_POLICY_FILTERS系统表，查询已创建的审计策略。
- 审计策略名称应具有唯一性，避免与现有策略产生冲突。可以使用IF NOT EXISTS来检查指定的审计策略是否存在，以避免重复创建。
![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
在使用DATABASE LINK功能的场景下，客户端发起的DATABASE LINK请求，实际的发送方是服务端，发送端IP地址等相关的属性将是服务端的值。详情见[DATABASE LINK](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0709.html#ZH-CN_TOPIC_0000002558946093)。
#### 语法格式
```
CREATE AUDIT POLICY [ IF NOT EXISTS ] policy_name { { privilege_audit_clause | access_audit_clause } [, ... ] [ filter_group_clause ] [ ENABLE | DISABLE ] };
```
- privilege_audit_clause：
  ```
  PRIVILEGES { DDL | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  ```
  
- access_audit_clause：
  ```
  ACCESS { DML | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  ```
  
 
- filter_group_clause：
  ```
  FILTER ON { FILTER_TYPE ( filter_value [, ... ] ) } [, ... ]
  ```
  

- DDL：
  ```
  { ALTER | ANALYZE | COMMENT | CREATE | DROP | GRANT | REVOKE | SET | SHOW }
  ```
  
- DML：
  ```
  { COPY | DEALLOCATE | DELETE | EXECUTE | REINDEX | INSERT | PREPARE | SELECT | TRUNCATE | UPDATE }
  ```
  

- FILTER_TYPE：
  ```
  { APP | ROLES | IP }
  ```
  
#### 参数说明
- **policy_name**
  审计策略名称，需要唯一，不可重复。
  取值范围：字符串，要符合[标识符命名规范](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0322.html#ZH-CN_TOPIC_0000002559105775__zh-cn_topic_0000002558056023_section14873217506)，且最大长度不超过63个字符。若超过63个字符，数据库会截断并保留前63个字符当作审计策略名称。当审计策略名称中包含大写字母时，数据库会自动转换为小写字母，如果需要创建包含大写字母的审计策略名称则需要使用双引号括起来。
  ![](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  标识符需要为小写字母（a-z）、大写字母(A-Z)、下划线（_）、数字（0\~9）或美元符号（$），且必须以字母或下划线开头。
  
- **resource_label_name**
  资源标签名称。
  
- **DDL**
  指的是针对数据库执行如下操作时进行审计，目前支持：CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET、SHOW。
  取值为ANALYZE时，ANALYZE和VACUUM操作都会被审计。
  
- **DML**
  指的是针对数据库执行如下操作时进行审计，目前支持：SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE、UPDATE。
  
- **ALL**
  指的是上述DDL或DML中支持的所有对数据库的操作。当形式为{ DDL \| ALL }时，ALL指所有DDL操作；当形式为{ DML \| ALL }时，ALL指所有DML操作。
  

- **FILTER_TYPE**
  描述策略过滤的条件类型，包括APP、ROLES、IP。
  
- **filter_value**
  指具体过滤信息内容。
  

- **ENABLE\|DISABLE**
  可以打开或关闭统一审计策略。若不指定ENABLE\|DISABLE，语句默认为ENABLE。
  
 
#### 示例
- 创建一个对数据库执行CREATE的审计策略。
  ```
  --创建adt1策略。
  gaussdb=# CREATE AUDIT POLICY adt1 PRIVILEGES CREATE; 
  --查看adt1策略。
  gaussdb=# SELECT * FROM GS_AUDITING_POLICY;
   polname | polcomments |         modifydate         | polenabled 
  ---------+-------------+----------------------------+------------
   adt1    |             | 2023-11-06 16:41:40.947417 | t
  --查看审计策略的存放位置。
  gaussdb=# SHOW audit_directory;
  --删除审计策略adt1。
  gaussdb=# DROP AUDIT POLICY adt1;
  ```
  
- 创建一个审计策略，仅审计用户dev_audit进行CREATE操作 。
  ```
  --创建dev_audit用户。
  gaussdb=# CREATE USER dev_audit PASSWORD '********';
  --创建一个表tb_for_audit。
  gaussdb=# CREATE TABLE tb_for_audit(col1 text, col2 text, col3 text); 
  --创建基于tb_for_audit表的adt_lb0资源标签。
  gaussdb=# CREATE RESOURCE LABEL adt_lb0 add TABLE(public.tb_for_audit);
  --创建针对adt_lb0资源进行create操作的adt2审计策略。
  gaussdb=# CREATE AUDIT POLICY adt2 PRIVILEGES CREATE ON LABEL(adt_lb0) FILTER ON ROLES(dev_audit);
  --删除审计策略adt2。
  gaussdb=# DROP AUDIT POLICY adt2;
  --删除表tb_for_audit。
  gaussdb=# DROP TABLE tb_for_audit;
  --删除dev_audit用户。
  gaussdb=# DROP USER dev_audit;
  ```
  

- 创建一个仅审计记录用户dev_audit，客户端工具为gsql，IP地址为'10.20.30.40', '127.0.0.0/24'，在执行针对adt_lb0资源进行的SELECT、INSERT、DELETE操作数据库的审计策略。
  ```
  --创建dev_audit用户。
  gaussdb=# CREATE USER dev_audit PASSWORD '********';
  --创建审计策略adt3。
  gaussdb=# CREATE AUDIT POLICY adt3 ACCESS SELECT ON LABEL(adt_lb0), INSERT ON LABEL(adt_lb0), DELETE FILTER ON ROLES(dev_audit), APP(gsql), IP('10.20.30.40', '127.0.0.0/24');
  --删除审计策略adt3。
  gaussdb=# DROP AUDIT POLICY adt3;
  --删除dev_audit用户。
  gaussdb=# DROP USER dev_audit;
  ```
  
 
#### 相关链接
[ALTER AUDIT POLICY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0479.html#ZH-CN_TOPIC_0000002559105869)，[DROP AUDIT POLICY](https://support.huaweicloud.com/distributed-devg-v8-gaussdb/gaussdb-12-0587.html#ZH-CN_TOPIC_0000002527986168)。
