数据安全之路:Databend 用户与角色管理应用

Databend 目前支持基于角色的访问控制 (RBAC) 和 自主访问控制 (DAC) 模型,用于访问控制功能。

通过本指南,我们会了解权限和角色在 Databend 中的基本概念,以及如何管理角色、继承角色与建立层级、设置默认角色以及所有权的重要性。这些功能使得用户能够根据实际需求,灵活地配置和管理数据访问权限,简化了权限管理的复杂性,提高了数据安全管控的效率。

基本概念

当用户访问 Databend 中的数据对象(Data Object)时,该用户必须被授予适当的权限或角色,或者他们需要拥有数据对象的所有权。数据对象可以指各种元素,如数据库、表、视图、 Stage 或 UDF。

  • 权限(Privilege) 在与 Databend 中的数据对象交互时扮演着至关重要的角色。这些权限,如读、写和执行,提供了对用户行为的精确控制,确保与用户需求保持一致并维护数据安全。
  • 角色(Role) 简化了访问控制。角色是预定义的权限集,分配给用户,简化了权限管理。管理员可以根据职责对用户进行分类,高效地授予权限,无需单独配置。
  • 所有权(Ownership) 在 Databend 中是独立的权限,用于控制数据访问。当用户拥有某个数据对象的所有权时,该用户拥有此数据对象的最高控制级别。这种直接的所有权模型使用户能够更直接的管理属于自己的数据。

权限类型

用户需要特定的权限才能在 Databend 中执行特定操作。例如,要查询表,用户至少需要具有对该表的 SELECT 权限,要读取 Stage 中的数据集,则最少需要对该 stage 的 READ 权限。

目前已经由权限类型接管的对象有 DB, Table, UDF, STAGE

权限对象类型描述
ALL全局(global)授予指定对象类型的所有权限。
ALTER全局, 数据库, 表, 视图修改数据库、表、用户或 UDF。
CREATE全局, 数据库, 表创建数据库、表或 UDF。
DELETE删除或截断表中的行。
DROP全局, 数据库, 表, 视图删除数据库、表、视图或 UDF。恢复已删除的表。
INSERT向表中插入行。
SELECT数据库, 表从表中选择行。显示或使用数据库。
UPDATE更新表中的行。
GRANT全局授予/撤销用户或角色的权限。
SUPER全局, 表终止查询。设置全局配置。优化表。分析表。操作 Stage(列出 Stage。创建、删除 Stage)、目录或共享。
USAGE全局“无权限”的同义词。
CREATE ROLE全局创建角色。
DROP ROLE全局删除角色。
CREATE USER全局创建 SQL 用户。
DROP USER全局删除 SQL 用户。
WRITEStage写入 Stage。
READStage读取 Stage。
USAGEUDF使用 UDF。

给某个 user/role 授予某个表的 ALL 权限操作如下:

grant all on db_name.table_name to role <role_name>;
grant all on db_name.table_name to <user_name>;

管理角色

角色在 Databend 中发挥着至关重要的作用,简化了权限管理。当多个用户需要相同的一组权限时,单独授予权限可能会很麻烦。角色通过允许将一组权限分配给角色,然后可以轻松地分配给多个用户,提供了一个解决方案。

比如,最开始,使用者希望用户 u1 可以读取表 db.t 和 db.t2 的数据就需要执行下面的 SQL:

grant select on db.t to u1;
grant select on db.t2 to u1;

此时新的用户 u2 也需要读取 db.t 和 db.t2 的数据,则需要管理员继续执行如下 SQL:

grant select on db.t to u2;
grant select on db.t2 to u2;

如果有源源不断的新用户需要读取同样的对象,就会使得管理员沉浸在这些繁琐的用户权限管理中,而且很可能误操作导致访问一场。这些繁琐的操作可以被角色优化:

-- 将 db.t 和 db.t2 的读取权限授权给角色 role1
grant select on db.t to role role1;
grant select on db.t2 to role role1;
-- 将 role1 的权限授予 u1
grant role role1 to u1;
-- 将 role1 的权限授予 u2
grant role role1 to u2;

如果想要查询更多的表如 t3,只需要对 role1 做一次授权,所有的被授予角色 role1 的用户即可读取表 t3。

-- 执行此 grant 后,u1 和 u2 可以读取 t3 的数据
grant select on db.t3 to role role1;

Databend 支持查询用户和角色的信息,参见用户与角色。

内置角色

