错误:无法添加用户:未被授权在测试中执行命令{ createUser: ... }。

37

我正在学习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:“majority”, wtimeout:30000.0}}在src/mongo/shell/db.js:1004

我已经搜索了一下,但只有两个结果,一个是中文的,另一个与此无关,所以我有点迷茫。你有任何想法吗?看起来我的管理员用户没有特权,我使用以下命令访问mongodb:

$mongo --port 27017 -u adminUser -p adminPass  --authenticationDatabase admin

提前感谢。


3
在管理员用户中,您没有包含 userAdmin/userAdminAnyDatabase 角色。dbAdminAnyDatabaseclusterAdmin 不包括用户管理权限。 - wdberkeley
那就是问题所在了。好吧,那是我第一次遇到mongodb :) 非常感谢! - brb
对我来说,“use admin”命令很有帮助,因为我一开始没有选择数据库。 - Eugene
登录管理员账号"mongo -u admin"以执行管理任务。 - tufac2
6个回答

26

停止运行的mongod实例

mongod --config /usr/local/etc/mongod.conf --auth

然后不带--auth启动,如下:

mongod --config /usr/local/etc/mongod.conf

然后更新您的角色类似

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的末尾不需要“;”符号。 - wuxmedia

22

我解决了同样的问题,只需退出并以管理员身份登录即可。

mongo -u admin

输入您的管理员密码。 登录后,按照您通常提到的方式创建一个用户。
use newdb
db.createUser(
  {
    user: "newuser",
    pwd: "12345678",
    roles: [ { role: "readWrite", db: "newdb" } ]
  }
)

2
我该如何知道我的管理员用户名和密码? - Mithun Sarker Shuvro
对于 Bitnami MongoDB,用户必须转到 EC2 实例的系统日志中查找用户名和密码,如此处所述:https://docs.bitnami.com/aws/faq/get-started/find-credentials/。 - Ashish Sharma
在问题中提到,首先创建管理员帐户。 - Bala

8

在我的情况下:

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" } ]
  }
)

5.第二步中添加的/etc/mongod.conf的注释行

6.重新启动mongod

 service mongod restart

5

您应该退出当前的mongod进程,然后再次启动它,但不要使用参数--auth

在终端上输入:mongod

当mongod进程启动后,您可以打开一个新的终端标签来运行mongo shell命令:

mongo --shell
use new_your_database
db.createUser(
   {
     user: "mongo_admin",
     pwd: "mongo_admin",
     roles: [ "readWrite", "dbAdmin" ]
   }
)

应该成功地完成这项任务,如果您遇到任何技术问题,请参考以下步骤:


在MongoDB上定义角色的正确方法是: "roles" : [ { "role" : "readWriteAnyDatabase", "db" : "admin" }, { "role" : "dbAdminAnyDatabase", "db" : "admin" }, { "role" : "userAdminAnyDatabase", "db" : "admin" } ] - shiva

4
下面的命令表示,您已经创建了管理员用户名和密码。
db.getUser("admin")      
{    
        "_id" : "admin.admin",   
        "user" : "admin",    
        "db" : "admin",    
        "roles" : [    
                {    
                        "role" : "dbAdminAnyDatabase",    
                        "db" : "admin"    
                },    
                {    
                        "role" : "clusterAdmin",    
                        "db" : "admin"    
                }    
        ] }    
}    

一旦您创建了管理员用户和密码,Mongo将不允许您像以前登录的普通管理员用户那样进行任何模式更新。

请使用新创建的管理员用户和密码创建新用户或进行任何更新。这应该有效。


那么它的意思是一旦创建,就不会被移除吗? - MartianMartian

1
如果您遇到相同的问题并且有一个配置文件来触发mongod实例-那么请退出正在运行的mongod进程,并在您的配置文件中确保您禁用了security.authorization,此外,如果您有keyFile(即证书文件路径),则也请将其注释掉,现在使用该配置文件启动mongod进程-您应该能够使用admin db创建用户。
如果您在副本集上工作:一旦您完成了创建主节点和用户的操作,请确保初始化并连接到副本集(这会再次内部连接到主节点),在这里,您可以对先前创建的用户进行任何操作,但是当您直接连接到主节点以执行一些命令,例如rs.initiate()/rs.status()/show dbs/show users时,您将会收到类似“没有经过身份验证的用户”的错误。
security:
  authorization: disabled
# keyFile: /opt/mongodb/keyfile

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接