现如今,我们称虚拟世界里的海盗们为“黑客”,他们所追寻的战利品就是在你数据库某处的数据。
 
而我们能够保证你的数据安全的工具之一,就是“Cassandra基于角色的访问控制(Cassandra Role-Based Access Control, aka, RBAC)”这一功能。

 
“入侵者要当心
摧毁死亡与悲伤
浸润在盗贼的
鲜血之中”
 
这是美国冒险喜剧电影《七宝奇谋》(The Goonies)中,宝藏所在地的寻宝地图上对海盗的警语。
 
我们肯定写不出一篇像是海盗寻宝一样有意思的关于数据库访问控制的文章,但我们未尝不能借用一些跟海盗寻宝有关的想象来渲染一下气氛。
 
现如今,我们称虚拟世界里的海盗们为“黑客”,他们所追寻的战利品就是在你数据库某处的数据。
 
而我们能够保证你的数据安全的工具之一,就是“Cassandra基于角色的访问控制(Cassandra Role-Based Access Control, aka, RBAC)”这一功能。通过实施一些相当简单的策略,我们可以遵循一些Cassandra RBAC的基本步骤来让我们的数据变得更为安全。
 
注意,此处我们讲的是严格意义上的“授权(authorization)”过程,而不是“身份验证(authentication)”过程。这两者纵然相关,但其实是两个不同的话题。相比之下,前者比后者稍微简单直白、易于理解一些。
 
毕竟,你应该已经知道不能在没有身份验证功能的加持下就把数据库暴露在互联网上,对吧?(链接里的录像由本文作者配音)
 
就以下建议而言,我们的前提假设是用户都是Cassandra管理的内部用户,而不是来自像是LDAP(轻型目录访问协议)这样的外部访问源。不过,其实这两种情况的安全管理原则大致相同。

 
Cassandra的模式容易让人产生疑惑:它将所有的角色(role)视为角色(role),同时也将所有的用户(user)视为角色(role)。注意不要混淆。
 
相比将用户和角色视为两种不同的数据库对象,Cassandra用“角色(role)”对象来指代那些作为权限的集合的角色,也用这个词来指代那些使用这些权限登录的实体。这种情况引起的,至少是人们的困惑。
 
就长期的内部管理而言,用两个不同的类别(bucket)来管理这两者可能会是更好的方案——你的用户(user)们包括了自然人以及需要登录数据库的应用程序软件;而你的角色(role)们则包括了多个有特定适用范围的数据库权限集合,这些权限集合在之后会被分配给用户(user)。
 
除非你有非常特定的原因,否则尽量避免直接将数据库权限赋予一个用户。为了更清晰地展示这点,下方是一个例子:
 
CREATE ROLE alicethehuman with LOGIN=true;

CREATE ROLE READONLY;

GRANT SELECT, DESCRIBE ON mykeyspace.mytable TO READONLY;

GRANT SELECT, DESCRIBE on mykeyspace.myothertable TO READONLY;

GRANT ROLE READONLY TO alicethehuman;
在上方的例子中,请注意,我们的自然人用户是通过“被赋予了LOGIN=true”这个特点来和作为权限集合的角色进行区分的。
 
之后,我们又创建了一个被清晰标识的作为权限集合的角色,并且将特定的许可条件指定给了它。最后,我们将这个角色赋给了alicethehuman这个自然人用户。
 
我们需要避免的是像下面的这种语句:
 
GRANT SELECT ON mykeyspace.mytable TO alicethehuman; #Don't do this
组成企业的员工们总是来来往往,也会变换工作职责。只要遵循此常规模式,你的数据库权限就会更加易于维护。

 
为一些像是“只读”一类的非常常见的权限创建基础的角色,并对其进行标准化管理。
 
这是一个相对简单直白的建议,不过它真的有助于使你的验证设置更加清晰明确。
 
根据公司的角色和职责的不同,我们可以举出不同的例子,不过通常来说会有这些例子:READONLY(只读)、READWRITE(可读可写)以及CREATOR(创建者)。
 
在常用的角色指代名称中添加前缀或后缀可能也会有所帮助。
 
比如如果一个角色是特属于某一个键空间(keyspace)的,可以在这个角色名的前面加一个该键空间的名字缩写。类似的,如果一个角色是特属于某个数据库表的,可以在这个角色名的后面加一个表名的缩写。
 
以上这些只是一些帮助你理解和入门建议而已,你可以发挥自己的创造力来创建规则。记得要将这些规则记录在案,并在你的数据库团队中标准化地使用它们。

 
别嵌套得太深!
 
最后一条建议,别把你的RBAC体系(scheme)嵌套得太深。我的意思是,别给角色们赋予太多层级的角色。过多的层级或嵌套会让人难以明确这样的设置的最终效果会是哪些特定的权限。所以,就让事情简单一些吧。
 
大多数情况下,角色应该只由能够赋予其特定对象权限的GRANTS组成,而用户被赋予的角色应该只有一个或者是非常少的数量。
 
请避免将“角色的角色”赋给用户,而且即使系统并没有禁止这种行为——拜托一定不要用GRANT将一个用户赋给另一个用户(记住,它们其实是角色中的一种特殊的类型)。
 
