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

Tahseen Tauseef 2023年6月20日
  1. ユーザーを認証する
  2. Mongo シェルですべてのユーザーを一覧表示する
  3. MongoDB の db.getUser() メソッド
  4. MongoDB の db.getUsers() メソッド
Mongo シェルですべてのユーザーを一覧表示する

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

ユーザーを認証する

ユーザーとして認証するには、ユーザーはユーザー名、パスワード、およびそのユーザーに関連付けられた認証データベースを提供する必要があります。 したがって、同じ 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 シェルですべてのユーザーを一覧表示する

すべてのユーザーを一覧表示するには、mongosh を使用して system.users コレクションをクエリできます。

use admin
db.system.users.find()

system.users コレクションを直接変更しないでください。 ユーザーを管理するには、指定されたユーザー管理コマンドを使用できます。

たとえば、mongos を介して作成されたシャード クラスターのすべてのユーザーを一覧表示するには、mongos に接続し、次のコマンドを実行します。 MongoDB は、mongos によって作成されたユーザーを構成サーバーの admin データベースに保存します。

すべてのシャードを一覧表示するには、ローカル ユーザーがそれぞれのシャードに直接接続し、次のコマンドを実行します。 MongoDB は、シャード自体の admin データベースに shard local ユーザーを格納するために使用されます。

これらのシャード ローカルユーザーは、mongosを介してシャード クラスターに追加されたユーザーとは無関係です。 Shard local ユーザーはシャードに制限され、mongos は利用できません。

MongoDB の db.getUser() メソッド

このメソッドの構文は次のとおりです。

db.getUser(username, args)

このメソッドは、指定されたユーザーのユーザー情報を返します。 ユーザーは、ユーザーのデータベースでこのメソッドを実行できます。

メソッドが実行されているデータベースに存在する必要があります。 db.getUser() メソッドは、次のパラメーターで構成されます。

db.getUser( "<username>", {
   showCredentials: <Boolean>,
   showPrivileges: <Boolean>,
   showAuthenticationRestrictions: <Boolean>,
   filter: <document>
} )
パラメータ タイプ 説明
username 情報を取得するユーザーの名前。
args 書類 Optional. A 書類specifying additional arguments.

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

分野 タイプ 説明
showCredentials ブール値 これはオプションのフィールドです。 このフィールドを true に設定すると、ユーザーのパスワード ハッシュが表示されます。 デフォルトでは、このフィールドは false です。
showPrivileges ブール値 これはオプションのフィールドです。 このフィールドを true に設定すると、拡張情報を含むユーザーの完全な権限が表示されます。 デフォルトでは、このフィールドは false です。 すべてのユーザーを表示する場合、このフィールドは指定できません。
showAuthenticationRestrictions ブール値 これはオプションのフィールドです。 ユーザーの認証制限を表示するには、このフィールドを true に設定します。 デフォルトでは、このフィールドは false です。 すべてのユーザーを表示する場合、このフィールドは指定できません。
filter 書類 This is an optional field. This 書類specifies $match stage conditions to return information for users that matches the filter conditions.

db.getUser() メソッドは usersInfo コマンドにラップされています。

ユーザーは、別のユーザーの情報を表示するために、別のユーザーのデータベースで 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(<options>)

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

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

db.getUsers( {
   showCredentials: <Boolean>,
   filter: <document>
} )
分野 タイプ 説明
showCredentials ブール値 これはオプションのフィールドです。 フィールドを true に設定して、ユーザーのパスワード ハッシュを表示できます。 デフォルトでは、このフィールドは false. です。
filter 書類 This is an optional field. This 書類specifies $match stage conditions to return information for users that matches the filter conditions.

ユーザーが別のユーザーの情報を表示するには、そのユーザーのデータベースで viewUser アクションが必要です。 ユーザーは自分の情報を表示できます。

例:

指定したフィルターに一致する特定のデータベースのすべてのユーザーを表示します。

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

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

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

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