更新时间:2024-06-11 GMT+08:00
如何给指定用户赋予某个SCHEMA的权限?
给某个用户授权某个SCHEMA的权限,包括三个场景(本章节针对SCHEMA层级权限,仅演示授权查询权限,如果需要其他权限,可以参考)《常见问题》中“如何给指定用户赋予某张表的权限?”章节:
- SCHEMA下当前某张表权限。
- SCHEMA下当前所有表的权限。
- SCHEMA下未来创建的表的权限。
如图1所示,假设有两个用户jim和mike,对应的同名SCHEMA是jim和mike,用户mike需要访问SCHEMA jim的表(包括当前的某张表、所有表、未来创建的表)。
- 打开窗口1(即dbadmin连接会话窗口,后续不再提示),使用系统管理员dbadmin连接DWS数据库,创建用户jim和mike(系统默认会创建jim和mike的同名SCHEMA)。
1 2
CREATE USER jim PASSWORD '{password}'; CREATE USER mike PASSWORD '{password}';
- 在SCHEMA jim下创建表jim.name和jim.address。
1 2
CREATE TABLE jim.name (c1 int, c2 int); CREATE TABLE jim.address (c1 int, c2 int);
- 给用户mike赋予SCHEMA jim的访问权限。
1
GRANT USAGE ON SCHEMA jim TO mike;
- (某张表权限)给用户mike赋予SCHEMA jim下某张表jim.name的查询权限。
1
GRANT SELECT ON jim.name TO mike;
- 打开窗口2(即用户mike连接会话窗口,后续不再提示),使用用户mike连接DWS数据库,验证mike可以查询jim.name表,但是不能查询jim.address表。
1 2
SELECT * FROM jim.name; SELECT * FROM jim.address;
- (所有表权限)切回窗口1,使用dbadmin给用户mike赋予SCHEMA jim下所有表的查询权限。
1
GRANT SELECT ON ALL TABLES IN SCHEMA jim TO mike;
- 切回窗口2,再次验证mike可以查询所有表。
1 2
SELECT * FROM jim.name; SELECT * FROM jim.address;
- 切回窗口1,创建一张新的表jim.employ。
1
CREATE TABLE jim.employ (c1 int, c2 int);
- 切回窗口2,验证发现用户mike没有jim.employ的查询权限,说明mike虽然有SCHEMA jim下所有表的访问权限,但是对于赋权后新创建的表还是没有访问权限(即mike对SCHEMA jim未来的表权限是没有的)。
1
SELECT * FROM jim.employ;
- (未来表权限)切回窗口1,给用户mike赋予SCHAMA jim未来创建的表的访问权限,并创建一张新的表jim.hobby。
1 2
ALTER DEFAULT PRIVILEGES FOR ROLE jim IN SCHEMA jim GRANT SELECT ON TABLES TO mike; CREATE TABLE jim.hobby (c1 int, c2 int);
- 切回窗口2,验证发现用户mike可以访问jim.hobby。但是对于之前的jim.employ还是没有访问权限(以上ALTER DEFAULT PRIVILEGES语句的授权范围只是未来创建的表,对于已经创建的表,还是要使用GRANT单张表重新授权),此时需要参考4重新授权jim.employ即可。
1
SELECT * FROM jim.hobby;
父主题: 账户、密码、权限