
# 如何给DWS指定用户赋予某个SCHEMA的权限？
给某个用户授权某个SCHEMA的权限，包括三个场景（本章节针对SCHEMA层级权限，仅演示授权查询权限，如果需要其他权限，可以参考[如何给指定用户赋予某张表的权限？](https://support.huaweicloud.com/dws_faq/dws_03_0197.html)）：
- SCHEMA下当前某张表权限。
- SCHEMA下当前所有表的权限。
- SCHEMA下未来创建的表的权限。
  ![](https://support.huaweicloud.com/dws_faq/public_sys-resources/caution_3.0-zh-cn.png)
  不支持将外表的VACUUM，DROP，ALTER的权限赋予用户。
  
如[图1]所示，假设有两个用户jim和mike，对应的同名SCHEMA是jim和mike，用户mike需要访问SCHEMA jim的表（包括当前的某张表、所有表、未来创建的表）。
图1用户mike访问SCHEMA jim下的表   
![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000001936081689.png "点击放大")
1. 打开窗口1（即dbadmin连接会话窗口，后续不再提示），使用系统管理员dbadmin连接DWS数据库，创建用户jim和mike（系统默认会创建jim和mike的同名SCHEMA）。 
   ```
   CREATE USER jim PASSWORD '{password}';
   CREATE USER mike PASSWORD '{password}';
   ```
   
   
2. 在SCHEMA jim下创建表jim.name和jim.address。 
   ```
   CREATE TABLE jim.name (c1 int, c2 int);
   CREATE TABLE jim.address (c1 int, c2 int);
   ```
   
   
3. 给用户mike赋予SCHEMA jim的访问权限。 
   ```
   GRANT USAGE ON SCHEMA jim TO mike;
   ```
   
   
4. （**某张表权限** ）给用户mike赋予SCHEMA jim下某张表jim.name的查询权限。
   
   ```
   GRANT SELECT ON jim.name TO mike;
   ```
   
   
5. 打开窗口2（即用户mike连接会话窗口，后续不再提示），使用用户mike连接DWS数据库，验证mike可以查询jim.name表，但是不能查询jim.address表。 
   ```
   SELECT * FROM jim.name;
   SELECT * FROM jim.address;
   ```
   ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000001936107161.png "点击放大")
   
   
6. （**所有表权限** ）切换回窗口1，使用dbadmin给用户mike赋予SCHEMA jim下所有表的查询权限。
   
   ```
   GRANT SELECT ON ALL TABLES IN SCHEMA jim TO mike;
   ```
   
   
7. 切换回窗口2，再次验证mike可以查询所有表。 
   ```
   SELECT * FROM jim.name;
   SELECT * FROM jim.address;
   ```
   ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000001936108293.png "点击放大")
   
   
8. 切换回窗口1，创建一张新的表jim.employ。 
   ```
   CREATE TABLE jim.employ (c1 int, c2 int);
   ```
   
   
9. 切换回窗口2，验证发现用户mike没有jim.employ的查询权限，说明mike虽然有SCHEMA jim下所有表的访问权限，但是对于赋权后新创建的表还是没有访问权限（即mike对SCHEMA jim未来的表权限是没有的）。 
   ```
   SELECT * FROM jim.employ;
   ```
   ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000001936109033.png "点击放大")
   
   
10. **（未来表权限）** 切换回窗口1，给用户mike赋予SCHEMA jim未来创建的表的访问权限，并创建一张新的表jim.hobby。
    
    ![](https://support.huaweicloud.com/dws_faq/public_sys-resources/note_3.0-zh-cn.png)
    [ALTER DEFAULT PRIVILEGES](https://support.huaweicloud.com/sqlreference-dws/dws_06_0244.html) 用来授予将来要创建的对象的权限。
    ```
    ALTER DEFAULT PRIVILEGES FOR ROLE jim IN SCHEMA jim GRANT SELECT ON TABLES TO mike;
    CREATE TABLE jim.hobby (c1 int, c2 int);
    ```
    
    
11. 切换回窗口2，验证发现用户mike可以访问jim.hobby。但是对于之前的jim.employ还是没有访问权限（以上ALTER DEFAULT PRIVILEGES语句的授权范围只是未来创建的表，对于已经创建的表，还是要使用GRANT单张表重新授权），此时需要参考[4]重新授权jim.employ即可。
    
    ```
    SELECT * FROM jim.hobby;
    ```
    ![](https://support.huaweicloud.com/dws_faq/figure/zh-cn_image_0000001894150128.png "点击放大")
    
    
 
