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

鉴权流程

Hologres中的权限管理流程说明如下:
  • 当用户访问Hologres实例内的对象时,Hologres会自动执行下图所示的权限鉴别流程。727
  • 当用户或用户组在Hologres实例内创建对象时,Hologres会自动执行下图所示的权限鉴别流程。728

专家模式授权

说明 专家模式只能对现有实例对象进行授权。
  1. 创建角色并授权。
    用户必须先被Superuser创建至Hologres角色中,才能访问Hologres。语句格式如下。
    CREATE USER "云账号ID/云邮箱"; //使用该语句创建的角色没有登录Hologres实例的权限。
    示例用法如下。
    CREATE USER "holo_admin:holo_user1";
    CREATE USER "holo_admin:holo_user1" SUPERUSER; //授予子账号Superuser权限。
    如果您的账号为子账号,账号格式请参见账号
    只有阿里云账号才能连接Hologres实例,因此为子账号授权时必须使用CREATE USER
    您还可以通过Hologres管理控制台使用可视化方式创建角色,详情请参见新增用户
  2. 授予权限。
    您需要授予用户一定的权限,该用户才能在权限范围内使用Hologres。Hologres中常用的授权操作如下表所示。
    权限描述 语法示例 是否必须
    创建具有登录Hologres实例权限的用户。 CREATE USER "云账号/云邮箱";
    授予用户Superuser的权限。 CREATE USER "云账号/云邮箱" SUPERUSER ; 可选
    授予所有用户public模式中所有表的增加、修改及查看权限。 GRANT SELECT,INSERT,UPDATE ON ALL TABLES IN SCHEMA public to PUBLIC; 可选
    授予用户Table1表的SELECT权限。 GRANT SELECT ON TABLE Table1 TO "云账号/云邮箱"; 可选
    授予用户Table1表的SELECT权限,并允许该用户授予此权限给其他用户。 GRANT SELECT ON TABLE Table1 TO "云账号/云邮箱" WITH GRANT OPTION; 可选
    授予用户public模式中所有表的SELECT权限。 GRANT SELECT ON ALL TABLES IN SCHEMA public TO "云账号/云邮箱"; 可选
    默认所有用户具有public模式中所有表(包含未来表)的读权限。 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 "云账号/云邮箱"; 可选
    创建没有登录Hologres实例权限的角色。 CREATE ROLE "云账号/云邮箱"; 可选
    CREATE ROLE用于创建没有登录Hologres实例权限的角色,例如代表一类具体用户的用户组或虚拟角色等。
  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模式中新创建的表具有读权限。示例语句如下。
    ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO PUBLIC;
  2. 查看默认权限是否设置成功。
    使用\ddp命令在Psql客户端查看ALTER DEFAULT PRIVILEGES是否设置成功。
    创建新表时,Hologres会使用当前用户和模式去匹配系统表pg_catalog.pg_default_acl。如果检查到匹配项ALTER DEFAULT PRIVILEGES,则为用户添加匹配项规则。当前用户说明如下:
    • 如果当前用户是User,则创建表时使用User进行匹配。
    • 如果用户User创建表之前执行了SET SESSION ROLE GROUP1;语句,此时当前用户就变为GROUP1,则创建表时使用GROUP1进行匹配。
    匹配规则只在创建表时执行,在创建表之后执行ALTER TABLE SET OWNER TO语句修改表Owner,不会触发对应匹配项规则。

专家模式撤销授权

使用REVOKE语句撤销用户权限的示例如下。
REVOKE SELECT ON TABLE tablename FROM "云账号ID/云邮箱" ; //如果云账号为子账号,账号格式请使用子账号的表达格式。

查看权限

您可以使用以下两种方式查看实例中用户的权限:
  • SQL方式。
    通过以下SQL命令查看用户的角色及权限。
    SELECT ROLNAME FROM pg_roles;
    SELECT user_display_name(ROLNAME) FROM pg_roles;
  • Hologres管理控制台可视化方式。
    1. 登录Hologres管理控制台
    2. 单击目标实例名称,进入实例详情页。
    3. 在实例详情页的左侧导航栏,单击用户管理
    4. 进入用户管理页面,查看相应用户的角色权限。729

删除用户

您可以使用以下两种方式删除实例中的子账号:
注意 子账号被删除后,将不能连接实例并访问实例内的任何对象,请您谨慎操作。
  • SQL方式。
    使用以下SQL命令删除子账号。
    DROP USER "云账号ID/云邮箱";
  • Hologres管理控制台可视化方式。
    1. 登录Hologres管理控制台
    2. 单击目标实例名称,进入实例详情页。
    3. 在实例详情页的左侧导航栏,单击用户管理
    4. 进入用户管理页面,单击目标子账号操作列的删除729