数据安全之路:Databend 用户策略指南
在 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 提供了强大的数据安全保护机制,确保用户的数据得到妥善保护,并提高了系统的安全性和可靠性。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
腾讯游戏基于 DeepFlow 的零侵扰可观测性进阶实战
作者:封亚飞/SRE工程师,来自腾讯游戏发行线技术运营团队,陈自欣/蓝鲸监控产品运营 腾讯不仅致力于开发广受欢迎的自研游戏,还与世界各地的知名游戏开发商合作,负责将这些游戏推向市场,让更多玩家享受游戏的乐趣。这些合作伙伴来自全球各地,使用多种多样的技术栈,这为游戏的稳定性维护提出了复杂的挑战。本文旨在探讨腾讯互娱如何利用 DeepFlow 的 eBPF 技术实现无侵入式的可观测性,这一策略不仅确保了游戏渐进式发布过程中的流畅用户体验,还加快了问题的诊断与解决,有效预防了潜在的性能问题。 01 游戏背景介绍 《某游戏》是一款由海外开发商开发、腾讯公司负责发行的游戏。该游戏采用了 Scala、Zio、Istio、CockroachDB 等技术栈,这些技术栈为游戏的上线和运维带来了额外的复杂性和挑战。而且随着项目上线日期的临近,调整代码以增强应用的可观测性变得不切实际,因此开发团队迫切需要一种无需修改游戏业务代码的可观测性解决方案。 在此背景下,团队发现 eBPF 技术能够提供所需的非侵入式解决方案。eBPF 不依赖于特定的技术栈,能够自动生成服务调用图,计算请求、错误、延迟(RED)指标,...
- 下一篇
从编译器、游戏引擎到游戏掌机——我是这样做独立游戏的
引言 自己开发制作游戏是一个儿时起就有的梦,特别是长时间接触魔兽争霸3世界编辑器后,我对游戏引擎和开发工具也有着特别的兴趣。学生时代接触编程以后,梦的外延开始扩散,不满足于使用各式编程语言做开发,开始维护一门自己喜欢的写游戏业务逻辑的编程语言项目 Yuescript,因为学习图形学和作为练手项目重写 Cocos2d-x 有了 Dora SSR 游戏引擎。工作后因为对游戏掌机的喜爱,开始与伙伴合作研发自由开放的可编程游戏掌机设备——吉祥机,实现自己游戏梦终极的 Digital Freedom。 游戏脚本语言的乐趣与挑战 各式新的编程语言的学习过程是充满乐趣的,对不同语言工具的接触也会感受到不同的编程理念和程序设计思想。为了学习制作游戏,对于复杂多变游戏玩法的脚本编程(Scripting),我也形成了自己编程偏好,即使用一门尽可能简洁和表达力强的编程语言来编写容易变化的业务逻辑。可以转译为 Lua 语言执行的 Yuescript 语言开源项目就是我为了满足这个需求的产物。后来随着使用自己的 Dora SSR 游戏引擎遇到更多的游戏开发场景,我又为 Dora SSR 开源游戏引擎引入...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Hadoop3单机部署,实现最简伪集群
- CentOS7安装Docker,走上虚拟化容器引擎之路
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作