2017-02-08 8 views
1

Mongoインスタンスにアクセスするために管理者以外のアカウントを使用しています。私が使用しているアカウントには、show dbsコマンドを実行する権利がありません。また、そのアカウントにはadminデータベースへのアクセス権がありません。以下の出力を参照してください:MongoDBの現在のアカウントの認証済みデータベースのリストを取得する方法

show dbs 
2017-02-08T15:40:54.651+1100 E QUERY [main] Error: listDatabases failed:{ 
    "ok" : 0, 
    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }", 
    "code" : 13, 
    "codeName" : "Unauthorized" 
} : 
[email protected]/mongo/shell/utils.js:25:13 
[email protected]/mongo/shell/mongo.js:62:1 
[email protected]/mongo/shell/utils.js:755:19 
[email protected]/mongo/shell/utils.js:645:15 
@(shellhelp2):1:1 

私はこのアカウントにアクセスできるデータベースのリストを取得する方法をさまよいます。管理者アカウントを使用してすべての役割情報を取得できることはわかっています。しかし、私は管理者アカウントのパスワードを持っていません。私はこのアカウントクレデンシャルしか持っていません。この場合、特定のアカウントでどのようにすればよいですか?

答えて

0

MongoDB 3.4では、認証されたユーザーがlistDatabases管理者権限を持つロールなしでアクセス可能なデータベースの完全な(または部分的な)リストを表示することはできません。

配備の管理者アカウントにアクセスできる場合(またはその人の要求を行うことができる場合)は、この特権のみを付与するcreate a custom roleを作成することもできます。しかし、これは共有システムでの潜在的な情報開示を可能にします。listDatabasesの出力には現在、すべてのデータベース名とディスク上のサイズが含まれているためです。

たとえば、すべてのデータベースを一覧表示することができ、ユーザbobbytablesを作成するだけではwebscalexkcdデータベースへの読み取り/書き込みアクセスました:

use admin 
db.createUser({ 
    user: "bobbytables", 
    pwd: "drop;mic", 
    roles: [ 
     { role: "readWrite", db: "webscale" }, 
     { role: "readWrite", db: "xkcd" } 
    ] 
}) 
db.createRole({ 
    role: "listDatabases", 
    privileges: [ 
     { resource: { cluster: true }, actions: [ "listDatabases" ] } 
    ], 
    roles: [] 
}) 
db.grantRolesToUser("bobbytables", ["listDatabases"]) 

で/ upvoteを見るために、関連するオープン機能のリクエストがありますMongoDB発行トラッカー:SERVER-6898: Allow all authenticated users to run listDatabases提案された変更は、すべてのユーザーがlistDatabasesを実行できるようにすることですが、現在のユーザーに読み取り権限または書き込み権限があるデータベースに結果リストをフィルタリングします。

関連する問題