我想设置用户名&我的MongoDB实例的密码验证,以便任何远程访问将要求用户名和&密码。我尝试了MongoDB网站上的教程并做了以下操作:
use admin
db.addUser('theadmin', '12345');
db.auth('theadmin','12345');
之后,我退出并再次运行mongo。而且我不需要密码来访问它。即使我远程连接到数据库,也不会提示我输入用户名和用户名。密码。
更新以下是我最终使用的解决方案
1) At the mongo command line, set the administrator:
use admin;
db.addUser('admin','123456');
2) Shutdown the server and exit
db.shutdownServer();
exit
3) Restart mongod with --auth
$ sudo ./mongodb/bin/mongod --auth --dbpath /mnt/db/
4) Run mongo again in 2 ways:
i) run mongo first then login:
$ ./mongodb/bin/mongo localhost:27017
use admin
db.auth('admin','123456');
ii) run & login to mongo in command line.
$ ./mongodb/bin/mongo localhost:27017/admin -u admin -p 123456
用户名&密码对mongodump
和mongoexport
的工作方式相同。
答案 0 :(得分:102)
设置用户后,您需要使用mongod
选项启动--auth
。
来自MongoDB网站:
使用
--auth
选项运行数据库(mongod进程)以启用 安全。您必须先将用户添加到admin db 使用--auth
启动服务器,或添加第一个用户 localhost接口。
答案 1 :(得分:59)
首先,在您的mongod配置文件(默认路径#auth=true
)中取消注释以/etc/mongo.conf
开头的行。这将启用对mongodb的身份验证。
然后,重启mongodb:sudo service mongod restart
答案 2 :(得分:59)
哇这么多复杂/令人困惑的答案。
这是 v3.4 。
1)启动没有访问控制的MongoDB。
mongod --dbpath /data/db
2)连接到实例。
mongo
3)创建用户。
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
4)停止MongoDB实例并使用访问控制再次启动它。
mongod --auth --dbpath /data/db
5)以用户身份连接并进行身份验证。
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
这很简单。我将以下https://docs.mongodb.com/manual/tutorial/enable-authentication/
愚蠢如果您想详细了解角色的实际内容,请点击此处了解详情:https://docs.mongodb.com/manual/reference/built-in-roles/
1)启动没有访问控制的MongoDB。
mongod --dbpath /data/db
2)连接到实例。
mongo
3)创建用户管理员。 以下内容在admin
身份验证数据库中创建用户管理员。用户是dbOwner
数据库上的some_db
而不是admin
数据库,这一点非常重要。
use admin
db.createUser(
{
user: "myDbOwner",
pwd: "abc123",
roles: [ { role: "dbOwner", db: "some_db" } ]
}
)
或者,如果您想创建一个管理员,该管理员是任何数据库的管理员:
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
4)停止MongoDB实例并使用访问控制再次启动它。
mongod --auth --dbpath /data/db
5)以admin
身份验证数据库的用户管理员身份进行身份验证,而不是some_db
身份验证数据库。 用户管理员是在admin
身份验证数据库中创建的,some_db
身份验证数据库中不存在该用户。
use admin
db.auth("myDbOwner", "abc123")
您现在已通过dbOwner
数据库身份验证为some_db
。所以现在如果您希望直接读取/写入/执行some_db
数据库,您可以更改为它。
use some_db
//...do stuff like db.foo.insert({x:1})
// remember that the user administrator had dbOwner rights so the user may write/read, if you create a user with userAdmin they will not be able to read/write for example.
有关角色的更多信息:https://docs.mongodb.com/manual/reference/built-in-roles/
如果您希望让其他用户不是用户管理员而且只是普通用户,请继续阅读以下内容。
6)创建普通用户。 此用户将在下面的some_db
身份验证数据库中创建。
use some_db
db.createUser(
{
user: "myNormalUser",
pwd: "xyz123",
roles: [ { role: "readWrite", db: "some_db" },
{ role: "read", db: "some_other_db" } ]
}
)
7)退出mongo shell,重新连接,以用户身份进行身份验证。
use some_db
db.auth("myNormalUser", "xyz123")
db.foo.insert({x:1})
use some_other_db
db.foo.find({})
答案 3 :(得分:42)
这个答案适用于Mongo 3.2.1 Reference
1号航站楼:
$ mongod --auth
2号航站楼:
db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]})
如果你想添加没有角色(可选):
db.createUser({user:"admin_name", pwd:"1234", roles:[]})
检查是否已通过身份验证:
db.auth("admin_name", "1234")
它应该给你:
1
其他:
Error: Authentication failed.
0
答案 4 :(得分:26)
以下是添加用户的JavaScript代码。
使用mongod
--auth = true
从mongo shell访问admin数据库并传递javascript文件。
mongo admin“Filename.js”
“Filename.js”
// Adding admin user
db.addUser("admin_username", " admin_password");
// Authenticate admin user
db.auth("admin_username ", " admin_password ");
// use database code from java script
db = db.getSiblingDB("newDatabase");
// Adding newDatabase database user
db.addUser("database_username ", " database_ password ");
现在用户添加完成,我们可以验证从mongo shell访问数据库
答案 5 :(得分:11)
https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
编辑mongo设置文件;
sudo nano /etc/mongod.conf
添加以下行:
security.authorization : enabled
重启服务
sudo service mongod restart
此致
答案 6 :(得分:7)
首先使用
在终端上运行mongoDBmongod
现在使用以下命令运行mongo shell
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
使用访问控制重新启动MongoDB实例。
mongod --auth
现在使用
从命令行验证自己mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
我是从
中读到的https://docs.mongodb.com/manual/tutorial/enable-authentication/
答案 7 :(得分:3)
使用特定数据库的密码创建用户以保护数据库访问:
use dbName
db.createUser(
{
user: "dbUser",
pwd: "dbPassword",
roles: [ "readWrite", "dbAdmin" ]
}
)
答案 8 :(得分:3)
您可以更改/etc/mongod.conf
。
之前
#security:
之后
security:
authorization: "enabled"
然后sudo service mongod restart
答案 9 :(得分:3)
您需要切换到您希望用户使用的数据库(而不是admin db)...
use mydatabase
请参阅此帖子以获取更多帮助...... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/
答案 10 :(得分:2)
这些步骤对我有用:
答案 11 :(得分:2)
一些答案在使用 --auth
命令行标志或设置配置文件属性之间发送混合信号。
security:
authorization: enabled
我想澄清这一方面。首先,必须通过在默认 db.createUser
数据库上执行 admin
查询来创建两种情况下的身份验证凭据(即用户/密码)。获得凭据后,可通过两种方式启用身份验证:
auth
标志适用的情况。开始 mongod
像:usr/bin/mongod --auth
mongod
像:usr/bin/mongod --config <config file path>
使用身份验证连接到 mongo shell:
mongo -u <user> -p <password> --authenticationDatabase admin
--authenticationDatabase
此处是创建用户的数据库名称。 mongorestore
、mongodump
等所有其他 mongo 命令都接受附加选项,即 -u <user> -p <password> --authenticationDatabase admin
答案 12 :(得分:1)
连接到mongoDB的最佳做法如下:
初始安装后,
use admin
然后运行以下脚本来创建管理员用户
db.createUser(
{
user: "YourUserName",
pwd: "YourPassword",
roles: [
{ role: "userAdminAnyDatabase", db: "admin" },
{ role: "readWriteAnyDatabase", db: "admin" },
{ role: "dbAdminAnyDatabase", db: "admin" },
{ role: "clusterAdmin", db: "admin" }
]
})
以下脚本将为数据库创建管理员用户。
使用
登录db.admin mongo -u YourUserName -p YourPassword admin
登录后,通过重复1到3,您可以创建N个具有相同管理员凭证或不同管理员凭证的数据库。
这允许您为在MongoDB中创建的不同集合创建不同的用户和密码
答案 13 :(得分:1)
use admin
db.createUser(
{
user: "admin",
pwd: "admin123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
mongod --auth
(对于Linux)可以编辑/etc/mongod.conf
文件以添加security.authorization : enabled
然后重新启动Mongd服务mongo -u "admin" -p "admin123" --authenticationDatabase "admin"
连接。就这样您可以查看this post来了解更多详细信息,并学习如何使用猫鼬进行连接。
答案 14 :(得分:1)
这是我在Ubuntu 18.04上所做的:
$ sudo apt install mongodb
$ mongo
> show dbs
> use admin
> db.createUser({ user: "root", pwd: "rootpw", roles: [ "root" ] }) // root user can do anything
> use lefa
> db.lefa.save( {name:"test"} )
> db.lefa.find()
> show dbs
> db.createUser({ user: "lefa", pwd: "lefapw", roles: [ { role: "dbOwner", db: "lefa" } ] }) // admin of a db
> exit
$ sudo vim /etc/mongodb.conf
auth = true
$ sudo systemctl restart mongodb
$ mongo -u "root" -p "rootpw" --authenticationDatabase "admin"
> use admin
> exit
$ mongo -u "lefa" -p "lefapw" --authenticationDatabase "lefa"
> use lefa
> exit
答案 15 :(得分:0)
创建新用户后,请不要忘记向用户授予grant
read/write/root
权限。你可以试试
cmd: db.grantRolesToUser('yourNewUsername',[{ role: "root", db: "admin" }])
答案 16 :(得分:0)
这是我为ubuntu 20.04和mongodb enterprise 4.4.2做的事情:
通过在终端中输入mongo
启动mongo shell。
使用管理数据库:
use admin
use admin
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
etc/mongod.conf
:security:
authorization: enabled
(可选)6.如果希望用户具有root用户访问权限,则可以在创建用户时指定它,例如:
db.createUser(
{
user: "myUserAdmin",
pwd: passwordPrompt(), // or cleartext password
roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
}
)
或者您可以使用以下方式更改用户角色:
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
答案 17 :(得分:0)
许多重复的答案,但我认为他们错过了一个重要的注释:
即使正确启用身份验证,您也可以在没有用户名/密码的情况下连接到 Mongo 数据库!
但是,您只能执行无害的命令,例如 db.help()
、db.getMongo()
、db.listCommands()
等。
$ mongo
MongoDB shell version v4.4.3
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("f662858b-8658-4e33-a735-120e3639c131") }
MongoDB server version: 4.4.3
mongos> db.getMongo()
connection to 127.0.0.1:27017
mongos> db
test
mongos> db.version()
4.4.3
mongos> db.runCommand({connectionStatus : 1})
{
"authInfo" : {
"authenticatedUsers" : [ ],
"authenticatedUserRoles" : [ ]
},
"ok" : 1,
"operationTime" : Timestamp(1618996970, 2),
"$clusterTime" : {
"clusterTime" : Timestamp(1618996970, 2),
"signature" : {
"hash" : BinData(0,"Kre9jvnJvsW+OVCl1QC+eKSBbbY="),
"keyId" : NumberLong("6944343118355365892")
}
}
}