权限管理
KaiwuDB 支持管理用户权限,确保关键、重要功能、数据的安全性。
授予权限
权限授予指将特定权限赋予用户或角色,使其能够执行相应的操作。权限既可以授予多个用户或角色,也可以授予多个目标对象。
说明
- 如果用户权限未能及时更新,可以删除该用户后再创建非同名用户,重新授予权限。
GRANT语句支持对表的每一列进行权限授予。表权限和列权限单独管理。
前提条件
- 非三权分立模式下,授予权限的用户在目标数据库、表、列或模式(只适用于关系数据自定义模式)上具备
GRANT权限和被授予的权限。例如,向其他用户授予目标表的SELECT权限的用户必须具备目标表的GRANT和SELECT权限。 - 三权分立模式下,
- 用户是
sysadmin角色的成员。默认情况下,sysroot用户属于sysadmin角色。 - 授予权限的普通用户在目标数据库、表、列或模式(只适用于关系数据自定义模式)上具备
GRANT权限和被授予的权限。例如,向其他用户授予目标表的SELECT权限的普通用户必须具备目标表的GRANT和SELECT权限。
- 用户是
语法格式
授予数据库、表或模式(只适用于关系数据自定义模式)的权限
GRANT <privilege> ON [TABLE | DATABASE | SCHEMA] <target_name> TO <user_name>;授予数据列的权限
GRANT <privilege> (<column_list>) ON TABLE <target_name> TO <user_name>;
参数说明
| 参数 | 说明 |
|---|---|
privilege | 待授予的权限。支持同时授予多个权限。权限名称之间使用逗号(,)隔开。目标对象不同,支持授予的权限也不同。 - 数据库、模式(只适用于关系数据自定义模式)或表: CREATE、GRANT、SELECT、DROP、INSERT、DELETE、UPDATE - 列: GRANT、SELECT、INSERT、UPDATE 支持使用 ALL 表示授予所有权限。 |
column_name | 列名,支持同时授予多个列的权限。列名之间使用逗号(,)隔开。 |
target_name | 目标对象名称。支持同时向多个目标对象授予权限,目标对象名称之间使用逗号(,)隔开。 |
user_name | 用户或角色名称,支持同时向多个用户或角色授予权限,用户或角色名称之间使用逗号(,)隔开。 |
语法示例
授予目标数据库的
CREATE权限。以下示例授予
operatora用户db1和defaultdb数据库的CREATE权限。GRANT CREATE ON DATABASE db1, defaultdb TO operatora;授予目标列的
SELECT权限。以下示例假设已创建
user1用户和tb1表,并向表中写入相关数据。以下示例授予user1用户tb1表name和id列的SELECT权限。GRANT SELECT(name, id) ON TABLE tb1 TO user1;
撤销权限
权限撤销指移除用户或角色的特定权限,限制其对数据库对象的操作。撤销权限时,可以指定多个用户或角色,也可以针对多个目标对象进行配置。
说明
REVOKE语句支持对表的每一列进行权限撤销。单独撤销表的权限,列的相同权限同时被撤销。但是,单独撤销列的权限,不影响表的相同权限。- 当某列被授予
ALL权限后,使用REVOKE语句撤销其中一个权限时,剩余权限仍然生效。
前提条件
- 非三权分立模式下,撤销其他用户的权限的用户具备目标数据库、表或模式(只适用于关系数据自定义模式)的
GRANT权限和被撤销的权限。例如,撤销其他用户目标表的SELECT权限的用户必须具备目标表的GRANT和SELECT权限。 - 三权分立模式下,
- 用户是
sysadmin角色的成员。默认情况下,sysroot用户属于sysadmin角色。 - 撤销权限的普通用户在目标数据库、表、列或模式(只适用于关系数据自定义模式)上具备
GRANT权限和被撤销的权限。例如,撤销其他用户目标表的SELECT权限的用户必须具备目标表的GRANT和SELECT权限。
- 用户是
语法格式
撤销数据库、表或模式(只适用于关系数据自定义模式)的权限
REVOKE <privilege> ON [TABLE | DATABASE | SCHEMA] <target_name> FROM <user_name>;撤销数据列的权限
REVOKE <privilege> (<column_list>) ON TABLE <target_name> FROM <user_name>;
参数说明
| 参数 | 说明 |
|---|---|
privilege | 待撤销的权限。支持同时撤销多个权限。权限名称之间使用逗号(,)隔开。目标对象不同,支持撤销的权限也不同。 - 数据库、模式(只适用于关系数据自定义模式)或表: CREATE、GRANT、SELECT、DROP、INSERT、DELETE、UPDATE - 列: GRANT、SELECT、INSERT、UPDATE 支持使用 ALL 表示撤销所有权限。 |
column_name | 列名,支持同时撤销多个列的权限。列名之间使用逗号(,)隔开。 |
target_name | 目标对象名称。支持同时撤销多个目标对象的权限,目标对象名称之间使用逗号(,)隔开。 |
user_name | 用户或角色名称,支持同时撤销多个用户或角色的权限,用户或角色名称之间使用逗号(,)隔开。 |
语法示例
撤销用户特定数据库的创建权限。
以下示例撤销
user11用户db1和defaultdb数据库的创建权限。REVOKE CREATE ON DATABASE db1, defaultdb FROM user11;撤销用户指定表的删除权限。
以下示例撤销
user11用户defaultdb数据库中t1数据表的删除权限。REVOKE DELETE ON TABLE defaultdb.t1 FROM user11;撤销目标列的
SELECT权限。以下示例撤销
user1用户tb1表name和id列的SELECT权限。REVOKE SELECT(name, id) ON TABLE tb1 FROM user1;
查看权限
SHOW GRANTS 语句用于查看用户在指定数据库、表、列或模式(只适用于关系数据自定义模式)中的权限。
前提条件
无。如需使用 SHOW GRANTS ON ROLE SQL 命令,用户必须具备系统表的 SELECT 权限。
语法格式
SHOW GRANTS [ON [ROLE | DATABASE | SCHEMA | TABLE] <name> [FOR <user_name>]];
参数说明
| 参数 | 说明 |
|---|---|
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)查看数据库与用户的权限关系。
以下示例查看
defaultdb数据库的用户权限的分配情况。SHOW GRANTS ON DATABASE defaultdb;执行成功后,命令行输出以下信息:
database_name|schema_name |grantee|privilege_type -------------+------------------+-------+-------------- defaultdb |information_schema|admin |ALL defaultdb |information_schema|root |ALL defaultdb |information_schema|user11 |CREATE (3 rows)查看所有权限。
SHOW GRANTS;