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() メソッドの使用方法を学習しました。