
# 数据库安全设置
#### 密码复杂度要求
- 通过RDS界面创建的数据库账号，其密码策略如下：
  - 密码长度为8\~32个字符。
  
  - 至少包含大写字母、小写字母、数字、特殊字符三种字符的组合，其中允许输入 \~ ! @ # $ % \^ \* - _ = + ? , ( ) 特殊字符。
  
  - 密码不能包含数据库账号名称或名称的逆序。
   
- 通过客户端创建的数据库账号，其密码策略由参数"passwordcheck.rds_enable_enhanced_password_check"控制。
  - 该参数值默认开启，表示通过客户端创建的账号密码策略与界面保持一致。
  
  - 该参数值设置为关闭，表示通过客户端创建的账号密码策略为默认策略，具体如下：
    - 密码最小长度为8个字符。
    
    - 密码中必须含有字母和非字母，其中，非字母包括数字和特殊字符。
    
    - 密码不得包含账号名。
     
   
 
#### SSL数据加密
RDS for PostgreSQL实例默认开启SSL数据加密，且不支持关闭。
#### 创建用户建议
用户在使用CREATE USER或CREATE ROLE命令时，建议指定VALID UNTIL 'timestamp' 参数（timestamp为过期时间戳），设置用户密码的过期时间。
#### 访问数据库对象建议
用户在访问数据库对象时，建议指定数据库对象的schema名，以防止特定场景下的"[特洛伊木马](https://wiki.postgresql.org/wiki/A_Guide_to_CVE-2018-1058:_Protect_Your_Search_Path)"攻击。
#### 账户说明
您在创建RDS for PostgreSQL数据库实例时，系统会自动为实例创建如下系统账户（用户不可使用），用于给数据库实例提供完善的后台运维管理服务。
![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/notice_3.0-zh-cn.png)
如果试图删除、重命名、修改这些账户的密码和权限，会导致出错，请谨慎操作。
- rdsAdmin：管理账户，拥有最高的superuser权限，用于查询和修改实例信息、故障排查、迁移、恢复等操作。
- pg_execute_server_program：允许用运行该数据库的用户执行数据库服务器上的程序来配合COPY和其他允许执行服务器端程序的函数。
- pg_read_all_settings：读取所有配置变量，甚至是那些通常只对超级用户可见的变量。
- pg_read_all_stats：读取所有的pg_stat_\*视图并且使用与扩展相关的各种统计信息，甚至是那些通常只对超级用户可见的信息。
- pg_stat_scan_tables：执行可能会在表上取得ACCESS SHARE锁的监控函数（可能会持锁很长时间）。
- pg_signal_backend：向其他后端发送信号（例如：取消查询、中止）。
- pg_read_server_files：允许使用COPY以及其他文件访问函数从服务器上该数据库可访问的任意位置读取文件。
- pg_write_server_files：允许使用COPY以及其他文件访问函数在服务器上该数据库可访问的任意位置中写入文件。
- pg_monitor：读取/执行各种监控视图和函数。这个角色是pg_read_all_settings、pg_read_all_stats以及pg_stat_scan_tables的成员。
- rdsRepl：复制账户，用于备实例或只读实例在主实例上同步数据。
- rdsBackup：备份账户，用于后台的备份。
- rdsMetric：指标监控账户，用于watchdog采集数据库状态数据。
- __rds_pg_profile_user_：指标监控账户，用于pg_profile_pro采集数据库状态数据，创建pg_profile_pro插件后会自动创建该用户，仅存在于RDS for PostgreSQL 12的最新版本。
  ![](https://support.huaweicloud.com/usermanual-rds-pg/public_sys-resources/caution_3.0-zh-cn.png)
  因发现pg_profile_pro插件存在缺陷，现暂时关闭支持，因此新创建的实例不会自动创建该用户。
  
 
