文档首页> 数据仓库服务 GaussDB(DWS)> 故障排除> 账号/权限/密码> 将Schema中的表的查询权限赋给其他用户,赋权后仍无法查询Schema中的表
更新时间:2024-01-25 GMT+08:00

将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中的表权限赋给指定的用户:

1
2
GRANT USAGE ON SCHEMA schema_name TO u1;
GRANT SELECT ON ALL TABLES IN SCHEMA schema_name TO u1;

执行以下命令,将schema中未来新建的表的权限也赋予指定的用户:

1
ALTER DEFAULT PRIVILEGES IN SCHEMA schema_name GRANT SELECT ON TABLES TO u1;

上述SQL语句中的“GRANT SELECT”表示赋予的是表的查询权限,如果需要给其他用户赋予表的其他权限,请参考GRANT语法说明。

如果需要给某个用户赋权“可查询数据库所有schema里所有表”, 可通过系统表PG_NAMESPACE查询出schema后授权。例如:

1
SELECT 'grant select on all tables in '|| nspname || 'to u1' FROM pg_namespace;