数据安全之路: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 提供了一个灵活数据安全管控框架。使得用户按照自己的需要高效地管理数据访问和操作权限。确保数据的安全性和完整性。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot-开源项目-追踪法-简单有效,从F12到SQL数据库表

使用的技术栈&#xff1a;springbootmybatis&#xff0c;edge浏览器 插件&#xff1a;MybatisX 第一步&#xff1a; 按F12,选择网络 第二步&#xff1a; 进入IDEA编辑器&#xff0c;键盘按两次shift键&#xff0c;点击第一个&#xff0c;快速定位到该操作 3&#xff1a; 我…

解码rmallox勒索病毒:深入了解与全面应对这一网络威胁

随着科技的不断发展&#xff0c;我们的生活已经与数字世界紧密相连。然而&#xff0c;这种紧密的联系也带来了新的安全隐患&#xff0c;其中勒索病毒就是近年来网络安全领域的一个突出问题。特别是rmallox勒索病毒&#xff0c;它以其独特的加密性和破坏性&#xff0c;给全球范围…

一起找bug之购物

如果不是购物车满了&#xff0c;大概都不会发现这个 bug 淘宝 APP 修复了购物车满的情况下&#xff0c;往里面添加新商品时&#xff0c;会把一个老商品移入收藏夹&#xff0c; 但是如果这个老商品是已失效状态&#xff0c;就无法自动移入收藏夹&#xff0c;而且会一直在购物车…

Qt之QSS样式表

QSS简介 QSS&#xff08;Qt Style Sheet&#xff09;样式表是一种用于描述图形用户界面&#xff08;GUI&#xff09;样式的语言。它允许开发者为应用程序的控件定义视觉外观&#xff0c;例如颜色、字体、尺寸和布局等。 QSS 样式表的主要目的是提供一种简洁而灵活的方式来美化…

Vue 读取后台二进制文件流转为图片显示

Vue 读取后台二进制文件流转为图片显示 后台返回格式 <img :src"payImg" id"image" style"width: 150px;height: 150px;" alt"">axios写法 重点 responseType: ‘blob’ &#xff0c; 使用的是res中的data blob this.$axios.…

Windows安装MySQL

文章目录 一、下载MySQL安装包1、选择版本以及Windows系统点击下载2、选择No thanks,just start my download.3、下载到指定目录解压即可 二、添加环境变量三、添加配置文件四、初始化MySQL数据库服务器五、安装启动服务六、修改连接登录密码七、停止MySQL服务 一、下载MySQL安…

Linux网络的封包和拆包

一般使用socket 到令牌环网然后向上逐渐拆包 MTU:最大的传输单元 以太网&#xff1a;1500 mss&#xff1a;网络类型&#xff0c;线路&#xff0c;以及特性相关

数据库知识点汇总(最全!,2024年最新大佬分享开发经验

十九、删除数据 DELETE 语句 使用 DELETE 语句从表中删除数据。 DELETE FROM table [WHERE condition]; 删除数据 使用 WHERE 子句删除指定的记录 DELETE FROM departments WHERE department_name ‘Finance’; 如果省略 WHERE 子句&#xff0c;则表中的全部数据将被删除 DELE…

[自研开源] MyData v0.8 数据集成案例分享

开源地址&#xff1a;gitee | github 详细介绍&#xff1a;MyData 基于 Web API 的数据集成平台 部署文档&#xff1a;用 Docker 部署 MyData 使用手册&#xff1a;MyData 使用手册 试用体验&#xff1a;https://demo.mydata.work 交流Q群&#xff1a;430089673 案例&#xff…

Oracle 11g完全卸载教程(Windows)

文章目录 一、停止Oracle服务二、卸载Oracle1、卸载Oracle产品2、删除注册表3、删除环境变量以及其余文件 一、停止Oracle服务 进入服务 找到服务中的Oracle服务并且停止 全部停止运行成功 二、卸载Oracle 1、卸载Oracle产品 点击开始菜单找到Oracle&#xff0c;然后点击…

实验模拟 搭建elk 日志分析系统

目录 一 实验环境 二 ELK Elasticsearch 集群部署&#xff08;在Node1、Node2节点上操作&#xff09; 1&#xff0c;环境准备 2, 部署 Elasticsearch 软件(node1 node2) 2.1安装es 2.2设置开机自启 2.3修改 elasticsearch主配置文件&#xff08;先备份&#xff09;…

【vue/uniapp】使用 smooth-signature 实现 h5 的横屏电子签名

通过github链接进行下载&#xff0c;然后代码参考如下&#xff0c;功能包含了清空、判断签名内容是否为空、生成png/jpg图片等。 签名效果&#xff1a; 预览效果&#xff1a; 下载 smooth-signature 链接&#xff1a;https://github.com/linjc/smooth-signature 代码参考&a…

极狐GitLab 如何在 helm 中恢复数据

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …

查杀linux挖矿病毒 kswapd0

中毒现象 高cpu占用&#xff0c;使用top命令查看cpu使用率长时间50%以上&#xff0c;cpu占用异常的进程八成就是挖矿病毒进程 此病毒隐藏了自己&#xff0c;top命令无法查看到挖矿病毒进程&#xff0c;可通过sysdig命令找到隐藏进程 安装sysdig curl -s https://s3.amazonaw…

[CSS]样式属性+元素设置

哎呀&#xff0c;好多东西&#xff0c;根本记不住&#xff0c;更多的还是边用边记吧&#xff0c;这里的代码就当使用范例&#xff0c;但其实如果可以让gpt应该会更好&#xff0c;哎学吧&#xff0c;反正记得住当然更好 文本 属性名描述word-break单词换行。取值如下&#xff1…

[自研开源] MyData数据融合平台 诚邀试用

MyData &#xff0c;一个旨在简化 Web 应用之间数据对接的工具&#xff0c;提高日常工作效率&#xff0c;如其名“我的数据” 旨在让用户更好的掌控和管理数据。 v1.0 的目标是&#xff1a;针对多应用之间数据集成的场景&#xff0c;为开发人员提供更安全、更方便的对接集成方…

Elasticsearch8.x 设置密码

文章目录 一、环境说明二、使用elasticsearch-reset-password工具修改1、elasticsearch-reset-password工具位置2、设置密码 一、环境说明 elasticsearch版本&#xff1a;8.13.0 系统版本&#xff1a;Ubuntu 18.04.6 二、使用elasticsearch-reset-password工具修改 1、elast…

【Java程序员面试专栏 综合面试指南】5年资深程序员面试指南

基础知识对于5年内工作经验的同学考察相对比较多。包括编程语言、计算机网络、操作系统、设计模式、分布式知识、MySQL、Redis这种。其中随着年限的增长,基础知识考察的会越来越少,例如操作系统基本上只在学生阶段考察,计算机网络对于5年经验来说也考察的相对较少。5年以上对…

优化策略:企业海量文件传输事件处理(上)

在当今快速发展的商业环境中&#xff0c;企业的数据量正以前所未有的速度增长。这种增长不仅带来了机遇&#xff0c;也带来了挑战&#xff0c;特别是在文件传输任务的管理上。文件传输是企业日常运营中不可或缺的一部分&#xff0c;它涉及到大量的数据流动和信息交换。因此&…

0 idea搭建springboot项目

1 2 3 4 5 配置文件 application.yaml server:servlet:context-path: /app #项目名controller //注入到spring容器 Controller public class HelloController {GetMapping("hello")ResponseBodypublic String hello(){return "Hello,SpringBoot";} }启…