实战-Cassandra之账号权限管理

密码认证器

默认的认证器是 org.apache.cassandra.auth.AllowAllAuthenticator。如果想要求客户端提供凭证,Cassandra提供另一种选择  org.apache.cassandra.auth.PasswordAuthenticatot

配置认证器

默认登录cqlsh不需要密码,修改cassandra.yaml 修改

# authenticator: AllowAllAuthenticator
authenticator: PasswordAuthenticator

Cassandra2.2或以后的版本,会看到使用 PasswordAuthenticator必须使用CassandraRoleManager,是Cassandra授权功能的一部分。

增加用户

修改之后登录提示需要账号密码,默认账号密码都是 cassandra

[[email protected] bin]$ ./cqlsh node2
Connection error: (‘Unable to connect to any servers‘, {‘192.168.56.12‘: AuthenticationFailed(‘Remote end requires authentication.‘,)})
[[email protected] bin]$ ./cqlsh node2 -u cassandra -p cassandra
Connected to Cluster01 at node2:9042.
[cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
[email protected]> 

修改cassandra账号的密码:

[email protected]> alter user cassandra with password ‘[email protected]‘;
[email protected]> quit
[[email protected] bin]$ ./cqlsh node2 -u cassandra -p cassandra
Connection error: (‘Unable to connect to any servers‘, {‘192.168.56.12‘: AuthenticationFailed(‘Failed to authenticate to 192.168.56.12: Error from server: code=0100 [Bad credentials] message="Provided username cassandra and/or password are incorrect"‘,)})
[[email protected] bin]$ ./cqlsh node2 -u cassandra -p [email protected]123
Connected to Cluster01 at node2:9042.
[cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
[email protected]> 

创建账号:

[[email protected] bin]$ ./cqlsh node2 -u cassandra -p [email protected]123
Connected to Cluster01 at node2:9042.
[cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
[email protected]>
[email protected]> list users;

 name      | super
-----------+-------
 cassandra |  True

(1 rows)
[email protected]> create user cass with password ‘[email protected]‘;
[email protected]>
[email protected]> list users;

 name      | super
-----------+-------
      cass | False
 cassandra |  True

(2 rows)
[email protected]> 

配置自动登录,为了避免每次登录cqlsh都需要输入账号密码,可以在家目录中创建文件 .cqlshrc

[[email protected] ~]$ ls -al
total 24
drwx------. 3 cassandra cassandra  117 Feb 11 04:59 .
drwxr-xr-x. 3 root      root        23 Feb  4 03:24 ..
-rw-------. 1 cassandra cassandra 8074 Feb 11 01:17 .bash_history
-rw-r--r--. 1 cassandra cassandra   18 Aug  8  2019 .bash_logout
-rw-r--r--. 1 cassandra cassandra  193 Aug  8  2019 .bash_profile
-rw-r--r--. 1 cassandra cassandra  231 Aug  8  2019 .bashrc
drwxrwxr-x. 2 cassandra cassandra   51 Feb 11 04:59 .cassandra
-rw-rw-r--. 1 cassandra cassandra   58 Feb 11 04:57 .cqlshrc
[[email protected] ~]$ cat .cqlshrc
[authentication]
username = cassandra
password = [email protected]123
[[email protected] ~]$ cd /data/cass/bin
[[email protected] bin]$ ./cqlsh
Connection error: (‘Unable to connect to any servers‘, {‘127.0.0.1‘: error(111, "Tried connecting to [(‘127.0.0.1‘, 9042)]. Last error: Connection refused")})
[[email protected] bin]$ ./cqlsh node2
Connected to Cluster01 at node2:9042.
[cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
[email protected]>quit
[[email protected] bin]$ cd
[[email protected] ~]$ ls -al
total 20
drwx------. 3 cassandra cassandra  101 Feb 11 04:59 .
drwxr-xr-x. 3 root      root        23 Feb  4 03:24 ..
-rw-------. 1 cassandra cassandra 8074 Feb 11 01:17 .bash_history
-rw-r--r--. 1 cassandra cassandra   18 Aug  8  2019 .bash_logout
-rw-r--r--. 1 cassandra cassandra  193 Aug  8  2019 .bash_profile
-rw-r--r--. 1 cassandra cassandra  231 Aug  8  2019 .bashrc
drwxrwxr-x. 2 cassandra cassandra   66 Feb 11 04:59 .cassandra
[[email protected] ~]$ cd .cassandra/
[[email protected] .cassandra]$ ll
total 16
-rw-------. 1 cassandra cassandra 3978 Feb 11 04:59 cqlsh_history
-rw-rw-r--. 1 cassandra cassandra   58 Feb 11 04:57 cqlshrc
-rw-rw-r--. 1 cassandra cassandra 5833 Feb 10 22:00 nodetool.history
[[email protected] .cassandra]$ cat cqlshrc
[authentication]
username = cassandra
password = [email protected]123

切换账号无需退出重新登录,执行时可以不加密码,在命令行输入。用户家目录下面 .cassandra/cqlsh_history 文件中会记录所有命令行上输入的内容

[[email protected] bin]$ ./cqlsh node3
Connected to Cluster01 at node3:9042.
[cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
[email protected]>
[email protected]> list users;

 name      | super
-----------+-------
      cass | False
 cassandra |  True

(2 rows)
[email protected]> login cass ‘[email protected]‘;
[email protected]> 

修改账号密码,删除账号

[email protected]> alter user cass with password ‘[email protected]‘;
[email protected]> login cass ‘[email protected]‘;
[email protected]> login cassandra ‘[email protected]‘;
[email protected]> drop user cass;
[email protected]> list users;

 name      | super
-----------+-------
 cassandra |  True

(1 rows)

使用CassandraAuthorizer

通过授权器,授权用户访问集群中的键和表。 默认授权器 org.apache.cassandra.auth.AllowAllAuthorizer。

关闭集群,配置脚本 bin/stop-server

echo "Cassandra is shutting down"

user=`whoami`
pgrep -u $user -f cassandra | xargs kill -9
if ps -ef|grep cassandra|grep -v grep|grep java; then
    echo "Cassandra shutdown failed"
else
    echo "Cassandra closed"
fi

修改cassandra.yaml

# authorizer: AllowAllAuthorizer
authorizer: CassandraAuthorizer

普通用户登录查看keyspace和table没有权限

[[email protected] bin]$ ./cqlsh node2
Connected to Cluster01 at node2:9042.
[cqlsh 5.0.1 | Cassandra 3.11.5 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
[email protected]> desc keyspaces;

system_schema  system     system_distributed  test01
system_auth    keyspace1  system_traces     

[email protected]> list users;

 name      | super
-----------+-------
      cass | False
 cassandra |  True

(2 rows)
[email protected]> login cass;
Password:
[email protected]> desc keyspaces;

system_schema  system     system_distributed  test01
system_auth    keyspace1  system_traces     

SyntaxException: line 1:0 no viable alternative at input ‘ues‘ ([ues]...)
[email protected]> use test01;
[email protected]:test01> desc tables;

test01

[email protected]:test01> select * from test01;
Unauthorized: Error from server: code=2100 [Unauthorized] message="User cass has no SELECT permission on <table test01.test01> or any of its parents"
[email protected]:test01> 

通过grant命令给用户赋予权限

[email protected]> grant select on test01.test01 to cass;
[email protected]> login cass;
Password:
[email protected]> use test01;
[email protected]:test01> select * from test01;

 key | C0 | C1 | C2 | C3 | C4
-----+----+----+----+----+----

(0 rows)

基于角色的访问控制

Cassandra提供一种基于角色的访问控制(role-based access control, RBAC)功能。创建角色,给角色赋予权限,给用户赋予角色的权限。

[email protected]:test01> list roles;

 role      | super | login | options
-----------+-------+-------+---------
      cass | False |  True |        {}
 cassandra |  True |  True |        {}

(2 rows)
[email protected]:test01> create role dev;
[email protected]:test01> grant all on keyspace test to dev;
InvalidRequest: Error from server: code=2200 [Invalid query] message="Resource <keyspace test> doesn‘t exist"
[email protected]:test01> grant all on keyspace test01 to dev;
[email protected]:test01>
[email protected]:test01> drop user cass;
[email protected]:test01> create user cass with password ‘[email protected]‘;
[email protected]:test01> login cass
Password:
[email protected]:test01> select * from test01.test01;
Unauthorized: Error from server: code=2100 [Unauthorized] message="User cass has no SELECT permission on <table test01.test01> or any of its parents"
[email protected]:test01> login cassandra
Password:
[email protected]:test01> grant dev to cass;
[email protected]:test01> login cass
Password:
[email protected]:test01> select * from test01.test01;

 key | C0 | C1 | C2 | C3 | C4
-----+----+----+----+----+----

(0 rows)

Cassandra中角色是可加的,这表示,如果授权一个用户的任意一个角色有某个特定的权限,那么这个用户就会授权这个权限。

在后台Cassandra把用户和角色存储在system_auth 键空间。如果为集群配置的授权,那么只有管理员用户可以访问这个键空间,所以使用管理员用户登录cqlsh来检查这个键空间内容;

[email protected]:system> use system_auth;
[email protected]:system_auth> desc tables;

resource_role_permissons_index  role_permissions  role_members  roles

[email protected]:system_auth>
[email protected]:system_auth> select * from role_members;

 role | member
------+--------
  dev |   cass

(1 rows)
[email protected]:system_auth> select * from role_permissions;

 role | resource    | permissions
------+-------------+--------------------------------------------------------------
  dev | data/test01 | {‘ALTER‘, ‘AUTHORIZE‘, ‘CREATE‘, ‘DROP‘, ‘MODIFY‘, ‘SELECT‘}

(1 rows)
cassandra[email protected]:system_auth> select * from resource_role_permissons_index;

 resource  | role
-----------+-----------
 roles/dev | cassandra

(1 rows)
[email protected]:system_auth> select * from roles;

 role      | can_login | is_superuser | member_of | salted_hash
-----------+-----------+--------------+-----------+--------------------------------------------------------------
 cassandra |      True |         True |      null | $2a$10$6q2SqzrdcARz6qGcLj7DreKWAnQjJT653r4acBAJlHWzQW/e/4SQm
      cass |      True |        False |   {‘dev‘} | $2a$10$Z/KpRFIkmhQ6uEn45eDa4eyymaj/sty6LN1MDBfZdrxZwHnMI8ow2
       dev |     False |        False |      null |                                                         null

(3 rows)

实际上并没有一个单独的数据库级用户的概念,Cassandra使用角色概念来耿总用户以及角色。

改变system_auth 副本因子

需要指出重要的一点,system_auth键空间默认配置为使用SimpleStrategy,副本因子为1.

这说明默认情况下,我们配置的任何用户,角色和权限不会再集群上分布存储,除非我们重新配置system_auth键空间 的复制策略,使之与我们的集群拓扑一致。

加密

从3.0版本开始,Cassandra通过客户端与服务器(节点)间的加密以及节点间的加密来保护数据的安全。Cassandra3.0以后,只有DataStax企业版的Cassandra才支持数据文件(静态数据)加密。

数据文件加密路线图

有很多Cassandra JIRA请求都说针对提供加密特性的3.x版本系列。

提示的加密: https://issues.apache.org/jira/browse/CASSANDRA-11040

提交日志的加密: https://issues.apache.org/jira/browse/CASSANDRA-6018

原文地址:https://www.cnblogs.com/yuxiaohao/p/12298938.html

时间: 2024-11-15 13:27:43

实战-Cassandra之账号权限管理的相关文章

Linux账号权限管理

Linux账号权限管理 用户账号和组账号概述 用户账号 超级用户:root用户是Linux 操作系统中默认的超级用户账号,对本主机拥有至高无上的权限. 普通用户:需要管理员用户创建,拥有的权限受到一定限制,一般只在用户自己的宿主目录中拥有完整权限. 程序用户:安装 Linux 操作系统及部分应用程序时,会添加一些特定的低权限用户账号,这些用户一般不允许登录到系统,而仅用于维持系统或某个程序的正常运行. 组账号 基本组:每一个用户账号至少属于一个组,这个组称为该用户的基本组(或私有组). 附加组:

基于DDDLite的权限管理OpenAuth.net 1.0版正式发布

距离上一篇OpenAuth.net的文章已经有5个多月了,在这段时间里项目得到了很多朋友的认可,开源中国上面的Star数接近300,于是坚定了我做下去的信心.最近稍微清闲点,正式推出1.0版,并在阿里云上部署了一个在线演示(文章结尾处给出在线演示链接).相比刚开始时的版本,现在整个架构已经稳定,系统功能性,代码可读性维护性都有质的飞跃. 本文主要介绍系统结构及未来一段时间的开发计划. 项目简介 本项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发的一套符合国情的

DDDLite的权限管理

领域驱动设计实战—基于DDDLite的权限管理 在园子里面,搜索一下“权限管理”至少能得到上千条的有效记录.记得刚开始工作的时候,写个通用的权限系统一直是自己的一个梦想.中间因为工作忙(其实就是懒!)等原因,被无限期搁置了.最近想想,自己写东西时,很多都是偏理论方面的,常常找不到合适的例子来论证自己的观点.于是用业余时间来写点东西. 园子中的权限管理系统有以下几种: 写的好的,界面NB的,但不开源,毕竟人家辛辛苦苦的劳动成果: 写的好的,也公开源码,但不公开数据库设计和一些流程设计,你得看着源码

OpenAuth.net:.net 领域神级权限管理 2.0 将发布

OpenAuth.net 项目即将迎来年度最大一次更新.强力引入Workflow工作流引擎!尽情期待. 有图有真相: 该项目采用经典DDD架构(用沃恩.弗农大神的话,其实这是DDD-Lite)思想进行开发的一套符合国情的基于用户和角色的RBAC系统,系统的产生原因及与众不同的地方可以参考:领域驱动设计实战—基于DDDLite的权限管理OpenAuth.net,这里就不过多介绍. 更多OpenAuth.net介绍qkxue.net

linux基础概念和个人笔记总结(2)——账号和权限管理实验验证

特此感谢! 教员:张仁珑 班主任:傅春华 我想给予他们最崇高的敬意 防伪码:滴水之恩,涌泉相报 感想:当我今天在首页上看到了自己发的文章,这是我的第九篇文档,觉得心里特别开心,也真正理解了 "努力和收获是成正比的."这句话.刚好也正准备整理Linux相关笔记,心里五味杂陈,仿佛就在昨天,似乎就在眼前. 总而言之,没有他们就没有今天的我! 第四章:账号和权限管理 实验要求: 1.建立用户目录 /benet/teachers 和 /benet/students,分别用于存放不同身份用户的宿

【视频分享】Liger UI实战集智建筑工程管理系统配商业代码(打印报表、角色式权限管理)

QQ 2059055336 课程讲师:集思博智 课程分类:.net 适合人群:中级 课时数量:23课时 用到技术:Liger UI框架.AJAX.JSON数据格式的序列化与反序列化.角色的交叉权限管理 本课程代码为商业版代码,用户可直接部署运行. 一.系统介绍: 集智建筑工程管理系统是专为建筑类企业打造的一款管理软件.本着"一工程一台帐"的原则,加强对工程的资金管理,解决工程技术部门.工程管理部门.财务部之间数据的共享,方便领导查询工程进度与回款情况,更好的进行查询统计,提供多种统计图

Android6.0M权限管理实战,完美轻量级封装

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53189359 本文出自[DylanAndroid的博客] Android6.0M权限管理实战,完美轻量级封装 随着Android版本的不断更新,Android再权限管理方面的诟病越来越明显.Google的Android开发人员也意识到了Android应用在权限管理方面的各种问题,让好多用户摸不着头脑就使用了用户的隐私数据. 为了在权限这方面加强管理,给用户一个比较好的体验.A

linux &nbsp; &nbsp; 第六章 账号和权限管理

linux     第六章 账号和权限管理 享受生活热爱挑战 明远分享 每章一段话: 每一个优秀的人,都有一段沉默的时光.人总会有困难丶会被别人不理睬丶这个时候就是你最关键的时候,我们需要相信生活,不放弃,命运不会抛弃你,苦过方可甜. 今天我们要学习在linux中的用户和组的各种配置和管理,其实不要想命令多难记,其实多敲几遍就记住了,想它越简单你就越容易达成你的目标. 理论: Linux基于用户身份对资源访问进行控制     我们先来看下linux用户帐号和组的分类: ①超级用户root    

linux账号和权限管理

账号和权限管理 要求: 一,建立用户目录: 创建目录/tech/benet和/tech/accp,分别用于存放各项目组中用户账户的宿主文件. 步骤:如图所示: 二,添加组账号: 为两个项目添加组账号benet.accp,GID号分别设置为1001 .1002 为技术部添加组账号tech,GID号设置为200 步骤:如图所示: 添加.删除.修改组账号: groupadd命令-添加组账号 gpasswd命令-添加.设置.删除组成员 ? 添加成员时,使用"-a"选项 ? 删除成员时,使用&q