Databend 引入了两个内置角色:

  • account-admin:拥有所有权限,作为所有其他角色的父角色,并允许在租户内无缝切换到任何角色。
  • public:不继承任何权限,将所有角色视为其父角色,并允许任何角色切换到 public 角色。

要在 Databend Cloud 中将 account-admin 角色分配给用户,请在邀请用户时选择该角色。您也可以在用户加入后分配角色。如果您使用的是 Databend 社区版或企业版,在部署期间首先配置一个 account-admin 用户,然后根据需要将角色分配给其他用户。有关配置管理员用户的更多信息,请参见配置管理员用户。

继承角色 & 建立层级

Databend 角色通过角色授权引入了一种强大的机制,使一个角色能够继承另一个角色的权限和责任。这有助于创建一个灵活的层级结构,类似于组织结构,其中存在两个内置角色:最高级别的角色是 account-admin,最低级别的角色是 public

考虑一个场景,创建了三个角色:manager*、*engineer 和 intern*。在这个例子中,*intern 角色被授予给 engineer 角色。因此,engineer 不仅拥有他们自己的一套权限,还继承了与 intern 角色相关的权限。进一步扩展这个层级,如果 engineer 角色被授予给 manager*,那么 *manager 现在获得了 engineer 和 intern 角色的固有权限。

设置默认角色

当用户被授予多个角色时,您可以使用 CREATE USER 或 ALTER USER 命令为该用户设置默认角色。默认角色决定了用户在会话开始时自动被分配的角色:

  • 用户可以在会话中使用 SET ROLE 命令切换到其他角色。
  • 用户可以使用 SHOW ROLES 命令检查他们当前的角色并查看授予他们的所有角色。
  • 如果您没有为用户明确设置默认角色,Databend 将默认使用内置角色 public 作为默认角色。

比如对于用户 xiaoming 授予角色 dba, 并且将角色 dba 设置为 xiaoming 的默认角色

grant role dba to user xiaoming;
alter user xiaoming with DEFAULT_ROLE = dba;

所有权

简单来说,所有权表示是某个角色完全拥有某个数据对象 。拥有了所有权意味着该角色可以对这个数据对象进行任意的访问操作(包括对该数据对象进行删除)。

Ownership 只会作用在 role 上,且具有唯一性。所以,对用户 grant 某个数据对象的 ownership 或者 revoke ownership 都是不支持的操作。

-- 在 Databend 中为非法操作
grant ownership on db.t to user u1;
revoke ownership on db.t from user u1;

Ownership 使得授权更加简单。只要是当前用户创建的数据对象,就可以直接进行访问,不需要再反复的对同一个数据对象做授权操作:

-- 由管理员进行用户和角色的创建,并且将角色授予对应的用户
create role role1;
create user u1 identified by '123' with DEFAULT ROLE 'role1';
grant create on db.* to role role1;
grant role role1 to u1;

-- u1 登陆数据库后,此时 role1 已经被授予了 u1 ,所以u1 可以访问自己在 db 下创建的表:
u1> create table db.t(id int);
u1> insert into db.t values(1);
u1> select * from db.t;
u1> select * from db.t_old_exists -- 失败,因为该表的 owner 并不是角色 role1

此时,如果 u2 也希望访问 u1 创建的资源,管理员只需要执行一条 SQL :

-- 管理员将角色 role1 授予用户 u2
grant role role1 to u2;

当我们不再希望 u1 可以访问这些对象时,管理员同样只需要执行一条 SQL:

-- 管理员撤销用户 u1 的角色 role1
revoke role role1 from u1;

可以使用 SHOW GRANTS 查看用户与角色的详细信息。

注意:所有权是一种专门的权限,表示角色完全拥有 Databend 内的特定数据对象(当前包括数据库、表、UDF 和 Stage)。数据对象的所有权将自动授予创建它的用户的当前角色。共享相同角色的用户也拥有对象的所有权,后续可以通过管理员将该数据对象的所有权授予其他角色( 参考 GRANT命令)。

  • 所有权只能授予角色;不允许将所有权授予用户。一旦从一个角色转移给另一个角色,所有权就转移到新角色。
  • 如果拥有对象所有权的角色被删除,account_admin 可以将对象的所有权授予另一个角色。
  • 不能为 default 数据库中的表授予所有权,因为它由内置角色 account_admin 拥有。

