スポンサーリンク

このドキュメントの内容は、以下の通りです。

Cassandra では、コネクションを IDとパスワードを使用して、認証することができます。

Cassandra のソースコードに含まれる SimpleAuth を利用します。

ダウンロード


ソース


ビルド


SimpleAuth のコードをビルドします。

cd src
javac -cp ~/tmp/cassandra/apache-cassandra-1.1.2/lib/apache-cassandra-1.1.2.jar org/apache/cassandra/auth/*.java
cd jar cf auth.jar org

SimpleAuthority の jar ファイルを cassandra の lib ディレクトリにコピーする。
cp auth.jar ~/cassandra/lib/auth.jar

設定


access.properties


access.properties を作成します。
$HOME/cassandra/conf/access.properties
<modify-keyspaces>=root

k1.<rw>=root
k1.<ro>=reader

k1.c1.<rw>=root
k1.c1.<ro>=reader

passwd.properties


passwd.properties を作成します。
$HOME/cassandra/conf/passwd.properties

root=badpasswd
reader=badpasswd

cassandra.yaml


cassandra.yaml の2つの設定を書き換えます。
[/src]
#authenticator: org.apache.cassandra.auth.AllowAllAuthenticator
authenticator: org.apache.cassandra.auth.SimpleAuthenticator

# authorization backend, implementing IAuthority; used to limit access/provide permissions
#authority: org.apache.cassandra.auth.AllowAllAuthority
authority: org.apache.cassandra.auth.SimpleAuthority
[/src]

Cassandra の起動


cassandra の引数に passwd.properties と access.properties をつけます。
./bin/cassandra -f -Dpasswd.properties=conf/passwd.properties \
-Daccess.properties=conf/access.properties

cassandra-env.sh でつけてもよいです。

実行例



cassandra-cli を使用し、 id root で接続してみます。

薫 $ ./bin/cassandra-cli -h localhost -k k1 -u root -pw badpasswd
Connected to: "Test Cluster" on localhost/9160
Welcome to Cassandra CLI version 1.1.2

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[root@k1] set c1['1']['3'] = 'data';
Value inserted.
Elapsed time: 39 msec(s).

write の権限ない user で write を試みた場合。

薫 $ ./bin/cassandra-cli -h localhost -k k1 -u reader -pw badpasswd
Connected to: "Test Cluster" on localhost/9160
Welcome to Cassandra CLI version 1.1.2

Type 'help;' or '?' for help.
Type 'quit;' or 'exit;' to quit.

[reader@k1] set c1['1']['3'] = 'data2';
#<User reader groups=[]> does not have permission WRITE for /cassandra/keyspaces/k1/c1
InvalidRequestException(why:#<User reader groups=[]> does not have permission WRITE for /cassandra/keyspaces/k1/c1)
at org.apache.cassandra.thrift.Cassandra$insert_result.read(Cassandra.java:15974)
at org.apache.thrift.TServiceClient.receiveBase(TServiceClient.java:78)
at org.apache.cassandra.thrift.Cassandra$Client.recv_insert(Cassandra.java:797)
at org.apache.cassandra.thrift.Cassandra$Client.insert(Cassandra.java:781)
at org.apache.cassandra.cli.CliClient.executeSet(CliClient.java:909)
at org.apache.cassandra.cli.CliClient.executeCLIStatement(CliClient.java:222)
at org.apache.cassandra.cli.CliMain.processStatementInteractive(CliMain.java:219)
at org.apache.cassandra.cli.CliMain.main(CliMain.java:346)



失敗事例


./bin/cassandra-cli -u root -pw badpasswd -k k1

CQL は、うまくいったが、cassandra-cli だと、認証が失敗する。

./bin/cassandra-cli -h localhost -k k1 -u root -pw badpasswd
Login failure. Did you specify 'keyspace', 'username' and 'password'?

cassandra のサーバプロセスは、NullPointerException のログが出ていた。

ERROR 23:20:44,000 Error occurred during processing of message.
java.lang.NullPointerException
at org.apache.cassandra.auth.SimpleAuthority.authorize(SimpleAuthority.java:84)
at org.apache.cassandra.service.ClientState.hasKeyspaceSchemaAccess(ClientState.java:158)
at org.apache.cassandra.thrift.CassandraServer.describe_keyspaces(CassandraServer.java:828)
at org.apache.cassandra.thrift.Cassandra$Processor$describe_keyspaces.getResult(Cassandra.java:3244)
at org.apache.cassandra.thrift.Cassandra$Processor$describe_keyspaces.getResult(Cassandra.java:3232)
at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32)
at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34)
at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:186)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
at java.lang.Thread.run(Thread.java:679)

エラーが出てたのは、ここらへんのコード。
org/apache/cassandra/auth/SimpleAuthority.java

// Special case access to the keyspace list
if (keyspace == KEYSPACES_WRITE_PROPERTY)
{   
	String kspAdmins = accessProperties.getProperty(KEYSPACES_WRITE_PROPERTY);
	for (String admin : kspAdmins.split(","))
		if (admin.equals(user.username))
			return Permission.ALL;
}

上記の問題が発生していたのは、
access.properties に、以下の設定が足りないせいだった。
<modify-keyspaces>=root

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

はてなの人気のブックマーク

スポンサーリンク
 

過去ログ

2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー