
# 如何创建DWS数据库只读用户？
#### 场景介绍
在业务开发场景中，数据库管理员通过SCHEMA来划分不同的业务，例如在金融行业中，负债业务属于SCHEMA s1，资产业务属于SCHEMA s2。
当前需要在数据库中创建一个只读用户user1，允许这个用户访问负债业务SCHEMA s1下所有的表（包括未来创建的新表），供日常读取，但是不允许进行数据插入、修改或删除。
#### 实现原理
DWS有基于角色的用户管理，需要先创建一个只读角色role1，再将对应的角色授权到实际的用户user1即可。具体参见[基于角色的权限管理](https://support.huaweicloud.com/bestpractice-dws/dws_05_0081.html)。
#### 操作步骤
1. 使用系统管理员dbadmin连接DWS数据库。
2. 执行以下SQL语句创建角色role1。 
   ```
   CREATE ROLE role1 PASSWORD disable;
   ```
   
   
3. 执行以下SQL语句，为角色role1进行授权。 
   ```
   GRANT usage ON SCHEMA s1 TO role1;     --赋予SCHEMA s1的访问权限;
   GRANT select ON ALL TABLES IN SCHEMA s1 TO role1;    --赋予SCHEMA s1下所有表的查询权限;
   ALTER DEFAULT PRIVILEGES FOR USER tom IN SCHEMA s1 GRANT select ON TABLES TO role1;     --赋予SCHEMA s1未来创建的表的权限，其中tom为SCHEMA s1的owner
   ```
   
   
4. 执行以下SQL语句，将角色role1授权到实际用户user1。 
   ```
   GRANT role1 TO user1;
   ```
   
   

5. 如果访问的SCHEMA s1中包含有外表，还需要对只读用户user1进行使用外表的授权，执行以下命令。 
   ```
   ALTER USER user1 USEFT;
   ```
   否则以只读用户查询外表时会报以下错误："ERROR: permission denied to select from foreign table in security mode"。
   
   
6. 使用只读用户user1进行SCHEMA s1下所有表数据的日常读取。
 
