现如今,我们称虚拟世界里的海盗们为“黑客”,他们所追寻的战利品就是在你数据库某处的数据。
 
而我们能够保证你的数据安全的工具之一,就是“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. 主从复制架构直接转换MGR(manual)

    环境信息 IP port role info 192.168.188.81 3316 node1 master 192.168.188.82 3316 node2 slave1 192.168.188 ...

  2. JUC(一):volatile关键字

    volatile是什么 ​ volatile是java虚拟机提供的轻量级同步机制,它包含三种特性: 保证可见性:只要主内存中变量做出修改,其余线程马上会感知到变量的修改. package com.ch ...

  3. fMRI数据分析学习笔记——常用工具

    背景 在学习fMRI数据处理的过程中,通过其他的资料看到了别人推荐的有用的fMRI数据处理软件和小插件,在此记录一下,以便后期慢慢学习使用. 1.NeuroImaging Analysis Kit ( ...

  4. Mysql主从数据库(master/slave),实现读写分离

    在之前的一篇文章中,阐述了如何在高并发高负载的场景下使用nginx做后台服务的负载均衡:在阿里云Centos上配置nginx+uwsgi+负载均衡配置,但是不要以为这样做了就是一劳永逸的,到了数据业务 ...

  5. linux目录和Windows目录对比

    linux目录和Windows目录对比 我们应该知道 Windows 有一个默认的安装目录专门用来安装软件.Linux 的软件安装目录也应该是有讲究的,遵循这一点,对后期的管理和维护也是有帮助的. / ...

  6. NAT、端口映射、内网穿透、公网IP都是啥

    原文地址:https://wuter.cn/1756.html/ 一.IPv4地址 IP协议是为计算机网络相互连接进行通信而设计的协议,它是能使连接到网上的所有计算机网络实现相互通信的一套规则. 这里 ...

  7. xxfpmW 的诞生过程

    最近因为在win 服务器搭建php服务,发现php-cgi.exe 很容易崩溃,看cpu和硬盘都没有暴涨,也不知道啥原因,网上查发现有一款xxfpm 小应用可以解决这个问题,但这个应用是2011年开发 ...

  8. 登录&单点登录介绍

    COOKIE & SESSION & TOKEN 主要用来跟踪会话,识别用户所用.cookie 是客户端,session 是服务端的. 因为 http 是无状态协议,每一次的访问都不知 ...

  9. 解决UE4缓存使C盘膨胀的问题

    使用UE4的时候会发现C盘越来越小了,那是因为UE4引擎的缓存文件默认保存在C盘的缘故. 概述 一.出现的问题:UE4的缓存文件会导致C盘膨胀. 二.解决的方式:请严格按照下列步骤来执行.1. 更改U ...

  10. Offer快到碗里来,Volatile问题终结者

    微信公众号:大黄奔跑关注我,可了解更多有趣的面试相关问题. 写在之前面试问题概览面试回顾大黄可见性Demo演示小插曲大黄可见性Demo演示小插曲大黄可见性Demo演示小插曲总结番外 写在之前 Hell ...