# 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系统表，查询已创建的审计策略。
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/notice_3.0-zh-cn.png)
在使用DATABASE LINK功能的场景下，客户端发起的DATABASE LINK请求，实际的发送方是服务端，发送端IP地址等相关的属性将是服务端的值。具体的使用方式请参见《开发指南》中"特性使用指导 \> DATABASE LINK"章节。
#### 语法格式
```
CREATE AUDIT POLICY [ IF NOT EXISTS ] policy_name { { privilege_audit_clause | access_audit_clause } [, ... ] [ filter_group_clause ] [ ENABLE | DISABLE ] };
```
![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002764309652.png "点击放大")
- privilege_audit_clause：
  ```
  PRIVILEGES { PRIVILEGES | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002764469578.png "点击放大")
  
- access_audit_clause：
  ```
  ACCESS { ACCESS | ALL } [ ON LABEL ( resource_label_name [, ... ] ) ]
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002793788389.png "点击放大")
  
- filter_group_clause：
  ```
  FILTER ON { FILTER_TYPE ( filter_value [, ... ] ) } [, ... ]
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002764309650.png "点击放大")
  
- PRIVILEGES：
  ```
  { ALTER | ANALYZE | COMMENT | CREATE | DROP | GRANT | REVOKE | SET | SHOW }
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002764469580.png)
  
- ACCESS：
  ```
  { COPY | DEALLOCATE | DELETE | EXECUTE | REINDEX | INSERT | PREPARE | SELECT | TRUNCATE | UPDATE }
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002793708197.png)
  
- FILTER_TYPE：
  ```
  { APP | ROLES | IP }
  ```
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/figure/zh-cn_image_0000002793708195.png)
  
 
#### 参数说明
- **IF NOT EXISTS**
  可以使用该关键字进行检查指定的审计策略是否存在，以避免重复创建审计策略。
  
- **policy_name**
  审计策略的名称，应具有唯一性，避免与现有策略发生冲突。
  取值范围：字符串，要符合[标识符命名规范](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0003.html#ZH-CN_TOPIC_0000002793787739__section14873217506)且最大长度不超过63个字符。
  ![](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/public_sys-resources/note_3.0-zh-cn.png)
  - 审计策略名称若超过63个字符，数据库会截断并保留前63个字符当作审计策略名称。
  
  - 当审计策略名称中包含大写字母时，数据库会自动转换为小写字母，如果需要创建包含大写字母的审计策略名称则需要使用双引号进行包裹。
  
  - 审计策略名称需要为小写字母（a\~z）、大写字母（A\~Z）、下划线（_）、数字（0\~9）或美元符号（$），且必须以字母或下划线开头。
    
- **resource_label_name**
  资源标签名称。
  
- **PRIVILEGES**
  针对数据库执行如下操作时进行审计，目前支持CREATE、ALTER、DROP、ANALYZE、COMMENT、GRANT、REVOKE、SET以及SHOW操作。
  当取值为ANALYZE时，进行ANALYZE和VACUUM操作都会被审计。
  
- **ACCESS**
  针对数据库执行如下操作时进行审计，目前支持SELECT、COPY、DEALLOCATE、DELETE、EXECUTE、INSERT、PREPARE、REINDEX、TRUNCATE以及UPDATE操作。
  
- **ALL**
  PRIVILEGES或ACCESS中支持的所有对数据库的操作。当形式为{ PRIVILEGES \| ALL }时，ALL指所有PRIVILEGES操作；当形式为{ ACCESS \| ALL }时，ALL指所有ACCESS操作。
  

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

- **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-ref-v10-gaussdb/gaussdb-08-0181.html)，[DROP AUDIT POLICY](https://support.huaweicloud.com/distributed-ref-v10-gaussdb/gaussdb-08-0291.html)
