我正在尝试向我的 MongoDB 添加授权。我正在使用 MongoDB 2.6.1 在 Linux 上完成所有这些工作。我的 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
用户有权执行任何操作,以便
然后他可以创建其他用户并授予他们更具体的权限。
我也在为同样的问题摸不着头脑,并且在添加第一个管理员用户时将角色设置为 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。
这有点令人困惑 - 我相信您需要授予自己 readWrite 权限才能查询数据库。具有 dbadmin 或 useradmin 的用户可以管理数据库(包括授予自己额外的权限),但不能执行查询或写入数据。
所以授予自己 readWrite ,你应该没问题 -
http://docs.mongodb.org/manual/reference/built-in-roles/#readWrite
也许如何更改当前用户的快速示例对某人有所帮助。这就是我真正想要的。
根据@JohnPetrone 的建议,我使用 grantRolesToUser 向我的管理员用户添加了 readWrite 角色
> use admin
> db.grantRolesToUser("admin",["readWrite"])
> show collections
system.users
system.version
Error: not authorized on admin to execute command
您可以尝试:使用 --authenticationDatabase 标志会有所帮助。
mongo --port 27017 -u "admin" -p "password" --authenticationDatabase "admin"
我知道这个答案在这个线程中来得很晚,但我希望你检查一下。
您收到该错误的原因是基于您授予用户的特定角色,您现在已经收集到了,是的,给该用户角色 root
将解决您的问题,但您必须首先了解这些角色的确切作用在将它们授予用户之前。
在教程中,您授予用户 userAdminAnyDatabase
角色,这基本上使用户能够管理所有数据库的用户。您尝试对用户执行的操作超出了其角色定义。
root
角色在其定义中包含此角色以及 readWriteAnyDatabase
、dbAdminAnyDatabase
和其他角色,使其成为超级用户(主要是因为您可以使用它执行任何操作)。
您可以查看角色定义,了解您需要为用户提供哪些角色才能完成某些任务。 https://docs.mongodb.com/manual/reference/built-in-roles/ 不建议让所有用户都成为超级用户 :)
show collections
做的事情),您应该赋予它该能力,而不是其他 roles: [ { role: "read", db: "admin" } ]
。请注意,此处的角色已读取,这是特定于数据库的,除此之外您不能做任何事情。查看此链接了解其他角色 docs.mongodb.com/manual/reference/built-in-roles
这是一个简单的问题。
重要的是您必须切换目标数据库而不是管理员。
使用你的数据库
检查您的数据库身份验证
显示用户
如果您得到一个 {} 空对象,这就是问题所在。你只需要输入
db.createUser({用户:“您的用户”,密码:“密码”,角色:[“readWrite”,“dbAdmin”]})
或者
db.grantRolesToUser('yourUser',[{ role: "dbAdmin", db: "yourDB" }])
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"
]
}
)
我遇到了这个问题,因为我的 MongoDB Compass 中的主机名指向 admin 而不是我的项目。通过在主机名后添加 /projectname 来修复 :) 试试这个:
在 MongoDB atlas 网站中选择你的项目 Connect/Connect with MongoDB Compass 下载 Compass/Choose your OS I used Compass 1.12 or later 复制 Compass 1.12 或更高版本下的连接字符串。打开 MongoDB Compass/Connect(左上角)/Connect To Connection String detected/Yes/ 在主机名后附加您的项目名称:cluster9-foodie.mongodb.net/projectname 使用 POSTMAN 连接并测试 API。成功。
在您的代码中也使用相同的连接字符串:
之前:mongodb+srv://projectname:password@cluster9-foodie.mongodb.net/admin 之后:mongodb+srv://projectname:password@cluster9-foodie.mongodb.net/projectname
祝你好运。
我在这个线程中遇到了类似的问题,但我的问题是我使用了集合名称而不是数据库名称。
我在 Windows 环境中遇到了类似的问题:我已经安装了 Bitnami DreamFactory,它还安装了另一个在系统启动时启动的 MongoDb。我正在运行我的 MongoDbService(启动时没有任何错误),但在浪费了很多时间后我注意到我实际上是在连接 Bitnami 的 MongoDb 服务。请看一下您的服务器上是否没有运行另一个 mongoDB 实例。
祝你好运!
此外,请注意,如果您的 mongo shell 客户端无法正确连接到 mongod
实例,您可能会收到此类“Permission Denied”错误。
确保您的客户端通过检查连接端口打开了连接,而且您在 mongod
中使用的端口未在使用中。您可以在 shell 和进程中使用 --port <port>
参数来设置不同的端口。
使用 mydb db.createUser( { user: "test", pwd: "secret", roles: [ "readWrite", "dbAdmin"],passwordDigestor:"server" } )
同意您必须获得管理员数据库的身份验证,并且至少需要一个具有正确权限的角色,这将避免来自数据库的“本地主机异常”(这是用于 mongoDB 的本地托管),尽管您已经准备好了一切并且仍然在访问使用 Mongo Atlas 创建的 mongoDB 时,几乎每个命令都没有获得授权异常,那么这里是您可能知道原因的地方,为什么:
如果您在 mongo Atlas 上托管 mongoDB,请检查此内容:
https://docs.atlas.mongodb.com/unsupported-commands/
我在 Centos 7 for MongoDB 4.2 上按照这些步骤操作。 (远程用户)
更新 mongod.conf 文件
vi /etc/mongod.conf
net:
port: 27017
bindIp: 0.0.0.0
security:
authorization: enabled
启动MongoDB服务恶魔
systemctl start mongod
打开 MongoDB 外壳
mongo
在 shell 上执行这个命令
use admin
db.createUser(
{
user: 'admin',
pwd: 'YouPassforUser',
roles: [ { role: 'root', db: 'admin' } ]
}
);
远程根用户已创建。现在,您可以使用开发机器上的任何 MongoDB GUI 工具来测试此数据库连接。喜欢Robo 3T
如果您使用的是 Atlas,请注意您无法通过 mongo shell 创建用户。
我在墙上撞了一会儿,直到我遇到了这个:https://www.mongodb.com/community/forums/t/cant-create-a-root-user-from-mongo-shell/101369
对于 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
这可能是因为你没有在 mongodb.conf 中设置 noAuth=true
# Turn on/off security. Off is currently the default
noauth = true
#auth = true
设置后使用重启服务
服务 mongod 重启
不定期副业成功案例分享
userAdminAnyDatabase
而不是root
?db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
db.grantRolesToUser('admin',[{ role: "root", db: "admin" }])
,这让我感到困惑。我无权运行命令,但我可以运行命令使自己成为 root,然后然后运行该命令。很奇怪:Suse admin;
然后db.auth("username", "password");
希望这对某人有所帮助。