《一文讲透》第4期:KWDB 数据库运维(4) —— 安全与审计(下)

原创
2024/12/03 18:20
阅读数 275

在上一期 KWDB 数据库安全与审计中主要介绍了数据加密、身份鉴别和审计管理。今天我们将重点介绍安全与审计中的“权限管理”

 

KWDB 权限管理机制较为灵活,为用户提供了多层次、多维度的权限管理功能,具体包括:

 

  • 基于角色的权限管理:管理员可以创建不同的角色,并为每个角色分配特定的权限。通过将用户和角色分配到适当的角色中,实现对用户权限的管理,从而简化权限管理流程,确保安全性。

 

  • 细粒度的对象级权限控制:KWDB 允许管理员对数据库中的对象,例如数据库、表,进行细粒度的权限控制。管理员可以精确地指定哪些用户或角色可以访问特定的数据库对象,以及可以执行的操作类型。

 

  • 动态权限调整:管理员可以随时根据需要调整用户或角色的权限,包括增加、修改或撤销权限,及时响应业务需求或安全策略的变化,保障系统的灵活性和安全性。

 

01 角色和成员管理

KWDB 使用角色(Role)来管理用户权限。角色是权限的集合,用户可以通过赋予角色来获得相应的权限。这样做简化了权限管理,方便对用户进行分组和管理。

 

✅ 创建角色

KWDB 使用 CREATE ROLE 语句来创建新角色,并为角色设置各种选项,如创建角色选项和登录选项。

 

前提条件:

  • 用户拥有 CREATEROLE 选项或是 admin 角色的成员。

 

SQL 语法:

CREATE ROLE <name> [IF NOT EXISTS] [WITH <role_options>];

 

