
# 创建只读用户最佳实践
RDS for PostgreSQL中没有创建只读用户的语法，可以通过用户权限以及角色属性设置来达到只读用户的效果，本章节提供创建只读用户的方法。
#### 操作步骤
1. 创建一个用户名为readonly，密码为readonlypasswd的用户。
   ```
   CREATE USER readonly WITH ENCRYPTED PASSWORD 'readonlypasswd';
   ```
   
2. 使用root用户执行以下SQL，设置readonly用户默认事务为只读。
   ```
   ALTER USER readonly SET default_transaction_read_only=on;
   ```
   
3. 使用root用户执行以下SQL，将schema（以public为例）的USAGE的权限赋予readonly用户。
   ```
   GRANT USAGE ON SCHEMA public to readonly;
   ```
   
4. 使用root用户执行以下SQL，将public下所有表的SELECT权限赋予readonly用户。
   ```
   GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
   ```
   
5. 将public这个schema下新创建的表的SELECT权限默认赋给readonly用户。
   使用哪个用户执行，则该用户新创建的表的SELECT权限默认赋给readonly用户。
   ```
   ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO readonly;
   ```
   
6. 如果需要在某个数据库下设置只读用户readonly，则需要对该数据库下所有的schema重复执行[3]\~[5]。
7. 如果需要对某个实例设置全局的只读用户readonly，则需要分别连接每个数据库，执行步骤[6]。
 
