Docs Menu
Docs Home
/ / /
Ruby ドライバー
/

ユーザー管理

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 ドライバーには、データベースからすべてのユーザーを削除するメソッドは提供されていません。

以下も参照してください。

戻る

モニタリング

項目一覧

  • ユーザーとデータベース
  • ユーザーの作成
  • ユーザー情報
  • ユーザーの更新
  • ユーザーの削除