2014-02-14 2 views
7

Я изучаю и настраиваю свой кластер cassandra и пытаюсь использовать python в качестве клиента для взаимодействия с ним. В yaml я установил аутентификатор как PasswordAuthenticator.Как передать имя пользователя и пароль в cassandra в python

Итак, теперь я планирую предоставить свое имя пользователя и пароль для функции подключения, но не найду места для их размещения.

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. Должно быть, я что-то пропустил.

Короче говоря, мой вопрос: как мне войти в cassandra с помощью python?

Заранее благодарим за любой намек!

==================================================================================================================================== === Получил это фигуру.

Я должен указать имя пользователя и пароль в поле auth_provider, которое является функцией, возвращающей словарь, содержащий «имя пользователя» и «пароль» с соответствующими строковыми значениями.

Нечто подобное четкости 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, это сработало для меня, но просто примечание о том, что non keyword args должны быть все до ключевого слова –

1

Здесь вы идете .. Ниже приведен код для подключения cassandra от python.

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) 
Смежные вопросы