错误:无法添加用户:未在测试中授权执行命令 createUser:
Posted
技术标签:
【中文标题】错误:无法添加用户:未在测试中授权执行命令 createUser:【英文标题】:Error: couldn't add user: not authorized on test to execute command createUser:错误:无法添加用户:未在测试中授权执行命令 createUser: 【发布时间】:2015-03-03 07:28:03 【问题描述】:我从 MongoDB 开始,我想通过用户/传递对 dbs 的访问。 我做的第一件事是创建和管理用户并使用 auth activate 启动 mongodb,这是我创建的用户:
db.getUser("admin")
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
"role" : "dbAdminAnyDatabase",
"db" : "admin"
,
"role" : "clusterAdmin",
"db" : "admin"
]
之后,我尝试使用以下命令创建用户:
use newdb
db.createUser(
user: "newuser",
pwd: "12345678",
roles: [ role: "readWrite", db: "newdb" ]
)
但是我收到了这个错误:
错误:无法添加用户:未在 newdb 上授权执行命令 createUser:“newuser”,密码:“xxx”,角色:[角色:“readWrite”,db: “newdb”],digestPassword:假,writeConcern: w:“多数”, wtimeout: 30000.0 在 src/mongo/shell/db.js:1004
我用谷歌搜索过,但只有两个结果,一个是中文的,另一个是不相关的,所以我有点迷茫。任何想法 ?看起来我的管理员用户没有权限,我使用以下命令访问 mongodb:
$mongo --port 27017 -u adminUser -p adminPass --authenticationDatabase admin
提前致谢。
【问题讨论】:
您没有在管理员用户中包含userAdmin
/userAdminAnyDatabase
角色。 dbAdminAnyDatabase
和 clusterAdmin
不包括用户管理权限。
这就是问题所在。嗯,那是我第一次接触 mongodb :) 非常感谢!
对我来说“使用管理员”命令很有帮助,因为我一开始没有选择数据库
【参考方案1】:
停止正在运行的 mongod 实例
mongod --config /usr/local/etc/mongod.conf --auth
然后开始没有--auth
like
mongod --config /usr/local/etc/mongod.conf
然后更新你的角色like
db.updateUser("admin",roles : ["userAdminAnyDatabase","userAdmin","readWrite","dbAdmin","clusterAdmin","readWriteAnyDatabase","dbAdminAnyDatabase"]);
现在再次使用 --auth
启动 mongod 并尝试。
这个想法是你必须在“admin”数据库下创建具有上述所有角色的用户。
但是这个用户不是其他数据库的一部分。所以一旦你创建了管理员用户,
然后以该管理员用户身份登录,
服务器:mongod --config /usr/local/etc/mongod.conf --auth
客户端:./mongodb/bin/mongo localhost:27017/admin -u adminUser -p 123456
use APPLICATION_DB
再次为此 APPLICATION_DB 创建一个新用户(例如 APP_USER)。这次对于这个应用程序用户,您只需要“dbOwner”角色。
db.createUser(user:"test", pwd:"test", roles:['dbOwner'])
现在您的应用程序必须使用此 APP_USER 和 APP_DB。
【讨论】:
谢谢,效果很好。我很确定你不需要';'在 db.updateUser 的末尾。【参考方案2】:我解决了同样的问题,只是以管理员身份退出并登录
mongo -u admin
输入您的管理员用户密码
登录后,照常创建用户
use newdb
db.createUser(
user: "newuser",
pwd: "12345678",
roles: [ role: "readWrite", db: "newdb" ]
)
【讨论】:
我如何知道我的管理员用户和密码? 对于 bitnami mongodb,用户必须到 ec2 实例的系统日志中找到用户和密码,如下所述:docs.bitnami.com/aws/faq/get-started/find-credentials @MithunSarkerShuvro 在提到的问题中,首先创建了管理员帐户。【参考方案3】:你应该退出当前的mongod进程并再次重新启动它,不带参数--auth
。
终端类型:mongod
mongod 进程启动后,您可以打开新的终端选项卡运行 mongo shell 命令:
mongo --shell
use new_your_database
db.createUser(
user: "mongo_admin",
pwd: "mongo_admin",
roles: [ "readWrite", "dbAdmin" ]
)
应该成功了....
【讨论】:
在 mongo db 上定义角色的正确方法是:"roles" : [ "role" : "readWriteAnyDatabase", "db" : "admin" , "role" : "dbAdminAnyDatabase", "db" : "admin" , "role" : "userAdminAnyDatabase", "db" : "admin" ]
【参考方案4】:
下面的命令说,你已经创建了管理员用户和密码。
db.getUser("admin")
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
"role" : "dbAdminAnyDatabase",
"db" : "admin"
,
"role" : "clusterAdmin",
"db" : "admin"
]
一旦您创建了管理员用户和密码,Mongo 将不允许您像以前登录的管理员用户一样进行任何架构更新。
使用新创建的管理员用户和密码来创建新用户或进行任何更新。它应该工作。
【讨论】:
也就是说一旦创建就不会被删除?【参考方案5】:就我而言:
1.停止mongodb:
$ service mongod stop
2.编辑这个/etc/mongod.conf:
security:
authorization: "disabled"
3.然后我重新启动服务:
$ service mongod start
4.添加用户:
$ mongo mongodb://localhost:27017
use admin
db.createUser(
user: "myUserAdmin",
pwd: "abc123",
roles: [ role: "userAdminAnyDatabase", db: "admin" ]
)
第 2 步中添加的 /etc/mongod.conf 中的 5.comment 行
6.重启mongod
service mongod restart
【讨论】:
【参考方案6】:如果您在这里遇到同样的问题并且有一个配置文件来触发 mongod 实例,那么请继续并退出 mongod 的运行过程,并在您的配置文件中确保您设置了 security.authorization : disabled,此外如果您有 keyFile(即;证书文件的路径),那么也注释该规范,现在使用该配置文件启动您的 mongod 进程 - 您应该能够使用 admin db 创建用户。
如果您在副本集上工作:一旦您完成创建主节点 + 用户,请确保您启动并连接到副本集(再次在内部连接到主节点),在这里您可以做任何事情较早创建的用户,但是当您再次直接连接到主节点以执行诸如 rs.initiate()/rs.status()/show dbs/show users 之类的一些命令时,最终会出现错误喜欢(没有经过身份验证的用户)。
security:
authorization: disabled
# keyFile: /opt/mongodb/keyfile
【讨论】:
以上是关于错误:无法添加用户:未在测试中授权执行命令 createUser:的主要内容,如果未能解决你的问题,请参考以下文章