Hologres兼容PostgreSQL,采用与标准的PostgreSQL语句相同的授权体系(简称专家模式)。本文为您介绍如何进行专家模式授权。

鉴权流程

Hologres中的权限管理流程如下所示:

  1. 当用户访问Hologres实例内的对象时,Hologres会自动执行下图所示的权限鉴别流程专家模式授权_用户授权及角色管理_交互式分析Hologres
  2. 当用户/用户组在Hologres实例内创建对象时,Hologres会自动执行下图所示的权限鉴别流程。专家模式授权_用户授权及角色管理_交互式分析Hologres

专家模式授权

使用专家模式为用户授权的步骤如下:

  1. 创建角色并授权。
    用户必须先被Superuser创建到Hologres角色中,才能访问Hologres。命令语句示例如下。

    CREATE ROLE "云账号ID/云邮箱"; //如果使用的云账号是子账号,ID前需要加p4_,例如p4_uid。 CREATE USER "云账号ID/云邮箱"; //如果使用的云账号是子账号,ID前需要加p4_,例如p4_uid。

    示例如下。

    CREATE ROLE "[email protected]com" ;//创建普通角色。 CREATE USER "p4_uid" SUPERUSER;//创建角色并授予Superuser权限。

    说明

    • 新角色命名遵循SQL标识符的规则。
    • CREATE ROLECREATE USER均可以创建角色,使用CREATE USER创建的角色具有登录Hologres的权限。
    • Hologres中子账号支持的表达格式请参见账号

    您还可以通过Hologres管控台使用可视化的方式创建角色,详情请参见新增用户

    阿里云2000元代金券免费领,最新优惠1折抢购,2核4G云服务器仅799元/3年,新老用户同享,立即抢购>>>

  2. 授予权限。
    需要给用户授予一定的权限,该用户才能在权限范围内使用Hologres。Hologres中常用的授权操作如下表所示。

    权限描述 语法示例 是否必须
    创建可登录的子账号。 CREATE ROLE "云账号/云邮箱";CREATE USER "云账号/云邮箱";
    授予所有子账号对Hologres模式下所有表的访问权限。 GRANT USAGE ON SCHEMA hologres TO PUBLIC; 默认已执行
    授予子账号Hologres属性表的增改查权限,确保子账号能够访问表属性和创建表。 GRANT SELECT,INSERT,UPDATE ON table hologres.holo_table_properties TO PUBLIC; 默认已执行
    授予所有子账号对Public模式下的所有普通表进行增改查的权限。 GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC; 可选
    授予子账号Superuser的权限。 CREATE USER "p4_账号id" SUPERUSER ; 可选
    给多用户统一授权。 GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public TO PUBLIC; // 用户表的增删改查 可选
    默认所有用户具有Public Schema中所有表(包含未来表)的读权限。 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC; 可选
    创建用户组,并添加普通用户至该用户组。

    CREATE GROUP xxx;

    GRANT 用户组 TO "云账号/云邮箱";

    可选
    修改普通用户的权限为Superuser。 ALTER USER "云账号/云邮箱" SUPERUSER; 可选
    给其他用户授予表的Owner权限。 ALTER TABLE TABLENAME OWNER TO "云账号/云邮箱"; 可选
  3. 删除表。
    只有Superuser或者表Owner才能删除表。使用如下方法授予某个用户或多个用户删除表的权限:

    • 将新用户替换成表的Owner。
      ALTER TABLE TABLENAME OWNER TO "云账号/云邮箱";
    • 授予新用户Superuser权限。
      ALTER USER "云账号/云邮箱" SUPERUSER;
    • 添加多个用户至用户组并授予表Owner权限。
      CREATE ROLE <Group1>; GRANT 用户组 TO "云账号/云邮箱"; ALTER TABLE TABLENAME OWNER TO <Group1>;
注意 专家模式只能对现有实例对象进行授权。

未来表授权

使用ALTER DEFAULT PRIVILEGES语句对未来表授权的示例如下:

说明

  • 该命令语句不影响已有的逻辑对象。
  • 该命令语句只能设置TABLE、SCHEMA、FUNCTION、SEQUENCE或TYPE的默认权限。

  1. 设置默认权限。
    设置所有用户默认对Public Schema中新创建的表具有读权限。命令语句示例如下。

    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;

  2. 查看默认权限是否设置成功。

    使用ddp命令在Psql客户端查看ALTER DEFAULT PRIVILEGES是否设置成功。

    创建新表时,Hologres会使用当前用户和Schema去匹配系统表pg_catalog.pg_default_acl,如果检查到匹配项ALTER DEFAULT PRIVILEGES,则为用户添加匹配项规则。

    说明

    • Hologres使用当前用户匹配对应匹配项。
      • 如果当前用户是User,则创建表时使用User进行匹配。
      • 如果用户User创建表之前执行了SET SESSION ROLE GROUP1;语句,此时当前用户就变为GROUP1,则创建表时使用GROUP1进行匹配。
    • 匹配规则只在创建表时执行,在创建表之后执行ALTER TABLE SET OWNER TO语句修改表Owner,不会触发对应匹配项规则。

专家模式撤销授权

使用REVOKE语句撤销用户权限的示例如下。

REVOKE SELECT ON TABLE tablename FROM "云账号ID/云邮箱" ;//如果使用的云账号是子账号,ID前需要加p4_,例如p4_uid。

查看权限

您可以使用以下两种方式查看实例中用户的权限:

  • SQL方式。
    通过以下SQL命令查看用户的角色及权限。

    SELECT ROLNAME FROM pg_roles; SELECT user_display_name(ROLNAME) FROM pg_roles;

    专家模式授权_用户授权及角色管理_交互式分析Hologres

  • Hologres管控台可视化方式。
    Hologres管控台用户管理页面使用可视化的方式查看用户的角色权限。专家模式授权_用户授权及角色管理_交互式分析Hologres

删除用户

使用以下命令删除用户。

DROP USER "云账号ID/云邮箱";//如果使用的云账号是子账号,ID前需要加p4_,例如p4_uid。
注意 :您删除用户后,该用户将不能连接实例并访问实例内的任何对象,请谨慎操作。