Gerenciamento de usuários
O mongo Ruby Driver fornece um conjunto de métodos para gerenciar usuários em um MongoDB deployment. Todos estes métodos são definidos na classe Mongo::Auth::User::View
, que define o comportamento para executar operações relacionadas ao usuário em um reconhecimento de data center. Você pode acessar a visualização de usuário de um banco de dados chamando o método users
no objeto Mongo::Database
correspondente:
client.database.users
Observe que isso abrirá uma visualização no reconhecimento de data center ao qual o cliente já está conectado. Para interagir com os usuários definidos em um reconhecimento de data center diferente, chame o método use
do cliente e passe o nome do reconhecimento de data center com o qual você deseja se conectar:
client.use(:users).database.users
Neste exemplo, todas as operações seriam realizadas no reconhecimento de data center users
.
Para obter mais informações sobre usuários e gerenciamento de usuários, consulte a documentação on-line do MongoDB.
Usuários e bancos de dados
Quando um cliente se conecta ao servidor, o MongoDB distingue o banco de dados de dados no qual o cliente executará as operações dafonte de autenticação , que é o banco de dados de dados que armazena o usuário como o cliente está autenticando.
Em muitos casos, a fonte de autenticação é a mesma do reconhecimento de data center. Quando são diferentes, as operações de gerenciamento de usuários devem ser realizadas no reconhecimento de data center de origem de autenticação. Por exemplo, para criar um usuário autenticando com certificado X.509, que deve ser definido no reconhecimento de data center do $external
:
client.use('$external').database.users.create( 'C=US,ST=New York,L=New York City,O=MongoDB,OU=x509,CN=localhost', roles: [{role: 'read', db: 'admin'}], )
Observe que a fonte de autenticação não é especificada para criar o usuário - a fonte de autenticação é usada apenas durante o processo de autenticação. Se o #create
for invocado com um objeto User
com auth_source
definido, a origem de autenticação será ignorada para fins de gerenciamento de usuários.
Criando usuários
Há duas maneiras de criar um novo trigger de banco de dados com o Ruby Driver.
A maneira mais simples de criar um novo usuário é usar o método create
, passando um nome de usuário, senha e roles:
client.database.users.create( 'alanturing', password: 'enigma', roles: [ Mongo::Auth::Roles::READWRITE ] )
Outra maneira de criar um usuário é primeiro criar um objeto Mongo::Auth::User
com todas as informações do usuário e, em seguida, passar esse objeto para o método create
.
user = Mongo::User.new( user: 'alanturing', password: 'enigma', roles: [ Mongo::Auth::Roles::READWRITE ] ) client.database.users.create(user)
Note que as credenciais do seu novo usuário serão armazenadas em qualquer reconhecimento de data center ao qual seu objeto client
está conectado atualmente. Este será o auth_source
do seu usuário, e você deve estar conectado ao mesmo reconhecimento de data center para atualizar, remover ou obter informações sobre o usuário que acabou de criar no futuro.
O método create
usa Hash
opções como um segundo argumento opcional. A opção :roles
permite a você conceder permissões ao novo usuário. Por exemplo, o papel Mongo::Auth::Roles::READ_WRITE
concede ao usuário a capacidade de ler e escrever no reconhecimento de data center no qual foram criados. Cada função pode ser especificada como String
ou Hash
. Se quiser conceder permissões a um usuário em um reconhecimento de data center diferente daquele em que ele foi criado, você poderá passar esse nome de reconhecimento de data center na role Hash
. Para criar um usuário alanturing
com permissão para ler e escrever no reconhecimento de data center machines
, você pode executar o seguinte código:
client.database.users.create( 'alanturing', password: 'enigma', roles: [{ role: Mongo::Auth::Roles::READWRITE, db: 'machines' }] )
Para obter mais informações sobre funções no MongoDB, consulte a documentação de funções integradas.
Além da opção :roles
, o método create
suporta uma opção :session
, que permite a você especificar um objeto Mongo::Session
para utilizar para esta operação, como também, uma opção :write_concern
, que especifica a referência de escrita desta operação quando executada em um conjunto de réplicas.
Veja também:
Informações do usuário
Para visualizar informações sobre um usuário que já existe no reconhecimento de data center, utilize o método info
:
client.database.users.info('alanturing')
Se o usuário existir, esse método retornará um objeto Array
contendo um Hash
com informações sobre o usuário, como ID, nome de usuário, banco de dados em que foi criado e suas roles. Se o usuário não existir, esse método retornará uma array vazia.
O método info
também usa um Hash
opcional de opções como segundo argumento. Atualmente, a única opção suportada é :session
, que permite a você especificar um objeto Mongo::Session
para utilizar para esta operação.
O Driver Ruby não tem um método que lista todos os usuários que existem atualmente em um banco de dados.
Veja também:
Atualizando usuários
Para atualizar um usuário que já existe no reconhecimento de data center, você pode utilizar o método update
de duas maneiras. A primeira maneira é especificar o nome do usuário que você deseja atualizar, junto com um novo conjunto de opções.
Aviso
Você deve incluir todas as opções de usuário nas opções Hash
, mesmo aquelas opções cujos valores permanecerão os mesmos. Omitir uma opção é o mesmo que defini-la para um valor vazio.
client.database.users.update( 'alanturing', roles: [ Mongo::Auth::Roles::READ_WRITE ] password: 'turing-test' )
A segunda maneira de atualizar um usuário é passar um objeto Mongo::Auth::User
atualizado para o método update
em vez de um nome de usuário.
user = Mongo::Auth::User.new({ user: 'alanturing', roles: [ Mongo::Auth::Roles::READ_WRITE ], password: 'turing-test' }) client.database.users.update(user)
Opcionalmente, o método update
usa uma Hash
de opções como segundo argumento. As duas opções possíveis para esse método são :session
, que permite especificar um objeto Mongo::Session
no qual executar essa operação, e :write_concern
, que define uma referência de escrita se essa operação for executada em um conjunto de réplicas.
Veja também:
Removendo usuários
Para remover um usuário do reconhecimento de data center, utilize o método remove
:
client.database.users.remove('alanturing')
Você pode passar Hash
de opções como segundo argumento. As duas opções suportadas para o método remove
são :session
e :write_concern
. :session
permite a você especificar um objeto Mongo::Session
para utilizar para esta operação. :write_concern
especifica a referência de escrita da operação se você estiver executando esse comando em um conjunto de réplicas.
O Ruby Driver não fornece um método para remover todos os usuários de um reconhecimento de data center.
Veja também: