MongoDBに認証を追加しようとしています。
私はMongoDB 2.6.1を使ってこれらすべてをLinux上で行っています。
私のmongod.confファイルは古い互換フォーマットです。
(これはインストールに付属している方法です)。
1)(3)の説明に従って管理者ユーザーを作成しました。
http://docs.mongodb.org/manual/tutorial/add-user-administrator/ /
2)この行のコメントを外してmongod.confを編集しました
auth = true
3)最後にmongodサービスを再起動し、次のようにログインしようとしました。
/usr/bin/mongo localhost:27017/admin -u sa -p pwd
4)私は接続することができますが、それは接続時にこれを言います。
MongoDB Shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB Shell!
The current date/time is: Thu May 29 2014 17:47:16 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
5)今、私が作成したこのsa
ユーザーはまったく権限を持っていないようです。
root@test02:~# mc
MongoDB Shell version: 2.6.1
connecting to: localhost:27017/admin
Welcome to the MongoDB Shell!
The current date/time is: Thu May 29 2014 17:57:03 GMT-0400 (EDT)
Error while trying to show server startup warnings: not authorized on admin to execute command { getLog: "startupWarnings" }
[admin] 2014-05-29 17:57:03.011 >>> use admin
switched to db admin
[admin] 2014-05-29 17:57:07.889 >>> show collections
2014-05-29T17:57:10.377-0400 error: {
"$err" : "not authorized for query on admin.system.namespaces",
"code" : 13
} at src/mongo/Shell/query.js:131
[admin] 2014-05-29 17:57:10.378 >>> use test
switched to db test
[test] 2014-05-29 17:57:13.466 >>> show collections
2014-05-29T17:57:15.930-0400 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 13
} at src/mongo/Shell/query.js:131
[test] 2014-05-29 17:57:15.931 >>>
問題は何ですか?この手順全体を3回繰り返した
MongoDBのドキュメントで指定されているとおりにすべて行ったと思います。しかし、うまくいきません。
私はこのsa
ユーザーが何かをする権限を与えられることを期待していました。
彼は他のユーザーを作成し、それらにもっと具体的な権限を与えることができます。
私も同じ問題について私の頭を悩ませていました、そして最初の管理ユーザーを追加するときにrootになるようにロールを設定した後にすべてがうまくいきました。
use admin
db.createUser(
{
user: "admin",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
}
);
exit;
完全な認証設定のリファレンスについては、 steps を参照してください。
ちょっとややこしいです - データベースをクエリするにはreadWriteを自分自身に付与する必要があると思います。 dbadminまたはuseradminを持つユーザーはデータベースを管理できます(自分自身に追加の権限を付与することを含む)が、クエリを実行したりデータを書き込むことはできません。
それであなた自身にreadWriteを与えてください、そしてあなたは大丈夫であるべきです -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
おそらく、現在のユーザーを変更する方法の簡単な例が誰かに役立つでしょう。これが私が実際に探していたものです。
@JohnPetroneのアドバイスに従い、adminユーザーに readWrite roleを grantRolesToUserで追加しました
> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
試すことができます:--authenticationDatabaseフラグを使用すると役立ちます。
mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
私はこの答えがこのスレッドの中で本当に遅くなっているのを知っています、しかしあなたがそれをチェックアウトすることを願っています。
このエラーが発生した理由は、今までに収集したユーザーに割り当てた特定のロールに基づいています。そのユーザーにroot
ロールを割り当てることで問題は解決しますが、最初にこれらのロールが何をするかを理解してくださいユーザーにそれらを。
チュートリアルでは、基本的にすべてのデータベースのユーザーを管理する権限をユーザーに付与するuserAdminAnyDatabase
ロールをユーザーに付与しました。あなたがあなたのユーザに対してやろうとしていたことは、そのロール定義の範囲外でした。
root
ロールは、このロールとそれをスーパーユーザーにするreadWriteAnyDatabase
、dbAdminAnyDatabase
およびその他のロールを含む定義に含まれています(基本的にそれを使って何でもできるからです)。
役割の定義を調べて、特定のタスクを完了するためにどの役割をユーザーに与える必要があるかを確認できます。 https://docs.mongodb.com/manual/reference/built-in-roles/ すべてのユーザーをスーパーユーザーにすることはお勧めできません:)
私はここでWindows環境で同様の問題を抱えていました:私はBitnami DreamFactoryをインストールしました、そしてそれはシステム起動時に開始される別のMongoDbもインストールします。私は自分のMongoDbServiceを実行していました(それはエラーなしで開始されました)が、実際にBitnamiのMongoDbサービスに接続していることに多くの時間を失った後に気付きました。サーバー上でmongoDBの他のインスタンスが実行されていないかどうかを確認してください。
がんばろう!
mydbを使う
db.createUser({user: "test"、pwd: "secret"、役割:["readWrite"、 "dbAdmin"]、passwordDigestor: "server"})
簡単な質問です。
yourDBを使う
ユーザーを表示
db.createUser({user: "yourUser"、pwd: "password"、役割:["readWrite"、 "dbAdmin"]})
または
db.grantRolesToUser( 'yourUser'、[{ロール: "dbAdmin"、db: "yourDB"}]))
また、mongo Shellクライアントがmongod
インスタンスに正しく接続できない場合は、このような "Permission Denied"エラーが発生する可能性があります。
接続ポートを確認してクライアントが接続を開くことを確認しますが、mongod
で使用しているポートが使用されていないことも確認します。シェルとプロセスの両方で--port <port>
パラメーターを使用して、別のポートを設定できます。
私のプロジェクトでは、 MongoDB Compass のホスト名がadminを指していたため、この問題が発生しました。ホスト名の後に/ projectnameを追加することで解決されます。
コードにも同じ接続文字列を使用します。
がんばろう。
Admin dbに対して認証を取得する必要があり、DBからの「ローカルホスト例外」(これはオンプレミスでホストされているmongoDBの場合)を回避する正しい権限を持つロールが少なくとも必要であることに同意しましたが、すべてを適切に実行し、まだMongo Atlasを使用して作成されたmongoDBにアクセスしながら、ほとんどすべてのコマンドで許可されていない例外を取得する場合、ここで理由、理由を知ることができます:
また、mongoDBをmongo Atlasでホストしている場合もこれを確認します。
私は同じケースの問題を抱えていましたが、私の場合は変数mongodb_security_authorizationが原因で、基本的に「有効」に設定されていました。
mongodb_security_authorization: "enabled"
それに:
mongodb_security_authorization: "disabled"