现如今,我们称虚拟世界里的海盗们为“黑客”,他们所追寻的战利品就是在你数据库某处的数据。
 
而我们能够保证你的数据安全的工具之一,就是“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. 廖雪峰官网学习js 数组

    indexOf( )    某字符的位置 slice 相当于string 的substring 切片 a = ['a','b',1,2,3] (5) ["a", "b&q ...

  2. spring入门学习

    开发步骤: 1.导入Spring开发的基本坐标 2.编写接口和实现类 3.创建Spring核心配置文件 4.在Spring核心配置文件中配置实现类 5.使用Spring的API获得Bean实例Bean ...

  3. Vue 组件化开发的思想体现

    现实中的组件化思想化思想体现 标准(同一的标准) 分治(多人同时开发) 重用(重复利用) 组合(可以组合使用) 编程中的组件化思想 组件化规范:Web Components 我们希望尽可能多的重用代码 ...

  4. vue 事件基本用法

    事件基本用法 事件的函数都定义在VUE实例中的methods中,当然也可以直接写在元素内,但是这并不利于后期的维护,需要注意的是:在methods定义的函数内想要引用插值内容,需要使用this,不然就 ...

  5. CentOS6下的ElasticSearch运行步骤

    如何运行ElasticSearch: 1.首先安装jdk1.8版本或以上. 2.下载elasticsearch的压缩包.(我下载的是elasticsearch-6.3.2.tar.gz) 3.使用命令 ...

  6. SecureCRT的下载、安装和Putty 的使用 SSH连接工具

    SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录UNIX或Linux服务器主机的软件.SecureCRT支持SSH,同时支持Telnet和rlog ...

  7. win7开机登录界面壁纸修改

    1.选择一张自己喜欢的图(一定要是jpg格式,亲测png格式不行),分辨率最好和自己电脑的分辨率差不多. 2.将图片改名为"backgroundDefault.jpg": 3.按下 ...

  8. 1.自定义view入门

    1.继承自view 系统提供的view 如 TextView .ImageView 都是继承自view的: 2.自定义一个TextView 通过自定义一个TextView 来熟悉继承自view 的自定 ...

  9. Redis 设计与实现 6:五大数据类型之字符串

    前文 Redis 设计与实现 2:Redis 对象 说到,五大数据类型都会封装成 RedisObject. typedef struct redisObject { unsigned type:4; ...

  10. 7. JDK拍了拍你:字符串拼接一定记得用MessageFormat#format

    目录 ✍前言 版本约定 ✍正文 DateFormat:日期时间格式化 SimpleDateFormat NumberFormat:数字格式化 DecimalFormat 一.0和#的使用(最常见使用场 ...