参数说明:

 

  • IF NOT EXISTS:可选关键字,如果设置了 IF NOT EXISTS,当要创建的角色不存在时,系统创建角色;如果已经存在,系统不会创建角色,但是不报错。如果未设置 IF NOT EXISTS,当要创建的角色不存在时,系统创建角色;如果已经存在,系统报错,提示角色已存在。

 

  • name:要创建的角色名称。角色名称不区分大小写;必须以字母或下划线开头;必须仅包含字母,数字或下划线;且必须介于 1 到 63 个字符之间。

 

  • role_options :可选参数,可以包含以下一个或多个选项:

 

    • CREATEROLE:创建角色。设置该选项的角色可以创建、修改或删除其他用户或角色。默认情况下,创建角色时不设置该选项。

    • NOCREATEROLE:创建角色时的默认选项,表示禁止创建角色。

    • LOGIN:允许登录,设置该选项的角色可以登录 KWDB 服务器,默认情况下,创建角色时不设置该选项。

    • NOLOGIN:创建角色时的默认选项,表示禁止登录。

    • PASSWORD <password>:设置角色密码,设置该选项的角色可以使用密码安全访问节点。密码必须是字符串的形式,并使用单引号(')将密码括起来,支持设置为 NULL。

    • VALID UNTIL <time>:设置密码的有效期,采用 timestamp 格式,到达指定日期或时间后,密码失效。设置时需使用单引号(')将密码有效期括起来,支持设置为 NULL。

 

示例1:创建默认角色

默认情况下,该角色未设置创建角色选项也不支持登录。

> CREATE ROLE role1;CREATE ROLE
> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | NOLOGIN                                        | {}  root     | CREATEROLE                                     | {admin}(3 rows)

 

示例2:创建角色,并为该角色设置创建角色选项

> CREATE ROLE role2 WITH CREATEROLE;CREATE ROLE
> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | NOLOGIN                                        | {}  role2    | CREATEROLE, NOLOGIN                            | {}  root     | CREATEROLE                                     | {admin}(4 rows)

 

示例 3:创建角色,并为该角色设置登录选项

> CREATE ROLE role3 WITH LOGIN;CREATE ROLE 
> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | NOLOGIN                                        | {}  role2    | CREATEROLE, NOLOGIN                            | {}  role3    |                                                | {}  root     | CREATEROLE                                     | {admin}(5 rows)

 

示例 4:创建角色,并为该角色设置密码和密码有效期

> CREATE ROLE role4 WITH PASSWORD '11aa!!AA' VALID UNTIL '2024-01-01';CREATE ROLE 
> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | NOLOGIN                                        | {}  role2    | CREATEROLE, NOLOGIN                            | {}  role3    |                                                | {}  role4    | NOLOGIN, VALID UNTIL=2024-01-01 00:00:00+00:00 | {}  root     | CREATEROLE                                     | {admin}(6 rows)

 

 查看角色

SHOW USERS 和 SHOW ROLES 语句均可用于查看已创建的角色。

 

示例:查看已创建的角色:

> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | NOLOGIN                                        | {}  role2    | CREATEROLE, NOLOGIN                            | {}  role3    |                                                | {}  role4    | NOLOGIN, VALID UNTIL=2024-01-01 00:00:00+00:00 | {}  root     | CREATEROLE                                     | {admin}(6 rows)

 

✅ 更改角色

ALTER ROLE 语句可用于更改角色的一个或多个选项,如更改登录密码等。每条语句只支持更改一个角色。

 

前提条件:

  • 用户拥有 CREATEROLE 选项或是 admin 角色的成员。

 

SQL 语法:

ALTER ROLE [IF EXISTS] <role_name> [WITH <role_options>];

 

参数说明:

 

  • IF EXISTS:可选关键字,若角色存在,则更改角色;若角色不存在,系统不报错。

 

  • role_name:要更改的角色名称,角色名不区分大小写;必须以字母或下划线开头,仅包含字母,数字或下划线;长度在 1 到 63 个字符之间。

 

  • role_options:可选参数,可同时设置多个选项

 

    • CREATEROLE:创建角色。设置该选项的角色可以创建、修改或删除其他用户或角色。默认情况下,创建角色时不设置该选项。

    • NOCREATEROLE:创建角色时的默认选项,表示禁止创建角色。

    • LOGIN:允许登录,设置该选项的角色可以登录 KWDB 服务器。默认情况下,创建角色时不设置该选项。

    • NOLOGIN:创建角色时的默认选项,表示禁止登录。

    • PASSWORD <password>:设置角色密码。设置该选项的角色可以使用密码安全访问节点。密码必须是字符串的形式,并使用单引号(')将密码括起来,支持设置为 NULL。

    • VALID UNTIL <time>:设置密码有效期,支持 timestamp 格式。到达指定日期或时间后,密码失效。需使用单引号(')将密码有效期括起来,支持设置为 NULL。

 

示例 1:修改角色,为角色设置 CREATEROLE 选项

> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | NOLOGIN                                        | {}  role2    | CREATEROLE, NOLOGIN                            | {}  role3    |                                                | {}  role4    | NOLOGIN, VALID UNTIL=2024-01-01 00:00:00+00:00 | {}  root     | CREATEROLE                                     | {admin}(6 rows)
> ALTER ROLE role1 WITH CREATEROLE;ALTER ROLE
> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | CREATEROLE, NOLOGIN                            | {}  role2    | CREATEROLE, NOLOGIN                            | {}  role3    |                                                | {}  role4    | NOLOGIN, VALID UNTIL=2024-01-01 00:00:00+00:00 | {}  root     | CREATEROLE                                     | {admin}(6 rows)

 

示例 2:修改角色密码

> ALTER ROLE role2 WITH PASSWORD 'pas2doc';ALTER ROLE

 

示例 3:修改角色密码的有效期

> ALTER ROLE role3 WITH VALID UNTIL '2025-12-31';ALTER ROLE

> SHOW ROLES;  username |                    options                     | member_of-----------+------------------------------------------------+------------  admin    | CREATEROLE                                     | {}  role1    | CREATEROLE, NOLOGIN                            | {}  role2    | CREATEROLE, NOLOGIN                            | {}  role3    |                                                | {}  role4    | NOLOGIN, VALID UNTIL=2025-12-31 00:00:00+00:00 | {}  root     | CREATEROLE                                     | {admin}(6 rows)

 

✅ 为角色添加成员

使用 GRANT <roles> 语句为角色添加成员,成员继承角色的所有权限。

 

前提条件:

  • 用户拥有 admin 权限。

 

SQL 语法:

GRANT <role_name> TO <user_name> [WITH ADMIN OPTION];

 

参数说明:

  • role_name:角色名。支持一次为多个角色添加同一成员,角色名之间使用逗号分隔。

  • user_name:要添加的成员,成员可以是用户或角色,支持一次为角色添加多个成员,成员名之间使用逗号分隔。

  • WITH ADMIN OPTION:将成员指定为角色的管理员。角色管理员可以授予或撤销角色的成员资格。

 

示例 1:为角色添加成员,默认无管理员权限

> GRANT role1 TO user1;GRANT 
> SHOW GRANTS ON ROLE role1;  role_name | member | is_admin------------+--------+-----------  role1     | user1  |  false(1 row)示例 2:为角色添加角色管理员> GRANT role1 TO user1 WITH ADMIN OPTION;GRANT
> SHOW GRANTS ON ROLE role1;  role_name | member | is_admin------------+--------+-----------  role1     | user1  |   true(1 row)

 

✅ 从角色中删除成员

使用 REVOKE 语句将成员从角色中删除。

注意:无法将 root 用户从 admin 角色中删除。

 

前提条件:

  • 用户拥有 admin 权限。

 

SQL 语法:

REVOKE [ADMIN OPTION FOR] <role_name> FROM <user_name>;

 

参数说明:

 

  • ADMIN OPTION FOR:可选关键字,如果设置该关键字,只撤销用户的管理员角色,但不删除其成员资格;如果没有设置该关键字,删除角色成员。

 

  • role_name:要删除成员的角色。支持从多个角色中删除同一成员,多个角色之间使用逗号分隔。

 

  • user_name:要从角色中删除的成员,成员可以是用户或角色,支持一次删除多个用户或角色,多个成员之间使用逗号分隔。

 

示例 1:只撤销成员的管理员角色,不删除其成员资格

> SHOW GRANTS ON ROLE role1;role_name|member|is_admin---------+------+--------role1    |role2 |falserole1    |user1 |true(2 rows)

> REVOKE ADMIN OPTION FOR role1 FROM user1;REVOKE

> SHOW GRANTS ON ROLE role1;role_name|member|is_admin---------+------+--------role1    |role2 |falserole1    |user1 |false(2 rows)

 

示例 2:删除角色的成员

> SHOW GRANTS ON ROLE role1;role_name|member|is_admin---------+------+--------role1    |role2 |falserole1    |user1 |false(2 rows)

> REVOKE role1 FROM user1;REVOKE

> SHOW GRANTS ON ROLE role1;role_name|member|is_admin---------+------+--------role1    |role2 |false(1 row)

 

✅ 删除角色

使用 DROP ROLE 语句删除已创建的角色。每条语句支持删除多个角色。

 

前提条件:

  • 用户拥有 CREATEROLE 选项或是 admin 角色的成员。

 

SQL 语法:

DROP ROLE [IF EXISTS] <name>;

 

参数说明:

  • IF EXISTS:可选关键字,设置了 IF EXISTS,如果角色存在,系统删除角色;如果角色不存在,系统不会删除角色,但不会报错。没有设置 IF EXISTS,如果角色存在,系统删除角色;如果角色不存在,系统报错,提示角色不存在。

 

  • name:要删除的角色名。支持同时删除多个角色,角色之间使用逗号分隔。

 

示例:删除角色 role1:

DROP ROLE role1;

 

02 权限管理

KWDB 支持对数据库和表在内的数据库对象的访问和操作权限进行管理,从而确保数据库安全性,具体支持的权限包括:

 

权限

说明

操作对象

ALL

对指定数据库对象执行所有操作

DATABASE

TABLE

SCHEMA(只适用于关系数据的自定义模式)

CREATE

创建新对象

DATABASE

TABLE

SCHEMA(只适用于关系数据的自定义模式)

DROP

删除指定对象

DATABASE

TABLE

SCHEMA(只适用于关系数据的自定义模式)

GRANT

授予指定用户特定权限

DATABASE

TABLE

SCHEMA(只适用于关系数据的自定义模式)

SELECT

对指定数据表执行查询操作

TABLE

INSERT

对指定数据表执行数据插入操作

TABLE

DELETE

删除指定数据表

TABLE

UPDATE

更新指定数据表

TABLE

 

✅ 授予权限

权限授予是指将特定权限赋予用户或角色,使其能够执行相应的操作。权限可以授予多个用户或角色,也可以针对多个目标对象进行配置。

 

前提条件:

  • 用户拥有 admin(ALL)权限

     

SQL 语法:

GRANT <privilege> ON [TABLE | DATABASE | SCHEMA] <target_name> To <user_name>;

 

参数说明:

  • privilege:权限名,支持同时授予多个权限,由逗号分隔,支持使用 ALL 表述授予所有权限。

 

  • target_name:目标对象名称。支持同时向多个目标对象授予权限,由逗号分隔。

 

  • user_name:用户或角色名称,支持同时多个用户或角色授予,由逗号分隔。

 

示例 1:授予用户特定数据库的创建权限

> GRANT CREATE ON DATABASE db1, defaultdb TO operatora;

 

✅ 撤销权限

权限撤销是指移除用户或角色的特定权限,以限制其对数据库对象的操作。撤销权限时,可以指定多个用户或角色,也可以针对多个目标对象进行配置。

 

前提条件:

  • 用户拥有 admin(ALL)权限

 

SQL 语法:

REVOKE <privilege> ON [TABLE | DATABASE | SCHEMA] <target_name> FROM <user_name>;

参数说明:

 

  • privilege:权限名,支持同时撤销多个权限,用逗号分隔,支持使用 ALL 表述撤销所有权限。

 

  • target_name:目标对象名称。支持同时撤销多个目标对象的权限设置,用逗号分隔。

 

  • user_name:用户或角色名称,支持同时多个用户或角色撤销权限,用逗号分隔。

 

示例 1:撤销用户特定数据库的创建权限

> REVOKE CREATE ON DATABASE db1, defaultdb FROM user11;

 

示例 2:撤销用户指定表的删除权限

> REVOKE DELETE ON TABLE defaultdb.t1 FROM user11;

 

✅ 查询权限

查询权限是指查看当前数据库中用户或角色的权限分配情况,帮助管理员了解和管理权限配置。

 

前提条件:

  • 当前用户拥有 admin(ALL)权限。

 

SQL 语法:

SHOW GRANTS [ON [ROLE | DATABASE | SCHEMA | TABLE] <name> [For <user_name>]];

参数说明

 

  • name:目标对象名称,支持查看多个对象的权限设置,名称之间使用逗号分隔。

 

  • user_name:可选参数,用户或角色名称,支持查看多个用户或角色,由逗号分隔。

 

示例 1:查看表与用户的权限关系

> SHOW GRANTS ON TABLE defaultdb.t1;database_name|schema_name|table_name|grantee|privilege_type-------------+-----------+----------+-------+--------------defaultdb    |public     |t1        |admin  |ALLdefaultdb    |public     |t1        |root   |ALLdefaultdb    |public     |t1        |user11 |DELETE(3 rows)

 

示例 2:查看库与用户的权限关系

> SHOW GRANTS ON DATABASE defaultdb;database_name|schema_name         |grantee|privilege_type-------------+------------------+-------+--------------defaultdb    |information_schema|admin  |ALLdefaultdb    |information_schema|root   |ALLdefaultdb    |information_schema|user11 |CREATE(3 rows)

 

示例 3:查看所有权限

> SHOW GRANTS;

 

 

以上就是 KWDB 数据库权限管理的全部内容,更多精彩后续欢迎关注我们!

 

往期推荐:

《一文讲透》第1期:KWDB 单点安装部署

《一文讲透》第2期:两种 KWDB 的快速上手连接方式

《一文讲透》第3期:简易快速实现 KWDB 的高效管理

《一文讲透》第4期:KWDB 数据库运维(1) —— 日志系统解读

《一文讲透》第4期:KWDB 数据库运维(2) —— 集群参数

《一文讲透》第4期:KWDB 数据库运维(3) —— 安全与审计(上)

 

 

 

 

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部