ローカルと本番で同じ接続文字列を使用しています。接続文字列がmongodb://localhost/mydb
ユーザー名とパスワードは何ですか?このように保つのは安全ですか?
ローカルと本番で同じ接続文字列を使用しています。接続文字列がmongodb://localhost/mydb
ユーザー名とパスワードは何ですか?このように保つのは安全ですか?
回答:
デフォルトでは、mongodbには有効なアクセス制御がないため、デフォルトのユーザーまたはパスワードはありません。
アクセス制御を有効にするには、コマンドラインオプション--auth
またはsecurity.authorization構成ファイル設定のいずれかを使用します。
次の手順を使用するか、MongoDBドキュメントの「認証の有効化」を参照してください。
アクセス制御なしでMongoDBを起動します。
mongod --port 27017 --dbpath /data/db1
インスタンスに接続します。
mongo --port 27017
ユーザー管理者を作成します。
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
アクセス制御を使用してMongoDBインスタンスを再起動します。
mongod --auth --port 27017 --dbpath /data/db1
ユーザー管理者として認証します。
mongo --port 27017 -u "myUserAdmin" -p "abc123" \
--authenticationDatabase "admin"
@Camilo Silvaがすでに述べたことに加えて、データベースの作成、データベースの読み取り、書き込みなどへの無料アクセスを許可したいが、ルートロールを作成したくない場合は、次の方法で3番目のステップを変更できます。
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" } ]
}
)
2.6より前のMongoDBの場合、rootユーザーを追加するコマンドは次のとおりですaddUser
(例)
db.addUser({user:'admin',pwd:'<password>',roles:["root"]})
db.addUser
。2.6以降、現在のバージョン3.4.xでは、を使用してユーザーを作成できますdb.CreateUser
。
db.createUser
;)(docs.mongodb.com/manual/reference/method/db.createUser)
以前に提供された回答に加えて、1つのオプションは、データベースがすでにアクセス制御(--auth
スイッチ)で開始されている場合、「localhost例外」アプローチに従って最初のユーザーを作成することです。これを行うには、サーバーへのローカルホストアクセス権を持ってから、以下を実行する必要があります。
mongo
use admin
db.createUser(
{
user: "user_name",
pwd: "user_pass",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" }
]
})
MongoDBのドキュメントに記載されているように:
localhost例外を使用すると、アクセス制御を有効にしてから、システムに最初のユーザーを作成できます。localhostの例外を除いて、アクセス制御を有効にした後、localhostインターフェイスに接続し、adminデータベースに最初のユーザーを作成します。最初のユーザーには、userAdminまたはuserAdminAnyDatabaseロールを持つユーザーなど、他のユーザーを作成するための特権が必要です。localhost例外を使用する接続には、adminデータベースに最初のユーザーを作成するためのアクセス権しかありません。