0


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

在前几篇的 KWDB 数据运维文章中,我们和大家分享了日志系统、集群参数。今天我们主要分享 KWDB 的安全与审计。

为确保用户数据的保密性、完整性和可用性,KWDB 提供了如下的安全功能:

✅** 数据加密:**

KWDB 支持使用 SSL/TLS 协议对客户端和服务器之间的数据传输进行加密,确保数据在传输过程中不被窃取或篡改,提高了数据传输的安全性。

身份鉴别:

KWDB 通过基于用户名和密码的身份鉴别及灵活的主机认证规则,确保数据库访问的安全性。

  • 基于用户名和密码的身份鉴别:用户在登录时需提供正确的用户名和密码,系统将验证其凭证以允许访问。
  • 基于主机的认证:KWDB 支持用户通过系统参数配置对指定用户和指定 IP 地址范围设置基于证书、密码认证,无条件允许或拒绝连接等认证规则,实现对主机的访问的精确管理。

权限管理:

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

  • 基于角色的权限管理:管理员可以创建不同的角色,并为每个角色分配特定的权限。通过将用户和角色分配到适当的角色中,实现对用户权限的管理,从而简化权限管理流程,确保安全性。
  • 细粒度的对象级权限控制:KWDB 允许管理员对数据库中的对象,例如数据库、表,进行细粒度的权限控制。管理员可以精确地指定哪些用户或角色可以访问特定的数据库对象,以及可以执行的操作类型。
  • 动态权限调整:管理员可以随时根据需要调整用户或角色的权限,包括增加、修改或撤销权限,及时响应业务需求或安全策略的变化,保障系统的灵活性和安全性。

审计管理:

审计管理是 KWDB 安全管理的核心组成部分,通过全面记录数据库活动和用户操作,KWDB 能够帮助用户实时监控数据库的安全状态,并生成详尽的审计日志。这些日志可以帮助用户追溯安全事件的发生原因,加强对数据库的监控和管理。

因内容篇幅较长,我们将分上下两个章节为大家详细介绍。本次重点为数据加密、身份鉴别和审计管理部分,权限管理将在下一章节单独介绍。

**01 **数据加密

KWDB 默认在部署时采用安全模式,使用 TLS 加密技术来验证节点和客户端的身份,对节点与客户端、以及节点与节点之间的数据传输进行加密。这一机制有效地防范了未经授权的访问和数据篡改,保障了数据的安全性和完整性。

1、启用安全模式

KWDB 通过 --certs-dir 参数配置安全证书,并以安全模式启动。

2、管理和存放证书

如果需要修改证书的存放目录,可以通过修改 --certs-dir 参数以指定新的存放目录。容器部署 docker-compose.yml 文件配置示例:

command:       
    - /bin/bash      
    - -c      
    - |        
      /KWDB/bin/kwbase  start-single-node --certs-dir=/KWDB/certs --listen-addr=0.0.0.0:26257 --advertise-addr=192.168.123.128:26257 --store=/KWDB/deploy/KWDB-container

**02 **身份鉴别

KWDB 通过基于用户名和密码的身份鉴别及灵活的主机认证规则,确保数据库访问的安全性。

基于用户名和密码的身份鉴别

基于用户名和密码的身份鉴别是 KWDB 最基本的身份验证方式。使用此方法时,数据库在用户登录时会验证其提供的用户名和密码是否匹配。这里主要介绍如何设置用户密码及用户密码修改。

1、设置用户密码

用户可以使用 CREATE USER 语句创建新用户并设置密码。KWDB 支持为每个用户设置密码的有效期,以增强安全性。

前提条件:

  • 用户拥有 CREATEROLE 权限或者是 admin 角色的成员。SQL 语法:
CREATE USER <name> WITH PASSWORD '<password>' [VALID UNTIL '<time>'];