过于复杂的角色结构很容易变成一团乱麻缠绕不清。请别让这种情况发生,让事情简单一些吧。
 
如果你想要更深入探索以上这些想法,但是你还没有已配置权限设置的Cassandra集群,不妨注册Astra并用免费套餐来进行一番试验吧。
 
想要了解更多有关Astra架构和安全性的信息?点击这里获取我们的白皮书。
 

技术基础 | Cassandra RBAC助你打击“虚拟海盗”,让他们对数据“战利品”望而不得的更多相关文章

  1. 技术基础 | 在Apache Cassandra中改变VNodes数量的影响

    Apache Cassandra中num_tokens的默认值在4.0版本中将会有变化!这看起来好像只是在CHANGES.txt文件中做了个小小的改动,但实际上这个改动将会对集群的日常运维有着深远的影 ...

  2. 现代前端技术解析:Web前端技术基础

    ​ 最近几年,越来越多的人投入到前端大军中:时至至今,前端工程师的数量仍然不能满足企业的发展需求:与此同时,互联网应用场景的复杂化提高了对前端工程师能力的要求,一部分初期前端工程师并不能胜任企业的工作 ...

  3. docker容器技术基础入门

    目录 docker容器技术基础入门 容器(Container) 传统虚拟化与容器的区别 Linux容器技术 Linux Namespaces CGroups LXC docker基本概念 docker ...

  4. JNI技术基础(2)——从零开始编写JNI代码

    书接上文: <JNI技术基础(1)——从零开始编写JNI代码> 2.编译源程序HelloWorld.java并生成HelloWorld.class 3.生成头文件HelloWorld.h ...

  5. AOP技术基础

    1.引言 2.AOP技术基础 3.Java平台AOP技术研究 4..Net平台AOP技术研究 2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto ...

  6. 《C#语言和数据库技术基础》单词必备

    <C#语言和数据库技术基础> 第一章1..NET Framework   框架2.sharp            尖锐,强烈的3.application      应用程序4.devel ...

  7. JavaWeb开发技术基础概念回顾篇

    JavaWeb开发技术基础概念回顾篇 第一章 动态网页开发技术概述 1.JSP技术:JSP是Java Server Page的缩写,指的是基于Java服务器端动态网页. 2.JSP的运行原理:当用户第 ...

  8. ajax技术基础详解

    一.概述 1.什么是ajax 可以与服务器进行[异步]交互的技术,浏览器无需刷新 2.什么时候出现ajax? -- XMLHttp 微软 1999年微软公司发布IE5版本,内嵌了ajax技术 什么时候 ...

  9. AOP技术基础(转)

    1.引言 2.AOP技术基础 3.Java平台AOP技术研究 4..Net平台AOP技术研究 2.1 AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto ...

随机推荐

  1. jmeter__编写脚本学习笔记、备忘

    web持续添加 前言: 1. token就是令牌,比如你授权(登录)一个程序时,他就是个依据,判断你是否已经授权该软件:也叫关联 2. cookie就是写在客户端的一个txt文件,里面包括你登录信息之 ...

  2. Linux系列之makefile的简单入门

    什么是makefile呢? 一个工程中的源文件不计其数,其按类型.功能.模块分别放在若干个目录中,makefile定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译, ...

  3. 【剑指offer】04 重建二叉树

    题目地址:重建二叉树 题目描述                                    输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不 ...

  4. Python 写了一个批量生成文件夹和批量重命名的工具

    Python 写了一个批量生成文件夹和批量重命名的工具 目录 Python 写了一个批量生成文件夹和批量重命名的工具 演示 功能 1. 可以读取excel内容,使用excel单元格内容进行新建文件夹, ...

  5. GeoServer安装部署流程

    1.双击geoserver-2.13.0.exe进行安装,点击Next进行下一步 2.GeoServer遵循GPL许可,点击I agree继续 3.选择要安装的程序文件目录,点击Next继续 4.点击 ...

  6. HTTP Error 405.0 - Method Not Allowed 无法显示您正在查找的页面,因为使用了无效方法(HTTP 谓词)。

    将submit改成button即可   因为触发了form表单

  7. EF并发问题,在提供程序连接上启动事务时出错。有关详细信息,请参阅内部异常。

    1 Entities data=new Entities(); var list = from p in data.Record where p.CreateTime >= d &&am ...

  8. Core3.0部署后访问接口提示500.30

    前言 在localhost直接运行的时候正常,发布之后访问就一直提示500.30 可能原因 app.UseExceptionHandler入参值 1.查看日志 大致提示Startup.cs的某个参数配 ...

  9. 【自定义轮播图】微信小程序自定义轮播图无缝滚动

    先试试效果,可以通过设置参数调整样式 微信小程序中的轮播图可以直接使用swiper组件,如下: <swiper indicator-dots="{{indicatorDots}}&qu ...

  10. CentOS7的防火墙以及selinux介绍/安装telnet命令/安装netstat与ifconfig命令

    简介:firewall防火墙的使用 防火墙:主要用户信息安全防护,主要有软件防火墙和硬件防火墙.firewalld防火墙是软件防火墙,在centos7 之前默认采用的防火墙是iptables,而在ce ...