Gaussdb(DWS)user和role的区别 & user和schema如何解耦

举报
-CHEN111- 发表于 2025/11/22 18:09:44 2025/11/22
【摘要】 本文主要介绍DWS中user和role的区别及user和schema如何解耦。

前言

用户和角色都是拥有数据库对象和权限的实体。在不同的环境中角色可以认为是一个用户,一个组或者兼顾两者。二者又有何区别呢?

user & role

  1. 语法等价


    -- 以下两条命令完全等价
    CREATE USER john WITH PASSWORD '123456';
    CREATE ROLE john1 WITH PASSWORD '123456' LOGIN;
    上述语法本质相同,创建role时,具有LOGIN属性的role才可以登录数据库。一个拥有LOGIN属性的role可以认为是一个用户。缺省为NOLOGIN。
  2. 关键区别

    -- CREATE USER 默认包含 LOGIN 权限
    CREATE USER alice;  -- 自动具有 LOGIN 权限,且创建同名schema
    
    -- CREATE ROLE 默认不包含 LOGIN 权限
    CREATE ROLE manager;  -- 默认不能登录,需要显式授权
    CREATE ROLE bob WITH LOGIN;  -- 显式添加登录权限
  3. 实际应用场景

    1. 用户(用于登录)

      -- 创建可登录的用户
      CREATE USER developer WITH 
        PASSWORD 'Devpass123'
        CREATEDB
        CREATEROLE;


    2. 角色(用于权限分组)

      -- 创建角色组
      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;
    3. 角色继承

      -- 用户继承角色权限
      GRANT read_only TO developer;

    4. 实际应用场景


             使用角色进行权限管理:创建角色组,然后让用户继承角色

             最小权限原则:只授予必要的权限

user和schema如何解耦

创建user时,会创建同名schema,而在oracle兼容模式下,schema和user是强绑定的,会有以下特征:

  1. CREATE  USER语法会内置创建同名schema,且schema的owner不是创建USER的用户,而是SCHEMA同名用户。

    CREATE USER test2 IDENTIFIED BY 'Test0002';

    创建USER test2的时候创建同名SCHEMA test2,SCHEMA test2的OWNER是USER test2

  2. 假如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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。