文档下载建议反馈入口

  • 授予权限
  • 撤销权限
  • 查看权限

权限管理

KaiwuDB 支持管理用户权限,确保关键、重要功能、数据的安全性。

授予权限

GRANT <privilege> 语句用于为用户授予指定对象的操作权限。每条语句支持为多个用户授予多个权限。

说明

  • 如果用户权限未能及时更新,可以删除该用户后再创建非同名用户,重新授予权限。
  • GRANT 语句支持对表的每一列进行权限授予。表权限和列权限单独管理。

所需权限

  • 非三权分立模式下,授予权限的用户在目标数据库、表、列或模式(只适用于关系数据自定义模式)上具备 GRANT 权限和被授予的权限。例如,向其他用户授予目标表的 SELECT 权限的用户必须具备目标表的 GRANTSELECT 权限。
  • 三权分立模式下,
    • 用户是 sysadmin 角色的成员。默认情况下,sysroot 用户属于 sysadmin 角色。
    • 授予权限的普通用户在目标数据库、表、列或模式(只适用于关系数据自定义模式)上具备 GRANT 权限和被授予的权限。例如,向其他用户授予目标表的 SELECT 权限的普通用户必须具备目标表的 GRANTSELECT 权限。

语法格式

  • 授予数据库、表或模式(只适用于关系数据自定义模式)的权限

  • 授予数据列的权限

参数说明

参数说明
table_name表名,支持同时授予多张表的权限。表名之间使用逗号(,)隔开。
database_name数据库名,支持同时一次授予多个数据库的权限。数据库名之间使用逗号(,)隔开。
schema_name模式名。支持同时授予多个用户自定义模式的权限。模式名称之间使用逗号(,)隔开。
说明
该参数只适用于关系数据。
column_name列名,支持同时授予多个列的权限。列名之间使用逗号(,)隔开。
user_name授予权限的用户或角色名称,支持同时向多个用户或角色授予权限。用户或角色名称之间使用逗号(,)隔开。

语法示例

  • 授予目标数据库的 CREATE 权限。

    以下示例授予 operatora 用户 db1defaultdb 数据库的 CREATE 权限。

    GRANT CREATE ON DATABASE db1, defaultdb TO operatora;
    
  • 授予目标列的 SELECT 权限。

    以下示例假设已创建 user1 用户和 tb1 表,并向表中写入相关数据。以下示例授予 user1 用户 tb1nameid 列的 SELECT 权限。

    GRANT SELECT(name, id) ON TABLE tb1 TO user1;
    

撤销权限

REVOKE <privilege> 语句用于撤销用户指定对象的权限。每条语句支持撤销多个用户的多个权限。

说明

  • REVOKE 语句支持对表的每一列进行权限撤销。单独撤销表的权限,列的相同权限同时被撤销。但是,单独撤销列的权限,不影响表的相同权限。
  • 当某列被授予 ALL 权限后,使用 REVOKE 语句撤销其中一个权限时,剩余权限仍然生效。

所需权限

  • 非三权分立模式下,撤销其他用户的权限的用户具备目标数据库、表、列或模式(只适用于关系数据自定义模式)的 GRANT 权限和被撤销的权限。例如,撤销其他用户目标表的 SELECT 权限的用户必须具备目标表的 GRANTSELECT 权限。
  • 三权分立模式下,
    • 用户是 sysadmin 角色的成员。默认情况下,sysroot 用户属于 sysadmin 角色。
    • 撤销权限的普通用户在目标数据库、表、列或模式(只适用于关系数据自定义模式)上具备 GRANT 权限和被撤销的权限。例如,撤销其他用户目标表的 SELECT 权限的用户必须具备目标表的 GRANTSELECT 权限。

语法格式

  • 撤销数据库、表或模式(只适用于关系数据自定义模式)的权限

  • 撤销数据列的权限

参数说明

参数说明
table_name表名,支持同时撤销多张表的权限。表名之间使用逗号(,)隔开。,权限名称。
database_name数据库名,支持同时撤销多个数据库的权限。数据库名之间使用逗号(,)隔开。
schema_name模式名。支持同时撤销多个用户自定义模式的权限。模式名称之间使用逗号(,)隔开。
说明
该参数只适用于关系数据。
column_name列名,支持同时撤销多个列的权限。列名之间使用逗号(,)隔开。
user_name撤销权限的用户或角色名称,支持同时撤销多个用户或角色的权限。用户或角色名称之间使用逗号(,)隔开。

语法示例

  • 撤销目标数据库的 CREATE 权限。

    以下示例撤销 user11 用户 db1defaultdb 数据库的 CREATE 权限。

    REVOKE CREATE ON DATABASE db1, defaultdb FROM user11;
    
  • 撤销目标列的 SELECT 权限。

    以下示例撤销 user1 用户 tb1nameid 列的 SELECT 权限。

    REVOKE SELECT(name, id) ON TABLE tb1 FROM user1;
    

查看权限

SHOW GRANTS 语句用于查看用户在指定数据库、表、列或模式(只适用于关系数据自定义模式)中的权限。

所需权限

无。如需使用 SHOW GRANTS ON ROLE SQL 命令,用户必须具备系统表的 SELECT 权限。

语法格式

参数说明

参数说明
table_name表名,支持同时查看多张表的权限。表名之间使用逗号(,)隔开。,权限名称。
database_name数据库名,支持同时查看多个数据库的权限。数据库名之间使用逗号(,)隔开。
schema_name模式名。支持同时查看多个用户自定义模式的权限。模式名称之间使用逗号(,)隔开。
说明
该参数只适用于关系数据。
user_name待查看权限的用户或角色名称,支持同时查看多个用户或角色的权限。用户或角色名称之间使用逗号(,)隔开。

语法示例

  • 查看数据表与用户的权限关系。

    以下示例查看 defaultdb 数据库中 t1 表的用户权限的分配情况。

    SHOW GRANTS ON TABLE defaultdb.t1;
    

    执行成功后,控制台输出以下信息:

    database_name | schema_name | table_name | column_name | grantee | privilege_type
    ----------------+-------------+------------+-------------+---------+-----------------
    defaultdb     | public      | t1         | id          | admin   | ALL
    defaultdb     | public      | t1         | name        | admin   | ALL
    defaultdb     | public      | t1         | NULL        | root    | ALL
    (3 rows)
    
  • 查看数据列与用户的权限关系。

    以下示例查看 user1 用户对 defaultdb 数据库中 tb1 表及其列的用户权限。

    SHOW GRANTS ON TABLE defaultdb.tb1 for user1;
    

    执行成功后,控制台输出以下信息:

    database_name | schema_name | table_name | column_name | grantee | privilege_type
    ----------------+-------------+------------+-------------+---------+-----------------
    defaultdb     | public      | tb1        | NULL        | user1   | GRANT
    defaultdb     | public      | tb1        | NULL        | user1   | INSERT
    defaultdb     | public      | tb1        | age         | user1   | SELECT
    defaultdb     | public      | tb1        | name        | user1   | GRANT
    defaultdb     | public      | tb1        | name        | user1   | SELECT
    (5 rows)