Gaussdb(DWS)user和role的区别 & user和schema如何解耦
【摘要】 本文主要介绍DWS中user和role的区别及user和schema如何解耦。
前言
用户和角色都是拥有数据库对象和权限的实体。在不同的环境中角色可以认为是一个用户,一个组或者兼顾两者。二者又有何区别呢?
user & role
-
语法等价
-- 以下两条命令完全等价 CREATE USER john WITH PASSWORD '123456'; CREATE ROLE john1 WITH PASSWORD '123456' LOGIN;
上述语法本质相同,创建role时,具有LOGIN属性的role才可以登录数据库。一个拥有LOGIN属性的role可以认为是一个用户。缺省为NOLOGIN。
-
关键区别
-- CREATE USER 默认包含 LOGIN 权限 CREATE USER alice; -- 自动具有 LOGIN 权限,且创建同名schema -- CREATE ROLE 默认不包含 LOGIN 权限 CREATE ROLE manager; -- 默认不能登录,需要显式授权 CREATE ROLE bob WITH LOGIN; -- 显式添加登录权限
-
实际应用场景
-
用户(用于登录)
-- 创建可登录的用户 CREATE USER developer WITH PASSWORD 'Devpass123' CREATEDB CREATEROLE;
-
角色(用于权限分组)
-- 创建角色组 CREATE ROLE read_only WITH PASSWORD 'Gauss_123'; CREATE ROLE read_write WITH PASSWORD 'Gauss_123'; -- 授予权限给角色 GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO read_write;
-
角色继承
-- 用户继承角色权限 GRANT read_only TO developer;

-
4. 实际应用场景
使用角色进行权限管理:创建角色组,然后让用户继承角色
最小权限原则:只授予必要的权限
user和schema如何解耦
创建user时,会创建同名schema,而在oracle兼容模式下,schema和user是强绑定的,会有以下特征:
- CREATE USER语法会内置创建同名schema,且schema的owner不是创建USER的用户,而是SCHEMA同名用户。
CREATE USER test2 IDENTIFIED BY 'Test0002';
创建USER test2的时候创建同名SCHEMA test2,SCHEMA test2的OWNER是USER test2
- 假如USER test1在SCHEMA test2下创建的表t,则表t的OWNER是USER test2
针对此问题,可通过将SCHEMA的OWNER修改为非同名用户来解耦。
方案1 SCHEMA和用户分开创建
CREATE ROLE test1 WITH PASSWORD 'Gauss_123'; CREATE SCHEMA test1;
方案2 修改SCHEMA的OWNER为创建USER用户
--当前USER为tt CREATE USER test2 WITH PASSWORD 'Gauss_123';
ALTER SCHEMA test2 OWNER TO tt;
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者


评论(0)