我从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”,pwd:“xxx”,roles:[{role:“readWrite”,db: “newdb”}],digestPassword:false,writeConcern:{w:“most”, wtimeout:30000.0}}在src / mongo / shell / db.js:1004
我用谷歌搜索了它,但只有两个结果,一个在中文,另一个没有相关,所以我有点迷路。任何的想法 ?看起来我的管理员用户没有权限,我使用以下命令访问mongodb:
$mongo --port 27017 -u adminUser -p adminPass --authenticationDatabase admin
提前致谢。
答案 0 :(得分:11)
停止正在运行的mongod实例
mongod --config /usr/local/etc/mongod.conf --auth
然后开始没有--auth
之类的
mongod --config /usr/local/etc/mongod.conf
然后更新您的角色like
db.updateUser(“admin”,{roles: [ “userAdminAnyDatabase”, “userAdmin”, “读写”, “dbAdmin”, “clusterAdmin”, “readWriteAnyDatabase”, “dbAdminAnyDatabase”]});
现在再次使用--auth
启动mongod并尝试。
我们的想法是你必须使用上面提到的所有ROLES在“admin”数据库下创建用户。
但此用户不是其他数据库的一部分。所以,一旦你创建了管理员用户,
然后以该管理员用户身份登录,
SERVER: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。
答案 1 :(得分:7)
我解决了同样的问题,只是以管理员身份退出并登录
mongo -u admin
输入管理员用户密码
登录后,按照您提到的方式创建用户
use newdb
db.createUser(
{
user: "newuser",
pwd: "12345678",
roles: [ { role: "readWrite", db: "newdb" } ]
}
)
答案 2 :(得分:4)
下面的命令说,您已经创建了管理员用户和密码。
db.getUser("admin")
{
"_id" : "admin.admin",
"user" : "admin",
"db" : "admin",
"roles" : [
{
"role" : "dbAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "clusterAdmin",
"db" : "admin"
}
] }
}
创建管理员用户和密码后,Mongo将不允许您像以前登录过的管理员用户那样进行任何架构更新。
使用新创建的管理员用户和密码来创建新用户或进行任何更新。它应该工作。
答案 3 :(得分:0)
你应该退出当前的mongod进程并重新启动它而不使用参数--auth。
在终端类型:mongod
启动mongod进程后,可以打开新的终端选项卡运行mongo shell命令:
mongo --shell
use new_your_database
db.createUser(
{
user: "mongo_admin",
pwd: "mongo_admin",
roles: [ "readWrite", "dbAdmin" ]
}
)
它应该成功完成....
答案 4 :(得分:0)
如果您遇到相同的问题并且有一个配置文件来触发mongod实例-然后继续并退出mongod的运行过程&在您的配置文件中,请确保您设置了安全性。authorization:禁用,此外如果您拥有keyFile(即cert文件的路径),然后也注释该规范,现在就可以使用该配置文件开始mongod进程-您应该可以使用admin db创建用户。
如果您处理副本集:创建完主节点和用户后,请确保启动并连接到副本集(该副本集又在内部连接到主节点),在这里您可以执行任何操作较早创建的用户,但是当您再次直接连接到主节点以执行一些命令,例如 rs.initiate()/ rs.status()/ show dbs / show users 时,您最终会出错(没有经过身份验证的用户)。
security:
authorization: disabled
# keyFile: /opt/mongodb/keyfile
答案 5 :(得分:0)
就我而言:
1.stop 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