我想为我的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
的作用相同。
发布于 2011-02-03 07:54:40
在设置用户后,您需要使用--auth
选项启动mongod
。
从MongoDB站点:
使用--auth
选项运行数据库(
进程)以启用安全性。在使用
--auth
启动服务器之前,您必须已将用户添加到管理员数据库,或者从本地主机界面添加第一个用户。
发布于 2017-03-21 22:25:25
这里有这么多复杂/令人困惑的答案。
这是从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/
如果你想了解更多关于这些角色的实际作用,请阅读此处:
1)不带访问控制启动MongoDB。
mongod --dbpath /data/db
2)连接实例。
mongo
3)创建用户管理员。下面将在admin
身份验证数据库中创建一个用户管理员。用户是some_db
数据库而不是admin
数据库上的dbOwner
,记住这一点很重要。
use admin
db.createUser(
{
user: "myDbOwner",
pwd: "abc123",
roles: [ { role: "dbOwner", db: "some_db" } ]
}
)
或者,如果您想创建一个对任何数据库都是admin的admin:
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")
现在,您已作为some_db
数据库上的dbOwner
进行身份验证。因此,现在如果您希望直接对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({})
发布于 2013-11-04 21:38:04
首先,取消注释mongod配置文件(默认路径/etc/mongod.conf
)中以#auth=true
开头的行。这将启用mongodb的身份验证。
然后重启mongodb:sudo service mongod restart
https://stackoverflow.com/questions/4881208
复制相似问题