在 Databend 中,咱们致力于维护用户的数据安全。除了身份认证之外,咱们还供给了多种拜访战略,包含网络战略(Network Policy)、暗码战略(Password Policy)和数据脱敏战略(Masking Policy)。让咱们来了解一下 Databend 中的用户类型以及这些安全战略的运用。
用户类型
Databend 中的用户首要分为两类:
-
装备用户(Configured User)
-
自建用户(Created User)
装备用户
装备用户是在 Databend 装备文件(databend-query.toml)中界说的用户,通常具有办理员权限。这类用户合适用作办理员账号。
[[query.users]]
name = "default"
auth_type = "no_password"
自建用户
Created User 是经过 SQL 的 CREATE USER 指令创立的用户,对数据库目标的拜访受到权限模型的束缚。
CREATE [OR REPLACE] USER [IF NOT EXISTS] '<username>' IDENTIFIED [WITH <auth_type>] [BY <password>] [WITH <user_option>, ...]
用户认证
在用户认证阶段,Databend 会依据用户名获取相应的用户信息。
对于装备用户,认证阶段会颁发其所有权限,并将默许人物设置为 account_admin。
对于自建用户,Databend 会从元数据中获取相应的用户信息。
Credential 分为两类:
JWT(JSON Web Token)
Password
Password Credential 支撑 Sha256 和 DoubleSha1 两种加密方法,默许运用 Sha256。
留意:在 JWT Credential 下,假如用户不存在,Databend 会主动创立该用户。
网络战略
网络战略是一种装备机制,用于操控用户在体系内的网络拜访。它答运用户界说一组规矩,以操控特定用户答应和阻挠的 IP 地址规模,从而有效地操控网络级别的拜访权限。
怎么运用网络战略
能够运用 ALTER USER 指令将网络战略与特定用户相关起来。一个网络战略能够与多个用户相关,只要它们符合相同的战略标准。有关在 Databend 中办理网络战略的介绍,请参阅网络战略文档。
以下示例展示了怎么创立一个网络战略,并将其与用户相关以操控网络拜访。
-- 创立网络战略
CREATE NETWORK POLICY sample_policy
ALLOWED_IP_LIST=('192.168.1.0/24')
BLOCKED_IP_LIST=('192.168.1.99')
COMMENT='Sample';
-- 将网络战略与用户相关
ALTER USER sample_user WITH SET NETWORK POLICY='sample_policy';
以下示例演示了创立一个指定答应和阻挠的IP地址的网络战略,并将此战略与用户相关起来以操控网络拜访。网络战略答应所有从192.168.1.0到192.168.1.255的IP地址,仅回绝 192.168.1.99。
-- Create a network policy
CREATE NETWORK POLICY sample_policy
ALLOWED_IP_LIST=('192.168.1.0/24')
BLOCKED_IP_LIST=('192.168.1.99')
COMMENT='Sample';
SHOW NETWORK POLICIES;
Name |Allowed Ip List |Blocked Ip List|Comment |
------------- ------------------------- --------------- -----------
sample_policy|192.168.1.0/24 |192.168.1.99 |Sample |
-- Create a user
CREATE USER sample_user IDENTIFIED BY 'databend';
-- Associate the network policy with the user
ALTER USER sample_user WITH SET NETWORK POLICY='sample_policy';
暗码战略
暗码战略能够增强体系安全性并使账户办理更加顺利。该战略界说了创立或更改暗码时的规矩,包含长度、字符类型、年龄束缚、重试束缚、确定时间和暗码前史等方面。有关在 Databend 中办理暗码战略的介绍,请参阅暗码战略文档。
此示例树立以下 Password Policy 并为运用到数据库用户中:
-
DBA: 用于办理员用户,严厉自界说每个 Password Policy 特点。
-
ReadOnlyUser: 用于普通用户,运用所有特点的默许值。
-- 运用自界说特点值创立 'DBA' Password Policy
CREATE PASSWORD POLICY DBA
PASSWORD_MIN_LENGTH = 12
PASSWORD_MAX_LENGTH = 18
PASSWORD_MIN_UPPER_CASE_CHARS = 2
PASSWORD_MIN_LOWER_CASE_CHARS = 2
PASSWORD_MIN_NUMERIC_CHARS = 2
PASSWORD_MIN_SPECIAL_CHARS = 1
PASSWORD_MIN_AGE_DAYS = 1
PASSWORD_MAX_AGE_DAYS = 30
PASSWORD_MAX_RETRIES = 3
PASSWORD_LOCKOUT_TIME_MINS = 30
PASSWORD_HISTORY = 5;
-- 运用所有特点的默许值创立 'ReadOnlyUser' Password Policy
CREATE PASSWORD POLICY ReadOnlyUser;
SHOW PASSWORD POLICIES;
┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ name │ comment │ options │
├──────────────┼─────────┼─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ DBA │ │ MIN_LENGTH=12, MAX_LENGTH=18, MIN_UPPER_CASE_CHARS=2, MIN_LOWER_CASE_CHARS=2, MIN_NUMERIC_CHARS=2, MIN_SPECIAL_CHARS=1, MIN_AGE_DAYS=1, MAX_AGE_DAYS=30, MAX_RETRIES=3, LOCKOUT_TIME_MINS=30, HISTORY=5 │
│ ReadOnlyUser │ │ MIN_LENGTH=8, MAX_LENGTH=256, MIN_UPPER_CASE_CHARS=1, MIN_LOWER_CASE_CHARS=1, MIN_NUMERIC_CHARS=1, MIN_SPECIAL_CHARS=0, MIN_AGE_DAYS=0, MAX_AGE_DAYS=90, MAX_RETRIES=5, LOCKOUT_TIME_MINS=15, HISTORY=0 │
└──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
假定已经有一个名为 ‘eric’ 的 DBA 用户,运用 ALTER USER 指令将 DBA Password Policy 运用于该用户:
-- 将 'DBA' Password Policy 运用于用户 'eric'
ALTER USER eric WITH SET PASSWORD POLICY = 'DBA';
创立一个名为 ‘frank’ 的新用户,并运用 CREATE USER 指令运用 ‘ReadOnlyUser’ Password Policy :
-- 留意:为用户 'frank' 设置的暗码必须恪守相关的 'ReadOnlyUser' Password Policy 界说的束缚。
CREATE USER frank IDENTIFIED BY 'Abc12345'
WITH SET PASSWORD POLICY = 'ReadOnlyUser';
数据脱敏战略
数据脱敏战略用于操控对敏感数据的显示或拜访规矩和设置,从而维护数据的机密性。经过界说数据脱敏战略,用户能够在维护敏感数据的同时答应授权用户与数据进行交互。
考虑以下场景,咱们期望只向司理展示表中的电子邮件地址:
id | |
---|---|
2 | eric@example.com |
1 | sue@example.com |
对于非司理用户,电子邮件地址将被数据脱敏显示:
|id|email |
|-- ---------
| 2|*********|
| 1|*********|
怎么运用数据脱敏战略
在创立数据脱敏战略之前,请保证已正确界说或规划了人物及其相应的拜访权限,由于战略的实施依赖于这些人物以保证数据数据脱敏的安全有效性。要办理 Databend 的用户和人物,请参阅用户与人物文档。
数据脱敏战略运用于列。因而,要为特定列运用数据脱敏,用户必须首先创立一个数据脱敏战略,然后运用 ALTER TABLE COLUMN 将该战略与预期列相关起来。树立相关后,数据脱敏战略将更贴合重要的数据隐私环境。
以下示例演示了怎么经过人物选择性地显示或数据脱敏敏感数据的数据脱敏战略设置过程:
留意:数据脱敏战略是企业版功用。 假如期望体验该功用,需要获取许可证,请联络 Databend 支撑团队。
-- 创立一个表并插入示例数据
CREATE TABLE user_info (
id INT,
email STRING
);
INSERT INTO user_info (id, email) VALUES (1, 'sue@example.com');
INSERT INTO user_info (id, email) VALUES (2, 'eric@example.com');
-- 创立一个人物
CREATE ROLE 'MANAGERS';
GRANT ALL ON *.* TO ROLE 'MANAGERS';
-- 创立一个用户并将人物颁发该用户
CREATE USER manager_user IDENTIFIED BY 'databend';
GRANT ROLE 'MANAGERS' TO 'manager_user';
-- 创立一个数据脱敏战略
CREATE MASKING POLICY email_mask
AS
(val string)
RETURNS string ->
CASE
WHEN current_role() IN ('MANAGERS') THEN
val
ELSE
'*********'
END
COMMENT = 'hide_email';
-- 将数据脱敏战略与'email'列相关
ALTER TABLE user_info MODIFY COLUMN email SET MASKING POLICY email_mask;
-- 以Root用户查询
SELECT * FROM user_info;
id|email |
-- ---------
2|*********|
1|*********|
结语
经过合理装备网络战略、暗码战略和数据脱敏战略,Databend 供给了强壮的数据安全维护机制,保证用户的数据得到妥善维护,并提高了体系的安全性和可靠性。