
# 将Schema中的表的查询权限赋给其他用户，赋权后仍无法查询Schema中的表
#### 问题现象
有权限的用户使用"GRANT SELECT ON all tables in schema *schema_name* TO *u1*"命令给u1用户赋予schema下表的权限后，u1用户仍然无法访问该schema下的表。
#### 原因分析
将模式中的表或者视图对象授权给其他用户时，需要将表或视图所属的模式的USAGE权限同时授予该用户，如果没有该权限，则只能看到这些对象的名字，并不能实际进行对象访问。
如果要将该schema下未来创建的表的权限也赋予u1用户，则需使用ALTER DEFAULT PRIVILEGES更改默认权限。
#### 处理方法
请使用具有schema权限的用户登录数据库，执行以下命令将schema中的表权限赋给指定的用户：
```
GRANT USAGE ON SCHEMA schema_name TO u1;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO u1;
```
执行以下命令，将schema中未来新建的表的权限也赋予指定的用户：
```
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO u1;
```
上述SQL语句中的"GRANT SELECT"表示赋予的是表的查询权限，如果需要给其他用户赋予表的其他权限，请参考[GRANT](https://support.huaweicloud.com/sqlreference-dws/dws_06_0250.html)章节。
![](https://support.huaweicloud.com/trouble-dws/public_sys-resources/note_3.0-zh-cn.png)
如果需要给某个用户赋权"可查询数据库所有schema里所有表"，可通过系统表PG_NAMESPACE查询出schema后授权。例如：
```
SELECT 'grant select on all tables in '|| nspname || 'to u1' FROM pg_namespace;
```
