2014-02-14 88 views
7

我正在學習並剛剛安裝我的cassandra集羣,並嘗試使用python作爲客戶端與它進行交互。在yaml中,我將驗證器設置爲PasswordAuthenticator。如何在python中將用戶名和密碼傳遞給cassandra

所以現在我打算提供我的用戶名和密碼到連接功能,但找不到放置它們的位置。

cluster = Cluster(hosts) 
session = cluster.connect(keyspace) 

基本上,你只提供主機和密鑰空間。文檔類型建議與匿名連接? http://datastax.github.io/python-driver/getting_started.html#connecting-to-cassandra

如果我只是使用的例子,我會收到以下錯誤

raise NoHostAvailable("Unable to connect to any servers", errors) 
cassandra.cluster.NoHostAvailable: ('Unable to connect to any servers', {'hou722067': AuthenticationFailed('Remote end requires authentication.',)}) 

是通過一些配置文件提供的認證信息?它看起來像一個非常基本的功能,我無法想象它不包含在python客戶端驅動程序中。我一定錯過了什麼。

總之,我的問題是:如何使用python登錄cassandra?

在此先感謝您的任何提示!

============================================== === 明白了。

我應該在auth_provider字段中提供用戶名和密碼,該字段是一個函數,返回包含具有適當字符串值的「用戶名」和「密碼」鍵的字典。

喜歡的東西 DEF getCredential(個體,主機): 憑證= { '的用戶名': 'MYUSER', '密碼': 'MYPASSWORD'} 返回憑證

簇=羣集(節點,auth_provider = getCredential)

+1

如果你已經找到了解決您的問題,那麼請張貼和接受它作爲答案。這將使其他用戶知道這個問題已經解決。 –

+0

我是一個新成員,系統不會讓我在10天左右回答自己的問題。這就是爲什麼我只是在更新後的帖子。一旦系統允許我這樣做,我會回答。 – drakihsu

回答

13

繼OPS推薦使用:

from cassandra.cluster import Cluster 

def getCredential(self): 
    return {'username': 'foo', 'password': 'bar'} 

node_ips = ['0.0.0.0', '0.0.0.1'] 

cluster = Cluster(node_ips, protocol_version=1, auth_provider=getCredential) 
session = cluster.connect() 

如果您使用協議版本2,那麼你必須用AuthProvider對象進行身份驗證。 EX:

from cassandra.auth import PlainTextAuthProvider 
from cassandra.cluster import Cluster 

ap = PlainTextAuthProvider(username=foo, password=bar) 
c = Cluster(protocol_version=2, auth_provider=ap) 
s = c.connect() 

有人可以解釋使用這兩種方法之一來驗證遠程集羣的最佳做法嗎?

+0

嘿,感謝@ bfb這爲我工作,但只是一個注意,非關鍵字參數應該是所有關鍵字之前 –

1

你在這裏.. 下面是從python連接cassandra的代碼。

from cassandra.cluster import Cluster 
from cassandra.auth import PlainTextAuthProvider 
auth_provider = PlainTextAuthProvider(username='username', password='password') 
cluster = Cluster(["hostname"],auth_provider = auth_provider) 
session = cluster.connect() 
session.set_keyspace('keyspace') 
cluster.connect() 
1

如果您使用協議版本4,那麼你必須用AuthProvider對象進行身份驗證,確定先前auth_provider

from cassandra.auth import PlainTextAuthProvider 
from cassandra.cqlengine import connection 

    auth_provider = PlainTextAuthProvider(username='user_name', password='user_pwd') 

    connection.setup(cassandra_host, default_keyspace, retry_connect=True, protocol_version=4, auth_provider=auth_provider) 
相關問題