参数说明:

  • name:要创建的用户名称。用户名称不区分大小写;以字母或下划线开头;必须仅包含字母,数字或下划线;且必须介于 1 到 63 个字符之间。
  • password:用户密码。用户使用此密码安全访问节点。密码必须采用字符串的形式,并使用单引号(')将密码括起来。
  • time:可选参数,用于设置密码有效期,支持 timestamp 格式。到达指定日期或时间后,密码失效。需使用单引号(')将密码有效期括起来。

示例:

创建用户 user1,并设置密码和密码有效期:

CREATE USER user1 WITH PASSWORD '11aa!!AA' VALID UNTIL '2025-01-01 00:00:00+00:00';

修改用户密码

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

前提条件:

  • 用户拥有 CREATEROLE 选项或是 admin 角色的成员。SQL 语法如下:
ALTER USER [IF EXISTS] <name> WITH [ PASSWORD '<password>' | VALID UNTIL '<time>'];

参数说明:

  • IF EXISTS:可选关键字。若用户存在则更改,若用户不存在则不报错。未设置 IF EXISTS 时,若用户不存在则系统报错。
  • name:要更改的用户名称。用户名称不区分大小写;必须以字母或下划线开头,仅包含字母、数字或下划线,且长度在 1 到 63 个字符之间。
  • password:设置用户密码。密码必须采用字符串形式,并用单引号(')括起来。
  • time:设置密码有效期,采用 timestamp 格式,并用单引号(')括起来。

示例 1:修改用户密码:

ALTER USER user1 WITH PASSWORD 'PassWord4Deomo';

示例 2:修改用户密码的有效期:

ALTER USER user1 WITH VALID UNTIL '2025-12-31';

基于主机的认证

KWDB 提供基于主机的认证配置,控制客户端的访问权限。认证规则格式与 PostgreSQL 的 pg_hba.conf 兼容,用户可通过 server.host_based_authentication.configuration 集群参数设置认证规则。

前提条件:

  • 用户拥有 admin 权限。SQL 语句:
SET CLUSTER SETTING server.host_based_authentication.configuration = 'host all <user_name> <address> <method>';

参数说明:

  • user_name:用户名称,支持设置为 all,表示匹配所有用户。
  • address:设置允许或拒绝访问的 IP 地址范围,如果字段值包含了 IP 地址及其掩码,例如 192.168.1.0/24,则无需提供掩码值,如果字段值只包含了 IP 地址,例如 192.168.1.0,没有掩码,则接下来的字段就必须提供有效的 IP 掩码,例如 255.255.255.0。支持设置为 all,表示适用于所有 IP 地址。
  • method:认证规则,用户可以根据需求定制认证规则,具体包括- cert:基于证书的身份验证(需要 SSL 连接)。- cert-password:基于证书或密码的身份验证(需要 SSL 连接)。- password:基于密码的身份验证(需要 SSL 连接)。- trust:无条件地允许匹配的连接。- reject:无条件地拒绝匹配的连接。

示例 1:禁用特定 IP 的用户连接:

SET CLUSTER SETTING server.host_based_authentication.configuration = 'host all all 10.110.10.153/32 reject';

示例 2:允许 testuser 用户使用证书连接:

SET CLUSTER SETTING server.host_based_authentication.configuration = 'host all testuser 0.0.0.0/0 cert';

**03 **审计管理

审计管理是 KWDB 安全管理的核心组成部分,KWDB 支持监控和记录包括管理员在内的用户操作,对系统级、语句级和对象级操作进行审计。

系统级审计会在审计功能开启后自动启动。下表为 KWDB 支持审计的系统级操作:

语句级和对象级审计需要用户通过 SQL 语句创建和启用相应的审计策略。下表为 KWDB 支持审计的语句级操作:

KWDB 支持审计的对象级操作包括:

审计功能开启后,系统会默认将审计结果保存在审计日志文件。更多审计日志相关信息见文章最后的审计日志章节。

开启审计功能

审计功能默认关闭,如需对用户操作进行审计,需要通过 SQL 语句开启审计功能。

前提条件:

  • 用户为 admin 用户。SQL 语法:
set cluster setting audit.enabled = true;

语句级和对象级审计策略通过 SQL 语句进行创建、启用、修改和删除,系统级审计不需要创建审计策略。用户开启审计开关后,一旦发生支持审计的系统级操作,系统就会自动生成相应的审计日志。

管理安全审计策略

1、创建审计策略

前提条件:

  • 用户为 admin 用户。SQL 语法:
CREATE AUDIT [IF NOT EXISTS] <audit_name>
ON [ALL | <target_type> [<target_name>]]
FOR [ALL | <operations>]
TO [ALL | <operators>]
[WHENEVER [ALL]];

参数说明:

  • IF NOT EXISTS:可选关键字,如果设置了 IF NOT EXISTS,当要创建的审计策略不存在时,系统创建审计策略;如果已经存在,系统无法创建审计策略,但是不报错。
  • audit_name:审计策略名称,必须是唯一的。
  • target_type:对象类型,支持 user、role、database、schema、table、view、index、sequence、privilege、audit、range、query、job、schedule、session 和 statistics,可使用 “ALL” 作为参数值,对所有对象类型进行审计。
  • target_name:数据库已存在的对象名称。格式为 database_name.target_name;如果只提供了对象名称,则默认对当前数据库的对象进行审计。如果没有指定对象名称,KWDB 会指定对象类型的操作进行审计。
  • operations:操作事件,支持指定一个或多个操作对象,使用逗号分隔,可使用‘“ALL” 作为参数值对所有操作进行审计,支持审计的操作取决于对象可执行的操作。
  • operators:用户或角色名称,支持指定一个或多个用户或角色,使用逗号分隔,可使用 “ALL” 作为参数值对所有用户和角色进行审计。
  • WHENEVER:可选关键字,指定审计执行条件,默认为 ALL,表示总是记录审计,且只支持设置为 ALL;

示例 1:创建语句级审计策略

> CREATE AUDIT atest ON DATABASE FOR create TO root;

示例 2:创建对象级审计策略

> CREATE AUDIT atest ON TABLE t1 FOR SELECT TO root;

2、修改审计策略

修改设置审计策略支持启用、禁用审计策略以及对策略进行重命名。

前提条件:

  • 用户为 admin 用户。SQL 语法:
ALTER AUDIT [IF EXISTS] <audit_name> [ENABLE | DISABLE | RENAME TO <new_name>];

参数说明:

  • IF EXISTS:可选关键字,设置了 IF EXISTS,如果审计策略存在,系统更改审计策略;如果审计策略不存在,系统无法更改审计策略,但不会报错。
  • audit_name:审计策略名称。
  • ENABLE:将审计策略状态修改为生效,默认为不生效。
  • DISABLE:将审计策略状态修改为暂不生效。
  • new_name:审计策略名称的新名称,必须是唯一的。

示例 2:重命名审计策略

> ALTER AUDIT atest RENAME TO btest;

3、查看审计策略

[ON <target_type> [<target_name>] [FOR <operations>] [TO <operators>]];

参数说明:

  • target_type:可选参数,指定对象类型,支持 user、role、database、schema、table、view、index、sequence、privilege、audit、range、query、job、schedule、session、statistics 和 all。
  • target_name:可选参数,指定数据库已存在的对象名称,格式为 database_name.target_name;如果只提供了对象名称,则默认对当前数据库的对象进行审计。如果没有指定对象名称,KWDB 查看指定对象类型的审计策略。注:如果对象类型为 database,无法指定对象名称。
  • operations:可选参数,指定操作事件,支持指定一个或多个操作对象,使用逗号分隔。支持审计的操作取决于对象可执行的操作。
  • operators:可选参数,指定用户或角色名称,支持指定一个或多个用户或角色,使用逗号分隔。

示例 1:查看所有审计策略

> show audits;  
  audit_name | target_type | target_name | target_id | operations | operators | condition | whenever | action | level | enable
-------------+-------------+-------------+-----------+------------+-----------+-----------+----------+--------+-------+---------  
  b          | ALL         |             |         0 | ALL        | rest_user |         0 | ALL      |      0 |     0 | false  
  c          | DATABASE    |             |         0 | ALL        | rest_user |         0 | ALL      |      0 |     0 | false  
  d          | ALL         |             |         0 | ALL        | rest_user |         0 | ALL      |      0 |     0 | false
(3 rows)

示例 2:查看指定对象类型的审计策略

> show audits on database;  
  audit_name | target_type | target_name | target_id | operations | operators | condition | whenever | action | level | enable
-------------+-------------+-------------+-----------+------------+-----------+-----------+----------+--------+-------+---------  
  c          | DATABASE    |             |         0 | ALL        | rest_user |         0 | ALL      |      0 |     0 | false
(1 row)

4、删除审计策略

前提条件:

  • 用户为 admin 用户。SQL 语法:
DROP AUDIT [IF EXISTS] <audit_name>;

参数说明:

  • IF EXISTS: 可选关键字,设置了 IF EXISTS,如果审计策略存在,系统删除审计策略;如果审计策略不存在,系统不会删除审计策略,但不会报错。没有设置 IF EXISTS,如果审计策略存在,系统删除审计策略;如果审计策略不存在,系统报错,提示审计策略不存在。
  • audit_name:审计策略名称,支持同时删除多个策略,用逗号隔开。

示例:

> DROP AUDIT btest;

✅** 审计日志**

审计功能开启后,系统会默认将审计结果保存在审计日志文件。审计日志文件包含以下信息:

日志示例:

I240415 06:49:34.207014 538 security/audit/actions/record_to_log.go:45  [n1] 3 {"EventTime":"2024-04-15T06:49:34.206948441Z","Elapsed":2242701,"User":{"UserID":0,"Username":"root","Roles":[{"ID":0,"Name":"admin"}]},"Event":"CREATE","Target":{"Typ":"DATABASE","Targets":{"78":{"ID":78,"Name":"db1","Cascades":null}}},"Level":1,"Client":{"AppName":"$ kwbase sql","Address":"127.0.0.1:55564"},"Result":{"Status":"OK","ErrMsg":"","RowsAffected":0},"Command":{"Cmd":"CREATE DATABASE db1","Params":"{}"},"Reporter":{"ClusterID":"ae93118d-28bc-492f-bd4f-852cafab0ad9","NodeID":1,"HostIP":"localhost","HostPort":"26257","HostMac":"","LastUp":0}}

如需关闭审计日志,可通过以下 SQL 语句将 audit.log.enabled 设为 false。

set cluster setting audit.log.enabled=false;

以上就是 KWDB 数据库安全与审计的上半章,我们将在下期为大家介绍 KWDB 的权限管理。欢迎关注我们的项目,参与共建!

标签: 数据库 开源 sql

本文转载自: https://blog.csdn.net/KWDB_/article/details/143945319
版权归原作者 KWDB 数据库 所有, 如有侵权,请联系我们删除。

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

还没有评论