HOWTO · MongoDB

Mongo シェルですべてのユーザーを一覧表示する

ユーザーを認証する方法、show users で Mongo シェルですべてのユーザーを一覧表示する方法、および db.getUser() メソッドと db.getUsers() メソッドの使用方法を、mongosh 向けの MongoDB 8.0 ドキュメントに基づいて学びます。

このページの内容

この MongoDB の記事では、ユーザーを認証する方法、Mongo シェルですべてのユーザーを一覧表示する方法、および db.getUser() メソッドと db.getUsers() メソッドの使用方法を学習します。コマンドと出力は MongoDB 8.0 のドキュメントに従い、MongoDB Shell である mongosh で実行します。

MongoDB のユーザーはデータベースごとに定義されます。ユーザーは 1 つの認証データベースに存在し、この記事のすべてのコマンドは特定のデータベースに対して実行されます。ほとんどの例では、管理者が通常ユーザーを作成する admin データベースを使用します。

ユーザーを認証する

ユーザーとして認証するには、ユーザー名、パスワード、およびそのユーザーに関連付けられた認証データベースを指定する必要があります。同じ mongosh セッション内でユーザーを切り替えることはできません。別のユーザーとして認証すると、セッションは認証された両方のユーザーの権限を持ちます。ユーザーを切り替えるには、mongosh を終了して再起動してください。

mongosh では、接続時に認証することも、接続後に認証することもできます。

接続時に認証する

コマンドラインオプション -u、-p、--authenticationDatabase を指定して mongosh を起動します。

mongosh --port 27017 --authenticationDatabase "admin" -u "myUserAdmin" -p

プロンプトが表示されたらパスワードを入力します。

接続後に認証する

認証情報なしで mongosh を mongod または mongos インスタンスに接続します。

mongosh --port 27017

mongosh で認証データベース(この場合は admin)に切り替え、db.auth() メソッドまたは authenticate コマンドを使用して認証データベースに対して認証します。

use admin
db.auth("myUserAdmin", passwordPrompt()) // or cleartext password

passwordPrompt() メソッドは、パスワードの入力を求めます。パスワードを文字列として直接指定することもできますが、パスワードが画面に表示されたり、シェルの履歴に漏れたりするのを避けるため、passwordPrompt() の使用が推奨されます。

Mongo シェルですべてのユーザーを一覧表示する

シェルヘルパー show users は、現在のデータベースのすべてのユーザーを一覧表示します。これは db.getUsers() を実行するもので、以下の独自のセクションで説明します。まず、ユーザーを一覧表示したいデータベースに切り替えてください。admin で作成されたユーザーについては次のとおりです。

use admin
show users

出力には、ユーザーごとに 1 つのドキュメントが含まれ、_id、userId、user、db、roles、mechanisms などのフィールドがあります。ユーザーはデータベースに属しているため、別のデータベースのユーザーを確認するには、データベースごとにコマンドを 1 回実行してください。

system.users コレクションを直接変更してはいけません。ユーザーを管理するには、db.getUser()、db.getUsers()、db.createUser() など、指定されたユーザー管理コマンドとメソッドを使用してください。

MongoDB の db.getUser() メソッド

db.getUser() メソッドは、指定されたユーザーのユーザー情報を返します。このメソッドはユーザーのデータベースで実行してください。ユーザーはそのデータベースに存在しなければならず、ユーザーが存在しない場合、このメソッドは null を返します。このメソッドの構文は次のとおりです。

db.getUser(username, args)

db.getUser() メソッドは、次のパラメーターで構成されます。

Parameter Type Description
username string 情報を取得するユーザーの名前。
args document 任意。追加の引数を指定するドキュメント。

args ドキュメントは次のフィールドをサポートします。

db.getUser( "<username>", {
   showCredentials: <Boolean>,
   showCustomData: <Boolean>,
   showPrivileges: <Boolean>,
   showAuthenticationRestrictions: <Boolean>,
   filter: <document>
} )
Field Type Description
showCredentials Boolean 任意。このフィールドを true に設定すると、ユーザーのパスワードハッシュが表示されます。デフォルトでは、このフィールドは false です。
showCustomData Boolean 任意。このフィールドを false に設定すると、ユーザーの customData が出力から省略されます。デフォルトでは、このフィールドは true です。バージョン 5.2 の新機能。
showPrivileges Boolean 任意。このフィールドを true に設定すると、継承されたロールの拡張情報を含む、ユーザーの完全な権限セットが表示されます。デフォルトでは、このフィールドは false です。すべてのユーザーを表示する場合、このフィールドは指定できません。
showAuthenticationRestrictions Boolean 任意。このフィールドを true に設定すると、ユーザーの認証制限が表示されます。デフォルトでは、このフィールドは false です。すべてのユーザーを表示する場合、このフィールドは指定できません。
filter document 任意。フィルター条件に一致するユーザーの情報を返すための $match ステージ条件を指定するドキュメント。

db.getUser() メソッドは、usersInfo: <username> コマンドをラップします。他のユーザーの情報を表示するには、そのユーザーのデータベースに対する viewUser アクションが必要です。ユーザーは自分の情報を表示できます。

例: 次の操作は、accounts データベースのサンプルユーザー appClient に関する情報を返します。

use accounts
db.getUser("appClient")

上記の例の出力は次のとおりです。

{
   _id: 'accounts.appClient',
   userId: UUID("1c2fc1bf-c4dc-4a22-8b04-3971349ce0dc"),
   user: 'appClient',
   db: 'accounts',
   roles: [],
   mechanisms: [ 'SCRAM-SHA-1', 'SCRAM-SHA-256' ]
}

MongoDB の db.getUsers() メソッド

db.getUsers() メソッドは、データベース内のすべてのユーザーの情報を返します。これは usersInfo: 1 コマンドをラップし、構文は次のとおりです。

db.getUsers(<options>)

db.getUsers() メソッドは次のオプションを受け取ります。

db.getUsers( {
   showCredentials: <Boolean>,
   showCustomData: <Boolean>,
   filter: <document>
} )
Field Type Description
showCredentials Boolean 任意。このフィールドを true に設定すると、ユーザーのパスワードハッシュが表示されます。デフォルトでは、このフィールドは false です。
showCustomData Boolean 任意。このフィールドを false に設定すると、ユーザーの customData が出力から省略されます。デフォルトでは、このフィールドは true です。バージョン 5.2 の新機能。
filter document 任意。フィルター条件に一致するユーザーの情報を返すための $match ステージ条件を指定するドキュメント。

db.getUser() と同様に、他のユーザーの情報を表示するには、そのユーザーのデータベースに対する viewUser アクションが必要であり、ユーザーは自分の情報を表示できます。

例: db.getUsers() メソッドは、フィルター条件に一致するユーザーの情報を返すために filter ドキュメントを受け取ることができます。現在のデータベースで SCRAM-SHA-256 資格情報を持つすべてのユーザーを表示するには、次を実行します。

db.getUsers({ filter: { mechanisms: "SCRAM-SHA-256" } })

すべてのユーザーを表示する場合、showCredentials オプションは指定できますが、showPrivileges オプションと showAuthenticationRestrictions オプションは指定できません。

この MongoDB の記事により、ユーザーを認証する方法、Mongo シェルですべてのユーザーを一覧表示する方法、および db.getUser() メソッドと db.getUsers() メソッドの使用方法を学習しました。