本文为您介绍在Hologres中简单权限模型(Simple Permission Model,SPM)的使用方法。
使用简单权限模型进行授权
在Hologres中,使用简单权限模型对单个实例进行授权可以使用如下方式:
- 使用管理控制台进行授权
您可以在Hologres管理控制台使用可视化方式创建用户并授权,详情请参见使用简单权限模型为RAM用户授权(推荐)。
- 使用SQL语句进行授权
在Hologres实例连接开发工具后,可以使用SQL语句通过简单模式对用户进行授权,使该用户具有实例的相关权限。具体步骤如下所示:
移除用户组
在Hologres中,如果您需要将某个用户从某个DB的某个用户组中移除,使用简单权限模型可以使用如下方式:
- 使用管理控制台移除用户组
您可以在Hologres管理控制台使用可视化方式将用户从某个用户组移除,详情请参见DB管理。
- 使用SQL语句移除用户组
如果您需要将某个用户从某个DB的某个用户组中移除,可以执行如下命令。更多关于函数的说明请参见spm_revoke。
call spm_revoke('<dbname>_[admin|developer|writer|viewer]', '云账号id/云邮箱/RAM账号'); // 移除某用户的权限。 // 示例: // 将用户从某DB的admin用户组移除。 call spm_revoke('dbname_admin', 'p4_564306222995xxx');//将564306222995xxx(RAM用户)移除admin用户组。 call spm_revoke('dbname_admin', '197006222995xxx');//将197006222995xxx(云账号)移除admin用户组。 call spm_revoke('dbname_admin', '"xxx@aliyun.com"'); // 将用户从某DB的developer用户组移除。 call spm_revoke('mydb_developer', 'RAM$mainaccount:subuser'); // 将RAM用户subuser移出数据库mydb的developer用户组。 call spm_revoke('mydb_developer', 'p4_564306222995xxx');//将564306222995xxx(RAM用户)移除developer用户组。 // 将用户从某个DB的viewer用户组移除。 call spm_revoke('"MYDB_viewer"', 'p4_564306222995xxx'); // 将564306222995xxx(RAM用户)移出数据库"MYDB"的viewer用户组。
删除用户
如果您需要从实例中删除某个用户,可以执行如下语句。
重要 成功删除用户后,该用户将会从当前实例删除,用户将无实例任何权限,请谨慎执行该操作。
DROP ROLE "云账号ID/云邮箱/RAM账号"; // 直接将该用户从实例中删除。
(可选)切换专家模型至简单权限模型
如果您的DB使用的是专家权限模型,并且DB中包含一定数量的表、视图或外表等对象,您可以开启简单权限模型更好的管理权限。您可以通过调用spm_migrate函数将已有对象迁移至简单权限模型,在该DB中执行如下语句。
call spm_migrate(); // 将DB已有的对象,change owner到developer,通过SPM管理。
说明 在开启简单权限模型时,需要确保当前DB没有正在运行的SQL,否则可能导致开启失败,并对服务产生影响。
切换时可能涉及到将大量表进行Alter Owner的操作,但spm_migrate语句每次仅对不超过max_locks_per_transaction的对象进行Change Owner,您可能需要多次执行spm_migrate,直到所有对象切换完成为止。
关闭简单权限模型
关闭简单权限模型的注意事项:
- 只能由Superuser执行关闭操作。
- Public拥有Public Schema的USAGE及CREATE权限。
- Public拥有DB的CONNECT及TEMPORARY权限。
- Public拥有functions及procedures的EXECUTE权限。
- Public拥有
language, data types (include domains)
的USAGE权限。 - Public不拥有其他对象如table、view、materialized view、table column、sequence、foreign data wrapper、foreign server及schema(除public schema)等的权限。
- 关闭简单权限模型之后,用户组的权限如下:
- admin:保留对当前已有对象的权限,但对新建数据库对象不生效。
- developer用户组:保留对当前已有对象的权限,但对新建数据库对象不生效。
- writer用户组:保留对当前已有对象的权限,但对新建数据库对象不生效。
- viewer用户组:保留对当前已有对象的权限,但对新建数据库对象不生效。
再次开启简单权限模型
如果您的DB已经开启过简单权限模型,后来关闭并使用了专家权限模型。当您因为业务需求,需要再次开启简单权限模型时,您可以通过执行如下语句再次开启
call spm_enable('t'); // 开启当前DB的简单权限模型。
call spm_migrate(); // 将DB中已有的对象,change owner到developer,使用SPM管理。
说明 在开启简单权限模型时,需要确保当前DB没有正在运行的SQL,否则可能导致开启失败,并对服务产生影响。
切换时可能涉及到将大量表进行Alter Owner的操作,但spm_migrate语句每次仅对不超过max_locks_per_transaction的对象进行Change Owner,您可能需要多次执行spm_migrate,直到所有对象切换完成为止。