mongo シェルは、MongoDB に含まれるデータベース管理ツールです。このトピックでは、mongo シェルを使用して ApsaraDB for MongoDB のデータベースアカウントを作成およびクエリする方法について説明します。
前提条件
ApsaraDB for MongoDB インスタンスを作成済みであること。さまざまな種類のインスタンスを作成する方法の詳細については、次のトピックをご参照ください。
mongo シェルを使用して ApsaraDB for MongoDB インスタンスに接続済みであること。さまざまな種類のインスタンスに接続する方法の詳細については、次のトピックをご参照ください。
注意事項
データベースアカウントは、データベース内で一意である必要があります。
データベースアカウントを作成する
mongo シェルを使用して作成されたデータベースアカウントは、ApsaraDB for MongoDB コンソールの [アカウント管理] ページではクエリできません。
mongo シェルを使用して初めてデータベースアカウントを作成するときは、admin データベースでインスタンスの組み込み root アカウントを認証する必要があります。
admin データベースに切り替えます。
use admin説明このコマンドは変更せずに実行できます。
ルートアカウントを認証します。
構文:
db.auth("root","password")パラメーターの説明:
passwordは root アカウントのパスワードを指定します。例:
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データベースアカウントの名前。
アカウント名に
:/?#[]@などの特殊文字が含まれている場合は、特殊文字をパーセントエンコーディングする必要があります。パーセントエンコーディングの実行方法の詳細については、「パーセントエンコーディング」をご参照ください。test
passwordデータベースアカウントのパスワード。
123456Aa
role_nameデータベースアカウントに付与するロール。
有効な値の詳細については、「データベースアカウントのロール」をご参照ください。
readAnyDatabase
role_database_nameロールが属するデータベースの名前。
たとえば、
{role: "readAnyDatabase", db: "admin"}は、admin データベースの readAnyDatabase ロールをアカウントに付与します。これにより、すべてのデータベースに対する読み取り専用権限が付与されます。admin
例:
admin データベースに test という名前のデータベースアカウントを作成し、パスワードを 123456Aa に設定し、readAnyDatabase ロールを test アカウントに付与します。
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データベースアカウントの名前。
アカウント名に
:/?#[]@などの特殊文字が含まれている場合は、特殊文字をパーセントエンコーディングする必要があります。パーセントエンコーディングの実行方法の詳細については、「パーセントエンコーディング」をご参照ください。test
passwordデータベースアカウントのパスワード。
123456Aa
role_nameデータベースアカウントに付与するロール。
有効な値の詳細については、「データベースアカウントのロール」をご参照ください。
readAnyDatabase
role_database_nameロールが属するデータベースの名前。
たとえば、
{role: "readAnyDatabase", db: "admin"}は、admin データベースの readAnyDatabase ロールをアカウントに付与します。これにより、すべてのデータベースに対する読み取り専用権限が付与されます。admin
例:
admin データベースに属する test という名前のデータベースアカウントを作成し、パスワードを 123456Aa に設定し、readAnyDatabase ロールを test アカウントに付与します。
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データベースアカウントの名前。
アカウント名に
:/?#[]@などの特殊文字が含まれている場合は、特殊文字をパーセントエンコーディングする必要があります。パーセントエンコーディングの実行方法の詳細については、「パーセントエンコーディング」をご参照ください。test
passwordデータベースアカウントのパスワード。
123456Aa
role_nameデータベースアカウントに付与するロール。
有効な値の詳細については、「データベースアカウントのロール」をご参照ください。
readAnyDatabase
role_database_nameロールが属するデータベースの名前。
たとえば、
{role: "readAnyDatabase", db: "admin"}は、admin データベースの readAnyDatabase ロールをアカウントに付与します。これにより、すべてのデータベースに対する読み取り専用権限が付与されます。admin
例:
admin データベースに属する test という名前のデータベースアカウントを作成し、パスワードを 123456Aa に設定し、readAnyDatabase ロールを test アカウントに付与します。
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 | readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase など、admin データベースのすべての権限が含まれます。 |
ロールの詳細については、「組み込みロール」をご参照ください。