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

news2024/12/23 4:15:42

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.coloradmin.cn/o/1597913.html

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

相关文章

病毒繁殖-第12届蓝桥杯选拔赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第52讲。 病毒繁殖&#xf…

气象观测站点数据下载与处理

一、下载途径 全国400多个气象站气候数据&#xff08;1942-2022&#xff09; 王晓磊&#xff1a;中国空气质量/气象历史数据 | 北京市空气质量历史数据 气象数据免费下载网站整理 中国气象站观测的气象数据怎么下载 二、R语言处理 2.1 提取站点文件 library(dplyr) library(…

4、XTuner 微调个人小助手(笔记)

视频地址&#xff1a; https://b23.tv/QUhT6ni 课程文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/readme.md 作业文档&#xff1a;https://github.com/InternLM/Tutorial/blob/camp2/xtuner/homework.md 1、Finetune 简介 两种Finetune范式 …

LeetCode_丑数

题目&#xff1a; 题解&#xff1a; 由题&#xff0c;我们知道丑数大于0&#xff0c;丑数都可以写成2*2*...*2*3*3...*3*5*5...*5&#xff0c;有了这个基础就很好写代码了。 用三个while循环将前面的2 3 5全部除掉如果这个数是丑数&#xff0c;最后n是等于1的&#xff0c;反之…

Leetcode-48-旋转图像

题目说明 给定一个 n n 的二维矩阵表示一个图像。 将图像顺时针旋转 90 度。 说明&#xff1a;你必须在原地旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要使用另一个矩阵来旋转图像。 示例 1: 给定 matrix [ [1,2,3], [4,5,6], [7,8,9] ], 原地旋转输入…

代码随想录阅读笔记-回溯【全排列】

题目 给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。 示例 输入: [1,2,3]输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 思路 以[1,2,3]为例&#xff0c;抽象成树形结构如下&#xff1a; 回溯三部曲 1、递归函数参数 首先排列是有…

机器学习和深度学习-- 李宏毅(笔记与个人理解)Day 14

Day 14 Classfication (short version) 二分类的时候 用sigmoid 那不就是 logistic 回归嘛&#xff08;softmax 的二分类等价&#xff09; Loss 哦 今天刚学的 &#xff0c;KL散度 &#xff0c;看来cross-entropy 和KL散度是等价的咯~ 我感觉我的直觉没错 这里MSE离得很远的时候…

五、书架开发--5.书架分组功能开发

Dialog和ShelfGroupDialog的基本实现思路&#xff1a; 加入两个组件&#xff0c;一个是Dialog移出分组的弹窗&#xff0c;一个是ShelfGroupDialog&#xff0c;一个是create-api中加入这个ShelfGroupDialog 接下来我们看看这个移动书籍这个对话框的实现原理 如下&#xff0c;用…

Python 标准库functools高阶函数用法

目录 1. partial 用法示例 2. reduce 用法示例 3. total_ordering 用法示例 4. cmp_to_key 用法示例 5. lru_cache 用法示例 6. singledispatch 用法示例 7. update_wrapper 用法示例 8. partialmethod 用法示例 9. singledispatchmethod 用法示例 10. cache 用法示例…

HoloLens2开发时,VS2022的组件和模块配置

HoloLens2开发的时候&#xff0c;VS2022的安装和配置清单&#xff08;有的模块可能不是必须的模块&#xff09; 一、大的模块配置 二、各模块组件的配置

详解运算符重载——探索运算符重载的应用

前言:运算符重载是面向对象的一个重要的知识点。我们都知道内置类型可以进行一般的运算符的运算。但是如果是一个自定义类型&#xff0c; 这些运算符就无法使用了。那么为了解决这个问题&#xff0c; 我们的祖师爷就在c中添加了运算符重载的概念。 本篇主要通过实例——日期类的…

Emacs之增加/取消输入括号自动匹配(一百三十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

安卓apk文件签名

一、环境准备 链接: https://pan.baidu.com/s/1D3WxIL5M5ewyFNTqJzARPw 提取码: pd6w 上篇博文编译的apk文件 1、docker build -t android-build:v1.0.1 . 直接制作镜像 2、docker run -it android-build:v1.0.1 /bin/bash 运行进入容器 指定sdk的路径&#xff0c;然后直接…

AI - 提示词意外收获 (5)

提示词&#xff1a; A soft pink rose with opalescent leaves, located in a surreal desert under the light of a binary star system, The dual shadows and contrasting lights create a dreamlike quality, emphasizing the roses unique beauty,翻译: 一种柔软的粉红…

RESA 车道线检测模型-debug分析

车道线检测模型 RESA 该模型只有一个关键点就是resa模块&#xff0c;把这个想清楚就没什么了&#xff0c;下面看代码 class RESA(nn.Module):def __init__(self, cfg):super(RESA, self).__init__()# self.iter cfg.resa.iter# chan cfg.resa.input_channel# fea_stride c…

绝地求生:PUBG七周年:杜卡迪联动即将到来!

4.13号PUBG官博放出来一个图片让大家猜测是什么东西。 结合之前绝地求生的官方的公告&#xff0c;该载具皮肤毫无疑问就是著名摩托车品牌&#xff1a;杜卡迪。 这篇文章就来简单分析一下本次即将到来的摩托车联动的具体细节。 品牌介绍 杜卡迪&#xff08;Ducati Motor &…

【测试开发学习历程】python常用的模块(中)

目录 5 time模块 5.1、Python中的四种格式的时间&#xff1a; 5.2、time模块中的常用函数 6 I/O流操作 6.1 创建文件 6.2 读取一个文件存入到另外一个文件 6.3 with open as 结构 6.4 open和with open as的区别 7 Excel的操作模块-openpyxl 7.1、新建Excel文件进行读…

PTA 编程题(C语言)-- 判断素数

题目标题&#xff1a; 判断素数 题目作者 陈越 浙江大学 本题的目标很简单&#xff0c;就是判断一个给定的正整数是否素数。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;≤ 10&#xff09;&#xff0c;随后N行&#xff0c;每行给出一个小于…

渗透测试实战——第一站

仅供交流学习使用&#xff0c;请勿用于非法用途 前言&#xff1a;刚学了sql注入&#xff0c;只听理论总感觉没啥用&#xff0c;今天花了一半个多小时&#xff0c;去尝试寻找有漏洞的网站&#xff0c;最终找到了一个&#xff1b;实践是检验真理的唯一标准。 我是通过黑客常用语法…

网络基础先导

前言&#xff1a;最好在牢固前面几大件&#xff08;编程语言、数据结构、操作系统&#xff09;&#xff0c;并且您有一个服务器的基础上&#xff08;我使用的是腾讯云中配置最低的服务器&#xff09;再来学习本系列的网络知识。 1.网络发展简要 下面就是简单提及一些概念而已&…