How to secure MongoDB with username and password
我想为我的MongoDB实例设置用户名和密码验证,以便任何远程访问都会要求输入用户名和密码。 我尝试了MongoDB网站上的教程并做了以下事情:
1 2 3 | use admin db.addUser('theadmin', '12345'); db.auth('theadmin','12345'); |
在那之后,我退出并再次运行mongo。 而且我不需要密码来访问它。 即使我远程连接到数据库,也不会提示我输入用户名和密码。
更新这是我最终使用的解决方案
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | 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 |
用户名和密码对
设置用户后,需要使用
来自MongoDB网站:
Run the database (mongod process) with the
--auth option to enable
security. You must either have added a user to the admin db before
starting the server with--auth , or add the first user from the
localhost interface.
MongoDB身份验证
哇这里有很多复杂/混乱的答案。
这是v3.4的一部分。
简短的回答。
1)启动没有访问控制的MongoDB。
1 | mongod --dbpath /data/db |
2)连接到实例。
1 | mongo |
3)创建用户。
1 2 3 4 5 6 7 8 9 | use some_db db.createUser( { user:"myNormalUser", pwd:"xyz123", roles: [ { role:"readWrite", db:"some_db" }, { role:"read", db:"some_other_db" } ] } ) |
4)停止MongoDB实例并使用访问控制再次启动它。
1 | mongod --auth --dbpath /data/db |
5)以用户身份连接并进行身份验证。
1 2 3 4 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。
1 | mongod --dbpath /data/db |
2)连接到实例。
1 | mongo |
3)创建用户管理员。以下内容在
1 2 3 4 5 6 7 8 | use admin db.createUser( { user:"myDbOwner", pwd:"abc123", roles: [ { role:"dbOwner", db:"some_db" } ] } ) |
或者,如果您要创建一个管理员管理任何数据库:
1 2 3 4 5 6 7 8 | use admin db.createUser( { user:"myUserAdmin", pwd:"abc123", roles: [ { role:"userAdminAnyDatabase", db:"admin" } ] } ) |
4)停止MongoDB实例并使用访问控制再次启动它。
1 | mongod --auth --dbpath /data/db |
5)以
1 2 | use admin db.auth("myDbOwner","abc123") |
您现在通过
1 2 3 | 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)创建普通用户。此用户将在下面的
1 2 3 4 5 6 7 8 9 | use some_db db.createUser( { user:"myNormalUser", pwd:"xyz123", roles: [ { role:"readWrite", db:"some_db" }, { role:"read", db:"some_other_db" } ] } ) |
7)退出mongo shell,重新连接,以用户身份进行身份验证。
1 2 3 4 5 | use some_db db.auth("myNormalUser","xyz123") db.foo.insert({x:1}) use some_other_db db.foo.find({}) |
首先,取消注释mongod配置文件中以
然后,重启mongodb:
这个答案适用于Mongo 3.2.1
参考
1号航站楼:
1 | $ mongod --auth |
2号航站楼:
1 | db.createUser({user:"admin_name", pwd:"1234",roles:["readWrite","dbAdmin"]}) |
如果你想添加没有角色(可选):
1 | db.createUser({user:"admin_name", pwd:"1234", roles:[]}) |
检查是否经过身份验证:
1 | db.auth("admin_name","1234") |
它应该给你:
1 | 1 |
否则:
1 2 | Error: Authentication failed. 0 |
这是一个添加用户的JavaScript代码。
用
从mongo shell访问管理数据库并传递javascript文件。
mongo admin"Filename.js"
"Filename.js"
1 2 3 4 5 6 7 8 | // 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访问数据库
https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
编辑mongo设置文件;
1 | sudo nano /etc/mongod.conf |
添加行:
1 | security.authorization : enabled |
重启服务
1 | sudo service mongod restart |
问候
首先使用终端在终端上运行mongoDB
1 | mongod |
现在运行mongo shell使用以下命令
1 2 3 4 5 6 7 8 | use admin db.createUser( { user:"myUserAdmin", pwd:"abc123", roles: [ { role:"userAdminAnyDatabase", db:"admin" } ] } ) |
使用访问控制重新启动MongoDB实例。
1 | mongod --auth |
现在使用命令行验证自己
1 | mongo --port 27017 -u"myUserAdmin" -p"abc123" --authenticationDatabase"admin" |
我是从中读到的
https://docs.mongodb.com/manual/tutorial/enable-authentication/
按顺序执行以下步骤
- 使用CLI创建用户
1 2 3 4 5 6 7 8 | use admin db.createUser( { user:"admin", pwd:"admin123", roles: [ { role:"userAdminAnyDatabase", db:"admin" },"readWriteAnyDatabase" ] } ) |
-
启用身份验证,您的操作方式因您的操作系统而异,如果您使用的是Windows,只需
mongod --auth ,如果是linux,您可以编辑/etc/mongod.conf 文件以添加security.authorization : enabled ,然后重新启动mongd服务 -
通过cli
mongo -u"admin" -p"admin123" --authenticationDatabase "admin" 连接。而已
你可以查看这篇文章,了解更多细节,并学习使用mongoose连接它。
使用特定数据库的密码创建用户以保护数据库访问:
1 2 3 4 5 6 7 8 9 | use dbName db.createUser( { user:"dbUser", pwd:"dbPassword", roles: ["readWrite","dbAdmin" ] } ) |
您需要切换到您希望用户使用的数据库(而不是admin db)...
有关更多帮助,请参阅此帖子... https://web.archive.org/web/20140316031938/http://learnmongo.com/posts/quick-tip-mongodb-users/
这些步骤对我有用:
使用管理员
db.createUser(
{
user:"myUserAdmin",
pwd:"abc123",
角色:[{role:"userAdminAnyDatabase",db:"admin"}]
}
)
mongo --port 27017 -u"myUserAdmin"-p"abc123"--authenticationDatabase"admin"
mongo --port 27017
使用管理员
db.auth("myUserAdmin","abc123"
这就是我在Ubuntu 18.04上所做的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | $ 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 |
连接到mongoDB的最佳实践如下:
初次安装后,
然后运行以下脚本以创建管理员用户
{
user:"YourUserName",
pwd:"YourPassword",
roles: [
{ role:"userAdminAnyDatabase", db:"admin" },
{ role:"readWriteAnyDatabase", db:"admin" },
{ role:"dbAdminAnyDatabase", db:"admin" },
{ role:"clusterAdmin", db:"admin" }
]
})
以下脚本将为DB创建admin用户。
使用登录到db.admin
登录后,您可以通过重复1到3来创建具有相同管理员凭证或不同的N个数据库。
这允许您为在MongoDB中创建的不同集合创建不同的用户和密码
创建新用户后,请不要忘记对用户的