mongoシェルは、ApsaraDB for MongoDBが提供するデータベース管理ツールです。 ApsaraDB for MongoDBでは、mongoシェルを使用してデータベースアカウントを管理できます。 このトピックでは、mongoシェルを使用してデータベースアカウントを作成および照会する方法について説明します。
前提条件
ApsaraDB for MongoDB インスタンスを作成済み。 インスタンスの作成に使用できる方法は、インスタンスのアーキテクチャによって異なります。 詳細については、以下のトピックをご参照ください。
インスタンスはmongoシェルを使用して接続されています。 接続方法は、インスタンスアーキテクチャによって異なります。 詳細については、以下のトピックをご参照ください。
注意事項
データベースアカウントはデータベース内で一意である必要があります。
データベースアカウントの作成
mongoシェルを使用して作成されたデータベースアカウントは、ApsaraDB for MongoDBコンソールの [アカウント] ページに表示されません。
mongoシェルを初めて使用してデータベースアカウントを作成するときは、adminデータベースでインスタンスのルートアカウントを認証する必要があります。
adminデータベースに切り替えます。
use admin
説明このコマンドは変更なしで使用できます。
rootアカウントを認証します。
構文:
db.auth("root" 、"password")
password
は、rootアカウントのパスワードを示します。例:
db.auth("root","123456Aa")
データベースアカウントを作成します。
方法1: 特定のデータベースに切り替えて、データベースにアカウントを作成します。
データベースアカウントは、アカウントが作成されたデータベースに属します。
use database_name
コマンドを使用してデータベースを切り替えることができます。構文:
db.createUser({user: "user_name", pwd: "password", roles:[{role: "role_name", db: "role_database_name"}]})
構文で使用されるパラメーターを次の表に示します。
パラメーター
説明
例
user_name
データベースアカウントの名前。
名前に特定の特殊文字が含まれている場合は、パーセントエンコードする必要があります。 これらの特殊文字には、
: / ? # [ ] @
. 詳細については、「パーセント-エンコーディング」をご参照ください。test
パスワード
データベースアカウントのパスワードを設定します。
123456Aa
role_name
データベースアカウントに割り当てられたロール。
詳細については、このトピックの「データベースアカウントの役割」を参照してください。
readAnyDatabase
role_database_name
ロールが作成されるデータベース。
たとえば、
{role: "readAnyDatabase", db: "admin"}
では、adminデータベースのアカウントにreadAnyDatabaseロールを割り当てるように指定します。 この場合、アカウントはインスタンス内のすべてのデータベースに対して読み取り専用の権限を持ちます。admin
例:
adminデータベースに "test" という名前のアカウントを作成し、アカウントのパスワードを123456Aaに設定し、readAnyDatabaseロールをアカウントに割り当てます。
db.createUser({user: "test", pwd: "123456Aa", roles:[{role: "readAnyDatabase", db: "admin"}]})
アカウントの作成が成功すると、次の結果が返されます。
正常に追加されたユーザー: { "user" : "test" 、 "roles" : [ { "role" : "readAnyDatabase" 、 "db" : "admin" } ] }
方法2: データベースを切り替えずにデータベースアカウントを作成します。
次のいずれかのコマンドを実行して、データベースアカウントを作成できます。
コマンド 1
構文:
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
パスワード
データベースアカウントのパスワードを設定します。
123456Aa
role_name
データベースアカウントに割り当てられたロール。
詳細については、このトピックの「データベースアカウントの役割」を参照してください。
readAnyDatabase
role_database_name
ロールが作成されるデータベース。
たとえば、
{role: "readAnyDatabase", db: "admin"}
では、adminデータベースのアカウントにreadAnyDatabaseロールを割り当てるように指定します。 この場合、アカウントはインスタンス内のすべてのデータベースに対して読み取り専用の権限を持ちます。admin
例:
adminデータベースに "test" という名前のアカウントを作成し、アカウントのパスワードを123456Aaに設定し、readAnyDatabaseロールをアカウントに割り当てます。
db.getMongo().getDB("admin").createUser({user: "test", pwd: "123456Aa", roles: [{role: "readAnyDatabase", db: "admin"}]})
アカウントの作成が成功すると、次の結果が返されます。
正常に追加されたユーザー: { "user" : "test" 、 "roles" : [ { "role" : "readAnyDatabase" 、 "db" : "admin" } ] }
コマンド 2
構文:
db.getSiblingDB("database_name").createUser({user: "user_name", pwd: "password", roles: [{role: "role_name", db: "role_database_name"}]})
構文で使用されるパラメーターを次の表に示します。
パラメーター
説明
例
database_name
アカウントが属するデータベースの名前。
admin
user_name
データベースアカウントの名前。
名前に特定の特殊文字が含まれている場合は、パーセントエンコードする必要があります。 これらの特殊文字には、
: / ? # [ ] @
. 詳細については、「パーセント-エンコーディング」をご参照ください。test
パスワード
データベースアカウントのパスワードを設定します。
123456Aa
role_name
データベースアカウントに割り当てられたロール。
詳細については、このトピックの「データベースアカウントの役割」を参照してください。
readAnyDatabase
role_database_name
ロールが作成されるデータベース。
たとえば、
{role: "readAnyDatabase", db: "admin"}
では、adminデータベースのアカウントにreadAnyDatabaseロールを割り当てるように指定します。 この場合、アカウントはインスタンス内のすべてのデータベースに対して読み取り専用の権限を持ちます。admin
例:
adminデータベースに "test" という名前のアカウントを作成し、アカウントのパスワードを123456Aaに設定し、readAnyDatabaseロールをアカウントに割り当てます。
db.getSiblingDB("admin").createUser({user: "test" 、pwd: "123456Aa" 、roles: [{role: "readAnyDatabase" 、db: "admin"}]})
アカウントの作成が成功すると、次の結果が返されます。
正常に追加されたユーザー: { "user" : "test" 、 "roles" : [ { "role" : "readAnyDatabase" 、 "db" : "admin" } ] }
データベースアカウントの照会
インスタンスに属するすべてのデータベースアカウントを照会するには、次の方法を使用します。
以下のコマンドを実行します。
db.getCollection("system.us ers").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" : "" "" admin " } ] }
{"_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2 ****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS ****", "storedKey" "serverKey" : "Tf1zyJ ****/3/P3UMM47rr8 ****"} 、"SCRAM-SHA-256" : { "iterationCount" : 15000、"salt" : "wcWRhs9VXEsmNWtd7ZD **** + NbYXx8ugJ3p2 ****" 、"storedKey" : "A5GiH ****/tf70hakRY3U3joho3GrtFWQ *" 、" データベース: "*** 、" "" "" roles: "" db " : " admin " } ] }
特定のデータベースに属するすべてのデータベースアカウントを照会するには、次のいずれかの方法を使用します。
use database_name
コマンドを使用してデータベースを切り替えることができます。
方法1: データベースでクエリコマンドを実行する
ショーユーザー
説明このコマンドは変更なしで使用できます。
次の応答が返されます。
{ "_id" : "admin.root" 、 "userId" : UUID("b079b4c8-0e34-4e0d-90f9-75741414 ****") 、 "user" : "root" 、 "db" : "admin" 、 "roles" : [ { "role" : "root" 、 "db" : "admin" } ], "mechanism" : [ "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" } ], "mechanism" : [ "SCRAM-SHA-1" 、 「SCRAM-SHA-256」 ] }
方法2: adminデータベースでクエリコマンドを実行します。
構文:
db.getCollection("system.us ers").find({db: "database_name"})
database_name
は、アカウントを照会するデータベースの名前を示します。例:
db.getCollection("system.us ers").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" : "" "" admin " } ] } {"_id" : "admin.test", "userId" : UUID("769ea9a1-6224-470e-8162-19a62fa2 ****"), "user" : "test", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "8fyXsIUgs6aQmafhTDrS ****", "storedKey" "serverKey" : "Tf1zyJ ****/3/P3UMM47rr8 ****"} 、"SCRAM-SHA-256" : { "iterationCount" : 15000、"salt" : "wcWRhs9VXEsmNWtd7ZD **** + NbYXx8ugJ3p2 ****" 、"storedKey" : "A5GiH ****/tf70hakRY3U3joho3GrtFWQ *" 、" データベース: "*** 、" "" "" roles: "" db " : " admin " } ] }
特定のデータベースに属する単一のデータベースアカウントを照会するには、次の方法を使用します。
単一のデータベースアカウントを照会するために使用されるコマンドは、adminデータベースで実行する必要があります。
構文:
db.getCollection("system.us").find({user: "user_name", db: "database_name"})
パラメーター
user_name
: データベースアカウントの名前。database_name
: データベースアカウントが属するデータベースの名前。
例:
db.getCollection("system.us").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" " : " Q*n "" Tf1zyJJ ****/3/P3UMM47rr8 **** "} 、" SCRAM-SHA-256 " : { " iterationCount " : 15000、" salt " : " wcWRhs9VXEsmNWtd7ZD **** + NbYXx8ugJ3p2 **** "、" storedKey " : " A5GiH ****/tf70hakRY3U3joho3GrtFWQ **** /"" "" " : " ""} 、"roles" {*" "" "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など、管理データベースで使用可能なすべてのロールによって付与されるアクセス許可が含まれます。 |
詳細については、「組み込みロール」をご参照ください。