我正在尝试为MongoDB添加授权
我在Linux上用MongoDB 2.6.1做这一切
我的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
用户被授权做任何事情以便这样做
然后,他可以创建其他用户并为他们提供更多特定权限。
答案 0 :(得分:348)
我也在同样的问题上摸不着头脑,在添加第一个管理员用户后,我将角色设置为root后,一切正常。
use admin
db.createUser(
{
user: 'admin',
pwd: 'password',
roles: [ { role: 'root', db: 'admin' } ]
}
);
exit;
如果您已经创建了admin
用户,则可以更改此角色:
use admin;
db.grantRolesToUser('admin', [{ role: 'root', db: 'admin' }])
有关完整的身份验证设置参考,请参阅我在互联网上研究数小时后编译的steps。
答案 1 :(得分:32)
这有点令人困惑 - 我相信你需要给自己readWrite来查询数据库。具有dbadmin或useradmin的用户可以管理数据库(包括授予您自己的其他权限),但无法执行查询或写入数据。
所以给自己readWrite,你应该没事 -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
答案 2 :(得分:30)
也许一个关于如何更改当前用户的简单示例对某人有帮助。这就是我真正想要的。
根据@JohnPetrone的建议,我使用readWrite
向我的管理员用户添加了grantRolesToUser个角色> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
答案 3 :(得分:20)
您可以尝试:使用--authenticationDatabase标志帮助。
mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
答案 4 :(得分:7)
我知道这个问题的答案在这个帖子中已经很晚了,但我希望你能看出来。
您收到该错误的原因是基于您授予用户的特定角色,您现在已经收集了该角色,是的,为该用户提供角色root
将解决您的问题,但您必须先了解在将这些角色授予用户之前,这些角色的作用是什么。
在教程中,您向用户授予了userAdminAnyDatabase
角色,该角色基本上使用户能够管理所有数据库的用户。
您尝试对用户执行的操作超出了其角色定义。
root
角色将此角色包含在其定义中,以及readWriteAnyDatabase
,dbAdminAnyDatabase
和其他角色,使其成为超级用户(主要是因为您可以对其执行任何操作)。
您可以查看角色定义,了解为用户完成某些任务所需的角色。 https://docs.mongodb.com/manual/reference/built-in-roles/ 不建议所有用户使用超级用户:)
答案 5 :(得分:1)
我遇到了一个类似的问题,但是我的问题是我使用了集合名称而不是数据库名称。
答案 6 :(得分:0)
此外,请注意,如果您的mongo shell客户端无法正确连接到mongod
实例,则可以收到此类" Permission Denied"错误。
确保客户端通过检查连接端口打开连接,并确保您在mongod
中使用的端口未使用。您可以在shell和进程中使用--port <port>
参数设置不同的端口。
答案 7 :(得分:0)
这是一个简单的问题。
使用yourDB
显示用户
db.createUser( { 用户:“ yourUser”, pwd:“密码”, 角色:[“ readWrite”,“ dbAdmin”] })
或
db.grantRolesToUser('yourUser',[{角色:“ dbAdmin”,db:“ yourDB”}])
答案 8 :(得分:0)
我遇到了这个问题,因为 MongoDB Compass 中的主机名指向我的项目的管理员。通过在主机名后面添加/ projectname来修复: 试试这个:
在代码中也使用相同的连接字符串:
祝你好运。
答案 9 :(得分:0)
使用mydb
db.createUser({user:“ test”,pwd:“ secret”,角色:[“ readWrite”,“ dbAdmin”],passwordDigestor:“ server”})
答案 10 :(得分:0)
我有相同的案例问题,在我的案例中,这是由变量 mongodb_security_authorization 引起的,该变量设置为“已启用” 基本上,我通过对此进行了更改来解决此问题:
mongodb_security_authorization: "enabled"
对此:
mongodb_security_authorization: "disabled"
答案 11 :(得分:0)
同意您必须通过admin db身份验证,并且至少需要具有正确特权的角色,这样可以避免DB出现“本地主机异常”(这是mongoDB本地托管的),尽管您拥有所有权限在访问使用 Mongo Atlas 创建的mongoDB的同时,几乎在每个命令上都放置&仍未获得未经授权的异常,然后在这里您可能会知道原因:
,如果您已将mongoDB托管在 mongo Atlas 上,也请进行以下检查:
答案 12 :(得分:0)
Use Admin :
use admin
Create a super user :
db.createUser(
{
user: "master",
pwd: "test@123",
roles: [
{
role: "readWriteAnyDatabase",
db: "admin"
},
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "clusterAdmin",
"db" : "admin"
},
"userAdminAnyDatabase"
]
}
)
答案 13 :(得分:0)
更新mongod.conf文件
vi /etc/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: enabled
启动MongoDB服务守护程序
systemctl start mongod
打开MongoDB shell
mongo
在外壳上执行此命令
use admin
db.createUser(
{
user: 'admin',
pwd: 'YouPassforUser',
roles: [ { role: 'root', db: 'admin' } ]
}
);
已创建远程root用户。现在,您可以使用开发人员机器上的任何MongoDB GUI工具来测试此数据库连接。像Robo 3T
答案 14 :(得分:0)
对于 MongoDB shell v4.2.8版本,我尝试了多种方法来使用auth备份数据库,我的赢家解决方案是
mongodump -h <your_hostname> -d <your_db_name> -u <your_db_username> -p <your_db_password> --authenticationDatabase admin -o /path/to/where/i/want
答案 15 :(得分:0)
我在Windows环境中遇到了类似的问题:我安装了Bitnami DreamFactory,它还安装了另一个在系统启动时启动的MongoDb。我正在运行我的MongoDbService(启动时没有任何错误),但我注意到在失去了很多时间之后我实际连接了Bitnami的MongoDb服务。请查看服务器上是否没有运行mongoDB的其他实例。
祝你好运!
答案 16 :(得分:-7)
这可能是因为你没有在mongodb.conf中设置noAuth = true
# Turn on/off security. Off is currently the default
noauth = true
#auth = true
设置完成后,使用
重新启动服务service mongod restart