ユーザー管理
mongo Rubyドライバー は、 MongoDBの配置でユーザーを管理するための一連の方法を提供します。 これらのメソッドはすべて Mongo::Auth::User::View
クラスで定義されています。このクラスは、データベースでユーザー関連の操作を実行するための動作を定義します。 対応するMongo::Database
オブジェクトでusers
メソッドを呼び出すことで、データベースのユーザー ビューにアクセスできます。
client.database.users
これにより、クライアントがすでに接続されているデータベース上のビューが開かれることに注意してください。 別のデータベースで定義されたユーザーを操作するには、クライアントのuse
メソッドを呼び出し、接続するデータベースの名前を渡します。
client.use(:users).database.users
この例では、すべての操作はusers
データベースで実行されます。
ユーザーとユーザー管理の詳細については、MongoDB のオンライン ドキュメントを参照してください。
ユーザーとデータベース
クライアントがサーバーに接続すると、MongoDB は、クライアントが操作を実行するデータベースを、クライアントが認証するユーザーを保存しているデータベースである認証ソースと区別します。
多くの場合、認証ソースは データベースと同じです。 それらが異なる場合、ユーザー管理操作は認証ソース データベースで実行される必要があります。 たとえば、X.509 証明書で認証するユーザーを作成するには、次のようにします。この証明書は$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'}], )
ユーザーの作成には認証ソースは指定されていないことに注意してください。認証ソースは認証プロセス中にのみ使用されます。 auth_source
が設定されたUser
オブジェクトで#create
が呼び出される場合、ユーザー管理の目的で認証ソースは無視されます。
ユーザーの作成
Ruby ドライバーを使用して新しいデータベースユーザーを作成するには、2 つの方法があります。
新しいユーザーを作成する最も簡単な方法は、ユーザー名、パスワード、ロールを渡してcreate
メソッドを使用することです。
client.database.users.create( 'alanturing', password: 'enigma', roles: [ Mongo::Auth::Roles::READWRITE ] )
ユーザーを作成する別の方法は、まずすべてのユーザー情報を含むMongo::Auth::User
オブジェクトを作成し、次にそのオブジェクトをcreate
メソッドに渡すことです。
user = Mongo::User.new( user: 'alanturing', password: 'enigma', roles: [ Mongo::Auth::Roles::READWRITE ] ) client.database.users.create(user)
新しいユーザーの認証情報は、 client
オブジェクトが現在接続されているデータベースに保存されることに注意してください。 これはユーザーのauth_source
になります。今後、作成したユーザーに関する情報を更新、削除、または取得するには、その同じデータベースに接続する必要があります。
create
メソッドは、任意の 2 つ目の引数としてオプションのHash
を受け取ります。 :roles
オプションを使用すると、新しいユーザーに権限を付与できます。 たとえば、 Mongo::Auth::Roles::READ_WRITE
ロールはユーザーに、ユーザーが作成されたデータベースからの読み取りと書込みの両方を許可します。 各ロールは、 String
またはHash
として指定できます。 ユーザが作成したデータベースとは異なるデータベースでユーザーに権限を付与する場合は、ロールHash
でそのデータベース名を渡すことができます。 machines
データベースで読み取りと書込みの権限を持つユーザーalanturing
を作成するには、次のコードを実行します。
client.database.users.create( 'alanturing', password: 'enigma', roles: [{ role: Mongo::Auth::Roles::READWRITE, db: 'machines' }] )
MongoDB のロールの詳細については、組み込みロール のドキュメントを参照してください。
:roles
オプションに加えて、 create
メソッドは:session
オプションをサポートしています。これにより、この操作に使用するMongo::Session
オブジェクトを指定できます。また、 :write_concern
オプションは、書込み(write)を指定します。レプリカセットで実行される場合、この操作は考慮されます。
以下も参照してください。
ユーザー情報
データベースにすでに存在するユーザーに関する情報を表示するには、 info
メソッドを使用します。
client.database.users.info('alanturing')
ユーザーが存在する場合、このメソッドは、ID、ユーザー名、ユーザーが作成されたデータベース、ロールなどユーザーに関する情報を持つHash
を含むArray
オブジェクトを返します。 ユーザーが存在しない場合、このメソッドは空の配列を返します。
info
メソッドは、2 番目の引数として任意のオプションのHash
も受け取ります。 現在サポートされているオプションは:session
のみです。これにより、この操作に使用するMongo::Session
オブジェクトを指定できます。
Ruby ドライバーには、データベースに現在存在するすべてのユーザーを一覧表示するメソッドはありません。
以下も参照してください。
ユーザーの更新
データベースにすでに存在するユーザーを更新するには、2 つの方法のいずれかの方法でupdate
メソッドを使用できます。 最初の方法は、更新するユーザーの名前と新しいオプションのセットを指定することです。
警告
値が同じままであるオプションであっても、すべてのユーザー オプションをオプションHash
に含める必要があります。 オプションを省略することは、空の値に設定することと同じです。
client.database.users.update( 'alanturing', roles: [ Mongo::Auth::Roles::READ_WRITE ] password: 'turing-test' )
ユーザーを更新する 2 つ目の方法は、ユーザー名の代わりに更新されたMongo::Auth::User
オブジェクトをupdate
メソッドに渡すことです。
user = Mongo::Auth::User.new({ user: 'alanturing', roles: [ Mongo::Auth::Roles::READ_WRITE ], password: 'turing-test' }) client.database.users.update(user)
オプションとして、 update
メソッドは 2 番目の引数としてオプションのHash
を受け取ります。 このメソッドで使用可能なオプションは 2 つあり、この操作を実行するためのMongo::Session
オブジェクトを指定できる:session
と、この操作をレプリカセットで実行する場合に書込み保証を設定する:write_concern
です。
以下も参照してください。
ユーザーの削除
データベースからユーザーを削除するには、 remove
メソッドを使用します。
client.database.users.remove('alanturing')
オプションのHash
を 2 番目の引数として渡すことができます。 remove
メソッドでサポートされているオプションは:session
と:write_concern
です。 :session
を使用すると、この操作に使用するMongo::Session
オブジェクトを指定できます。 :write_concern
は、レプリカセットに対してこのコマンドを実行する場合の操作の 書込み保証 を指定します。
Ruby ドライバーには、データベースからすべてのユーザーを削除するメソッドは提供されていません。
以下も参照してください。