mongo シェルは MongoDB に含まれるデータベース管理ツールです。mongo シェルを使用して、ApsaraDB for MongoDB のデータベースアカウントを作成およびクエリできます。
前提条件
-
ApsaraDB for MongoDB インスタンスが作成されています。さまざまなタイプのインスタンスの作成方法の詳細については、以下のトピックをご参照ください。
-
mongo シェルを使用して ApsaraDB for MongoDB インスタンスに接続済みである必要があります。各種インスタンスへの接続方法については、以下のトピックをご参照ください。
注意事項
データベースアカウントは、同一データベース内で一意である必要があります。
データベースアカウントの作成
-
mongo シェルを使用して作成されたデータベースアカウントは、ApsaraDB for MongoDB コンソールの アカウント ページには表示されません。
-
mongo シェルを使用して初めてデータベースアカウントを作成する場合は、admin データベース内の組み込みルートアカウントで認証を行う必要があります。
-
admin データベースに切り替えます。
use admin説明このコマンドは変更せずに実行できます。
-
ルートアカウントを認証します。
構文:
db.auth("root","password")パラメーターの説明:
passwordは、ルートアカウントのパスワードを指定します。例:
db.auth("root","123456Aa") -
(任意)カスタムデータベースロールを作成します。
特定のコレクションへのアクセスを制限するには、きめ細かなアクセス制御のためにカスタムデータベースロールを作成します。
-
データベースの切り替え:対象のデータベースに切り替えるには、
use database_nameコマンドを実行します。database_nameは、対象のデータベース名です。 -
ロールのスコープ:ロールは、作成されたデータベース内でのみ使用できます。複数のデータベースに適用されるロールを作成する場合は、
adminデータベース内にロールを作成する必要があります。
構文:
db.createRole({role: "role_name", privileges: [{resource: {db: "role_database_name", collection: "collection_name" }, actions: [ "actions" ] }],roles: []})パラメーターの説明:
パラメーター
説明
例
role_name新規ロールの名前。
readRole
role_database_nameロールが操作権限を持つデータベース。
testDB
collection_nameコレクションの名前。
testCollection
actions許可される操作タイプ(例:
find、insert、update、remove)。find
rolesこのロールが継承する他のロール。空の配列は継承なしを示しますが、
rolesフィールドは必須です。[]
説明詳細については、「createRole」をご参照ください。
例:
testDB データベース内に readRole という名前のロールを作成し、testCollection コレクションに対する find 権限を付与します。
db.createRole({role: "readRole",privileges: [{resource: {db: "testDB", collection: "testCollection" }, actions: [ "find" ]}],roles: []})成功時の応答は次のようになります。
{ ok: 1, '$clusterTime': { clusterTime: Timestamp({ t: 1747119397, i: 1 }), signature: { hash: Binary(Buffer.from("fde8****", "hex"), 0), keyId: Long("7503****") } }, operationTime: Timestamp({ t: 1747119397, i: 1 }) } -
-
データベースアカウントを作成します。
方法 1:対象のデータベースに切り替えてアカウントを作成
データベースアカウントは、作成されたデータベースに所属します。
use database_nameコマンドを実行してデータベースに切り替えます。database_nameは、対象のデータベース名です。構文:
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})パラメーターの説明:
パラメーター
説明
例
user_nameデータベースアカウントの名前。
アカウント名に
:/?#[]@などの特殊文字が含まれる場合は、パーセントエンコーディングを実行する必要があります。パーセントエンコーディングの方法については、Percent-Encoding をご参照ください。test
passwordデータベースアカウントのパスワード。
123456Aa
role_nameデータベースアカウントに付与するロール。
有効な値の詳細については、「データベースアカウントのロール」をご参照ください。
readAnyDatabase
role_database_nameロールが所属するデータベースの名前。
たとえば、
{role: "readAnyDatabase", db: "admin"}は、admin データベースの readAnyDatabase ロールをアカウントに付与し、すべてのデータベースに対する読み取り専用権限を提供します。admin
例:
admin データベース内に test という名前のデータベースアカウントを作成し、パスワードを 123456Aa に設定して、test アカウントに readAnyDatabase ロールを付与します。
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})成功時の応答は次のようになります。
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }方法 2:データベースを切り替えずにアカウントを作成
データベースを切り替えずにデータベースアカウントを作成するには、以下のいずれかの方法を使用できます。
db.getMongo()
構文:
db.getMongo().getDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})パラメーターの説明:
パラメーター
説明
例
database_nameアカウントが所属するデータベースの名前。
admin
user_nameデータベースアカウントの名前。
アカウント名に
:/?#[]@などの特殊文字が含まれる場合は、パーセントエンコーディングを実行する必要があります。パーセントエンコーディングの方法については、Percent-Encoding をご参照ください。test
passwordデータベースアカウントのパスワード。
123456Aa
role_nameデータベースアカウントに付与するロール。
有効な値の詳細については、「データベースアカウントのロール」をご参照ください。
readAnyDatabase
role_database_nameロールが所属するデータベースの名前。
たとえば、
{role: "readAnyDatabase", db: "admin"}は、admin データベースの readAnyDatabase ロールをアカウントに付与し、すべてのデータベースに対する読み取り専用権限を提供します。admin
例:
admin データベースに所属する test という名前のデータベースアカウントを作成し、パスワードを 123456Aa に設定して、test アカウントに readAnyDatabase ロールを付与します。
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})成功時の応答は次のようになります。
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }db.getSiblingDB()
構文:
db.getSiblingDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})パラメーターの説明:
パラメーター
説明
例
database_nameアカウントが所属するデータベースの名前。
admin
user_nameデータベースアカウントの名前。
アカウント名に
:/?#[]@などの特殊文字が含まれる場合は、パーセントエンコーディングを実行する必要があります。パーセントエンコーディングの方法については、Percent-Encoding をご参照ください。test
passwordデータベースアカウントのパスワード。
123456Aa
role_nameデータベースアカウントに付与するロール。
有効な値の詳細については、「データベースアカウントのロール」をご参照ください。
readAnyDatabase
role_database_nameロールが所属するデータベースの名前。
たとえば、
{role: "readAnyDatabase", db: "admin"}は、admin データベースの readAnyDatabase ロールをアカウントに付与し、すべてのデータベースに対する読み取り専用権限を提供します。admin
例:
admin データベースに所属する test という名前のデータベースアカウントを作成し、パスワードを 123456Aa に設定して、test アカウントに readAnyDatabase ロールを付与します。
db.getSiblingDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})成功時の応答は次のようになります。
Successfully added user: { "user" : "test", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
データベースアカウントのクエリ
ApsaraDB for MongoDB インスタンスのすべてのデータベースアカウントのクエリ
admin データベースで以下のコマンドを実行します。
db.getCollection("system.users").find()
このコマンドは変更せずに実行できます。
応答は次のようになります。
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "WeN7mJumlZKG2dvzLRDL*****", "storedKey" : "wfRUnCq55ajFwnYxf9MQJ0k****", "serverKey" : "tP70xGJ9PRZs01VSJF1YDrHg****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "5aIQ734c2Whg2pPwfg****/mpJulsd+33rE****", "storedKey" : "otMBwA2TTwoU****+dfwccnfPN14Dy5Oq6keYOl****", "serverKey" : "VCE****+aLkXGzCqRiaPfjnFG4WFiAOq0BKXxTo0****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
{ "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7ll****/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
対象のデータベース内のすべてのデータベースアカウントのクエリ
use database_name コマンドを実行してデータベースを切り替えることができます。database_name は、対象のデータベース名です。
-
方法 1:対象のデータベースでクエリコマンドを実行します。
show users説明このコマンドは変更せずに実行できます。
応答は次のようになります。
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "roles" : [ { "role" : "root", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } { "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ], "mechanisms" : [ "SCRAM-SHA-1", "SCRAM-SHA-256" ] } -
方法 2:admin データベースでクエリコマンドを実行します。
構文:
db.getCollection("system.users").find({db: "database_name"})パラメーターの説明:
database_nameは、対象のデータベース名を指定します。例:
db.getCollection("system.users").find({db: "admin"})応答は次のようになります。
{ "_id" : "admin.root", "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414****"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "WeN7mJumlZKG2dvzLRDL*****", "storedKey" : "wfRUnCq55ajFwnYxf9MQJ0k****", "serverKey" : "tP70xGJ9PRZs01VSJF1YDrHg****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "5aIQ734c2Whg2pPwfg****/mpJulsd+33rE****", "storedKey" : "otMBwA2TTwoU****+dfwccnfPN14Dy5Oq6keYOl****", "serverKey" : "VCE****+aLkXGzCqRiaPfjnFG4WFiAOq0BKXxTo0****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7ll****/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "readAnyDatabase", "db" : "admin" } ] }
対象のデータベース内の単一のデータベースアカウントのクエリ
単一のデータベースアカウントをクエリするコマンドは、admin データベースで実行する必要があります。
構文:
db.getCollection("system.users").find({user: "user_name", db: "database_name"})
パラメーターの説明:
-
user_name:データベースアカウントの名前を指定します。 -
database_name:アカウントが所属するデータベースの名前を指定します。
例:
db.getCollection("system.users").find({user: "test", db: "admin"})
応答は次のようになります。
{ "_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS****", "storedKey" : "fJQFoKsl7llXdiU/4vFU4xQn****", "serverKey" : "Tf1zygJ****/3/P3UMM47rr8****" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "wcWRhs9VXEsmNWtd7ZD****+NbYXx8ugJ3p2****", "storedKey" : "A5GiH****/tf70hakRY3U3joho3GrtFWQ****/WX****", "serverKey" : "ryRAcj6zomYiHJqhA9ObvuYALc3ZZva8ImR7B89C****" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
データベースアカウントのロール
|
データベース |
ロール |
説明 |
|
すべてのデータベース |
readOnly |
データベースに対する読み取り専用権限を付与します。 |
|
readWrite |
データベースに対する読み取りおよび書き込み権限を付与します。 |
|
|
userAdmin |
データベース内でアカウントおよびロールを作成する権限を付与します。 |
|
|
dbAdmin |
データベース内のコレクションを管理する権限を付与します。 |
|
|
dbOwner |
readWrite、userAdmin、および dbAdmin のすべての権限を含みます。 |
|
|
enableSharding |
シャードクラスターインスタンス内のデータベースを複数のシャードにわたってシャーディングできるようにします。 |
|
|
admin データベース |
readAnyDatabase |
すべてのデータベースに対する読み取り専用権限を付与します。 |
|
readWriteAnyDatabase |
すべてのデータベースに対する読み取りおよび書き込み権限を付与します。 |
|
|
userAdminAnyDatabase |
すべてのデータベース内でアカウントおよびロールを作成する権限を付与します。 |
|
|
dbAdminAnyDatabase |
すべてのデータベース内のコレクションを管理する権限を付与します。 |
|
|
clusterMonitor |
情報収集コマンドを実行する権限を付与します。 |
|
|
hostManager |
setParameter、killop、resync、killCursors などのコマンドを実行する権限を付与します。 |
|
|
clusterManager |
ノード管理コマンドを実行する権限を付与します。 |
|
|
clusterAdmin |
clusterMonitor、hostManager、および clusterManager のすべての権限を含みます。 |
|
|
root |
admin データベース内のすべての権限(readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase など)を含みます。 |
ロールの詳細については、Built-In Roles をご参照ください。