出于安全考虑,不建议将所有权授予内置角色 public。如果用户在创建对象时处于 public 角色,则所有用户都将拥有该对象的所有权,因为每个 Databend 用户默认都有 public 角色。Databend 建议创建并分配自定义角色给用户,而不是使用 public 角色,以明确管理所有权。以下示例将 account-admin 角色分配给新用户和现有用户:

-- 将默认角色 account_admin 授予现有用户作为 root
root ALTER USER u1 WITH DEFAULT_ROLE = 'account_admin';
root grant role u1 to writer;

-- 作为 root 创建一个默认角色为 account_admin 的新用户
root create user u2 identified by '123' with DEFAULT_ROLE='account_admin';
root grant role account_admin to u2;

删除数据对象将从所有者角色中撤销对该数据对象的所有权。恢复(如果可用的话,UNDROP)被删除的数据对象将不会恢复所有权。在这种情况下,您将需要一个 account_admin 再次将所有权授予角色。

结语

通过权限和角色管理,Databend 提供了一个灵活数据安全管控框架。使得用户按照自己的需要高效地管理数据访问和操作权限。确保数据的安全性和完整性。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/536160.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

活动预告|NineData 创始人CEO叶正盛将参加QCon全球软件开发大会,共话AI大模型技术在数据库DevOps的实践

4月13日下午&#xff0c;NineData创始人&CEO叶正盛即将参加InfoQ中国主办的『QCon全球软件开发大会北京站』的技术大会。在本次技术峰会上&#xff0c;叶正盛将以《AI大模型技术在数据库DevOps的实践》为主题&#xff0c;深入剖析AI大模型技术在数据库DevOps领域的最新进展…

逆向案例二十一——遇到混淆怎么办

开始新的板块尝试&#xff0c;混淆了怎么办 网址&#xff1a;极简壁纸_海量电脑桌面壁纸美图_4K超高清_最潮壁纸网站 抓包抓到&#xff0c;好久没做解密了&#xff0c;奥里给干他&#xff01;&#xff1a; 搜索关键字&#xff0c;打上断点&#xff0c;点击第二页。 _0x10a345…

SOLIDOWRKS怎么将中间格式的模具装配体转化为装配体格式

模具是工业生产中用于制作成型物品的工具&#xff0c;它由各种零件构成&#xff0c;可以通过改变所成型材料的物理状态来实现物品外形的加工。如果工程师已经有其他格式的模具装配体&#xff0c;但是又想将其他格式的模具装配体导入solidworks里面&#xff0c;并且将一个个实体…

rust wasm入门

&#x1f4d5;作者简介&#xff1a; 过去日记&#xff0c;致力于Java、GoLang,Rust等多种编程语言&#xff0c;热爱技术&#xff0c;喜欢游戏的博主。 &#x1f4d8;相关专栏Rust初阶教程、go语言基础系列、spring教程等&#xff0c;大家有兴趣的可以看一看 &#x1f4d9;Jav…

SpringBoot修改菜品模块开发

需求分析与设计 一&#xff1a;产品原型 在菜品管理列表页面点击修改按钮&#xff0c;跳转到修改菜品页面&#xff0c;在修改页面回显菜品相关信息并进行修改&#xff0c;最后点击保存按钮完成修改操作。 修改菜品原型&#xff1a; 二&#xff1a;接口设计 通过对上述原型图…

图像处理与视觉感知---期末复习重点(7)

文章目录 一、图像压缩1.1 三种冗余1.2 模型1.3 信息测量 二、无误差压缩2.1 哈夫曼编码2.1.1 步骤2.1.2 例题 2.2 算术编码 三、变换编码 一、图像压缩 1.1 三种冗余 1. 三种基本的是数据冗余为&#xff1a;编码冗余、像素间冗余、心理视觉冗余。 2. 编码冗余&#xff1a;如果…

在线拍卖系统|基于Springboot的在线拍卖系统设计与实现(源码+数据库+文档)

在线拍卖系统目录 基于Springboot的在线拍卖系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 2、后台 用户功能模块 5.2用户功能模块 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a…

个人博客系统项目(SpringBoot+Linux部署上线)

在学完SpringBoot框架、MyBatis后&#xff0c;直接开始做第一个项目&#xff1a;博客系统 首先&#xff0c;该博客系统包含核心功能有&#xff1a; 一、登录、注册、退出登录功能。 二、没有登陆前可以查看博客首页以及博客展示的分页处理&#xff0c;以及点击查看博客可以…

