アクセス制御を有効にすると、ユーザーは本人確認を求められます。ユーザーに ロールを 1 つ以上付与する必要があります。ロールにより、ユーザーには MongoDB のリソースに対して特定の アクションを実行する権限が付与されます。
MongoDB システムの各アプリケーションとユーザーは、それぞれ別のユーザーにマッピングする必要があります。このアクセス分離の原則によって、アクセスの取り消しや継続的なユーザーのメンテナンスが容易になります。最小権限のシステムにするには、ユーザーに必要最小限の特権だけを付与してください。
このページのユーザー情報は、次のすべての環境でホストされている自己管理型配置に適用されます。
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
MongoDB Atlas配置でデータベースユーザーを作成する方法については、 「 データベースユーザーの構成 」を参照してください。
前提条件
ユーザーを作成するには、次のことを行う必要があります。
日常のユーザー作成を行うには、次の権限が必要です。
データベースに新しいユーザーを作成するには、そのデータベースリソースに対して
createUserアクションが必要です。
userAdminおよび userAdminAnyDatabase の組み込みロールが、それぞれのリソースでのcreateUser アクションおよび grantRole アクションを提供します。
手順
注意
次の手順では、 SCRAM認証を使用します。 その他の認証メカニズムの詳細については、「追加の例 」を参照してください。
自己管理型 MongoDB Enterprise や MongoDB Community 配置のデータベースユーザーを設定するには、次の手順に従います。
接続と認証
mongoshを使用して、プライマリmongodに接続するか、シャーディングされたクラスターでmongosに接続し、 ユーザー管理者 または必要な特権を持つユーザーとして認証します。
mongosh-u
<username>-p次のように、 、 、--authenticationDatabase <database> コマンドライン オプションを使用して を開始します。
mongosh --port 27017 --authenticationDatabase \ "admin" -u "myUserAdmin" -p
パスワードの入力を求められたら、入力します。
mongosh を使用して、次のデータベース配置に接続します。
mongosh --port 27017
mongoshで、認証データベース(この場合はadmin )に切り替え、 db.auth(<username>, <pwd>)メソッドを使用して認証します。
use admin db.auth("myUserAdmin", passwordPrompt()) // or cleartext password
Tip
passwordPrompt() メソッドではパスワードの入力が求められます。パスワードを文字列として直接指定することもできます。パスワードが画面に表示されたり、shell 履歴にパスワードが流出したりすることを避けるために、 passwordPrompt() メソッドを使用することをお勧めします。
パスワードの入力を求められたら、入力します。
配置用の追加ユーザー作成
注意
次の手順ではSCRAM認証を使用します。 その他の認証メカニズムの詳細については、「追加の例 」を参照してください。
ユーザー管理者として認証した後、db.createUser() メソッドを使用して追加のユーザーを作成します。任意の組み込みロールまたはユーザー定義ロールをユーザーに割り当てることができます。
以下の操作では、test データベースの readWrite ロールと reporting データベースの read ロールを持つユーザー myTester が test データベースに追加されます。
use test db.createUser( { user: "myTester", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )
Tip
passwordPrompt() メソッドではパスワードの入力が求められます。パスワードを文字列として直接指定することもできます。パスワードが画面に表示されたり、shell 履歴にパスワードが流出したりすることを避けるために、 passwordPrompt() メソッドを使用することをお勧めします。
ユーザーを作成したデータベース(この例では test)がそのユーザーの認証データベースになります。ユーザーはこのデータベースで認証されますが、他のデータベースでもロールを持つことができます。ユーザーの認証データベースによって、ユーザーの特権は制限されません。
追加ユーザーを作成したら、mongosh を終了します。
インスタンスに接続し、次のように認証します: myTester
重要
同じmongoshセッション内でユーザーを切り替えることはできません。 別のユーザーとして認証とは、セッションが認証された両方のユーザーの特権を持つことを意味します。 ユーザーを終了して再起動するには、 mongoshを使用します。
myUserAdmin mongoshを終了した後、 myTesterとして再接続します。
mongosh-u
<username>-p次のように、 、 、--authenticationDatabase <database> コマンドライン オプションを使用して を開始します。
mongosh --port 27017 -u "myTester" \ --authenticationDatabase "test" -p
プロンプトが表示されたら、ユーザーのパスワードを入力します。
mongosh を使用して、次のデータベース配置に接続します。
mongosh --port 27017
mongoshで、認証データベース(この場合はadmin )に切り替え、 db.auth(<username>, <pwd>)メソッドを使用して認証します。
use test db.auth("myTester", passwordPrompt()) // or cleartext password
Tip
passwordPrompt() メソッドではパスワードの入力が求められます。パスワードを文字列として直接指定することもできます。パスワードが画面に表示されたり、shell 履歴にパスワードが流出したりすることを避けるために、 passwordPrompt() メソッドを使用することをお勧めします。
プロンプトが表示されたら、ユーザーのパスワードを入力します。
その他の例
ユーザー名とパスワードの認証
以下の操作では、指定された名前、パスワード、ロールを持つユーザーが reporting データベースに作成されます。
Tip
passwordPrompt() メソッドではパスワードの入力が求められます。パスワードを文字列として直接指定することもできます。パスワードが画面に表示されたり、shell 履歴にパスワードが流出したりすることを避けるために、 passwordPrompt() メソッドを使用することをお勧めします。
use reporting db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } )
Kerberos 認証
Kerberos などの外部認証メカニズムを使用して MongoDB に認証するユーザーは、mongos や mongod が認証のために外部ソースを参照できるように、$external データベースに作成する必要があります。
$external認証ユーザー(Kerberos、LDAP、または X.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10 k バイトより大きくすることはできません。
Kerberos 認証の場合は、ユーザー名として Kerberos プリンシパルを追加する必要があります。パスワードを指定する必要はありません。
以下の操作では、records データベースへの読み取り専用アクセス権を持つ Kerberos プリンシパル [email protected] を追加します。
use $external db.createUser( { user: "[email protected]", roles: [ { role: "read", db: "records" } ] } )
Tip
MongoDB 配置の Kerberos 認証設定の詳細については、次のチュートリアルを参照してください。
LDAP 認証
注意
MongoDB 8.0以降、 LDAP認証と認可は非推奨です。 LDAP は使用可能であり、 MongoDB 8のサポート期間中に変更されずに動作し続けます。 LDAP は将来のメジャー リリースで削除される予定です。
詳細については、「LDAP の非推奨」を参照してください。
LDAP などの外部認証メカニズムを使用して MongoDB に認証するユーザーは、mongos や mongod が認証のために外部ソースを参照できるように、$external データベースに作成する必要があります。
$external認証ユーザー(Kerberos、LDAP、または X.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10 k バイトより大きくすることはできません。
LDAP 認証の場合は、ユーザー名を指定する必要があります。パスワードは LDAP サービスによって処理されるため、指定する必要はありません。
以下の操作では、records データベースへの読み取り専用アクセス権を持つ reporting ユーザーを追加します。
use $external db.createUser( { user: "reporting", roles: [ { role: "read", db: "records" } ] } )
Tip
MongoDB 配置の LDAP 認証設定の詳細については、次のチュートリアルを参照してください。
X.509 クライアント証明書認証
X.509 クライアント証明書認証などの 外部認証メカニズムを使用してMongoDBに認証するユーザーは、mongos または mongod が認証のために外部ソースを参照できるように、 $externalデータベースに作成する必要があります。
$external認証ユーザー(Kerberos、LDAP、または X.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10 k バイトより大きくすることはできません。
X.509 クライアント証明書認証の場合、 MongoDBユーザーとしてクライアント証明書の subject の値を追加する必要があります。各一意の X.509クライアント証明書は、単一のMongoDBユーザーに対応します。パスワードを指定する必要はありません。
以下の操作では、クライアント証明書のサブジェクト CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry ユーザーを、records データベースへの読み取り専用アクセス権とともに追加します。
use $external db.createUser( { user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", roles: [ { role: "read", db: "records" } ] } )
Tip
MongoDBデプロイの X.509 クライアント証明書認証の設定の詳細については、次のチュートリアルを参照してください。
次のステップ
自己管理型 MongoDB Enterprise や MongoDB Community 配置のユーザー管理、ロールの割り当て、カスタムロールの作成を行うには、「 自己管理型配置でユーザーとロールの管理 」を参照してください。