ELK-Kibana 部署

目录 一、在 node1 节点上操作 1.1.安装 Kibana 1.2.设置 Kibana 的主配置文件 1.3.启动 Kibana 服务 1.4.验证 Kibana 1.5.将 Apache 服务器的日志&#xff08;访问的、错误的&#xff09;添加到 ES 并通过 Kibana 显示 1.6. 浏览器访问 二、部署FilebeatELK&…

牛客NC413 两个升序数组的中位数【hard 数组,模拟 Java、Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/b3b59248e61f499482eaba636305474b 思路 直接模拟2个数组有顺序放到一个数组中help中如果help长度为奇数&#xff0c;返回中间的数如果help长度为偶数&#xff0c;返回中间2个数的和除以2参考答案java import j…

ES6 全详解 let 、 const 、解构赋值、剩余运算符、函数默认参数、扩展运算符、箭头函数、新增方法,promise、Set、class等等

目录 ES6概念ECMAScript6简介ECMAScript 和 JavaScript 的关系ES6 与 ECMAScript 2015 的关系 1、let 、 const 、var 区别2、变量解构赋值1、数组解构赋值2、对象解构赋值3、字符串的解构赋值 3、展开剩余运算符1、**展开运算符(...)**2、**剩余运算符(...)** 4、函数的拓展函…

JSONP是跨域资源共享的古老技术吗

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【MySQL】锁篇

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 本系列专栏 1. MySQ 中的锁 2. 表锁和行锁 表锁 行锁 3. InnoDB 存储引擎的三种行级锁 4. 悲观锁…

【腾讯云 TDSQL-C Serverless 产品体验】饮水机式使用云数据库

云计算的发展从IaaS&#xff0c;PaaS&#xff0c;SaaS&#xff0c;到最新的BaaS&#xff0c;FasS&#xff0c;在这个趋势中serverless(去服务器化&#xff09; 计算资源发展Physical -> Virtualisation -> Cloud Compute -> Container -> Serverless。 一、背景介绍…

21、矩阵-搜索二维矩阵

思路&#xff1a; 这道题很有意思 从左到有升序&#xff0c;从上到下升序&#xff0c;斜边从左上到右下也是升序&#xff0c;从右上到做下降序。 如果是从左往右依次遍历&#xff0c;就会面临一个问题向右还是向下&#xff0c;因为都是大于当前值&#xff0c;不好决断&#x…

结合fastapi-users与Langserve轻松实现大语言接口用户认证

在做大模型开发的过程中&#xff0c;相信很多小伙伴都是对大模型开发感兴趣&#xff0c;却对 fastapi 这个框架并不熟悉&#xff0c;但是&#xff0c;实际开发的项目确需要用户鉴权&#xff0c;这时候就会很头疼&#xff0c;查阅官方文档发现&#xff0c;官方虽然有例子&#x…

软考123-上午题-【软件工程】-系统设计

一、系统设计 1-1、概要设计 设计软件系统总结结构数据结构及数据库设计编写概要设计文档评审 1-1-1、设计软件系统总结结构 其基本任务是采用某种设计方法&#xff0c;将一个复杂的系统按功能划分成模块&#xff1b; 确定每个模块的功能&#xff1b;确定模块之间的调用关系…

Stable Diffusion之Ubuntu下部署

1、安装conda环境 conda create -n webui python3.10.6 2、激活环境 每次使用都要激活 conda activate webui 注意开始位置的变换 关闭环境 conda deactivate webui 3、离线下载SD 代码 https://github.com/AUTOMATIC1111/stable-diffusion-webui https://github.com/Stabilit…

ZISUOJ 高级语言程序设计实训-基础A

说明&#xff1a; 我这次代码以尽可能简洁的C代码形式给出。 题目列表&#xff1a; 问题 A: 比较大小 思路&#xff1a; 一道简单的if条件判断题。 参考题解&#xff1a; #include <bits/stdc.h> #define endl \n using namespace std; using ll long long; using …

数据治理项目——深铁集团数据治理规划

目录 一、前言 二、数据治理内容与主要措施 2.1 实施背景 2.2 主要举措 2.2.1 制定数据战略目标 2.2.2 绘制数据治理蓝图 2.2.3 绘制数据治理制度 2.2.4 梳理数据资产目录 三、 应用效果 3.1 数据资产可视化管理 3.2 数据标准治理 3.3 集团大数据平台优化建设 一、…