mongodb身份验证禁用并启用问题

时间:2018-03-28 10:13:32

标签: mongodb

现在我的计算机上有一个mongoDB,位于c:\ mongodb \ bin。首先,它是auth disable。所以当我按下时:

  

C:\ Windows \ System32下>蒙戈

有一些警告:

  

2018-03-28T16:53:43.516 + 0800 I CONTROL [initandlisten] **警告:   未对数据库启用访问控制。   2018-03-28T16:53:43.516 + 0800 I CONTROL [initandlisten] **
  读取和访问数据和配置不受限制。

所以我尝试将访问控制添加到mongoDB。我做的是:

C:\mongodb\bin>use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: "abc123",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

但是在我上面做之后,我仍然可以在没有用户名和密码的情况下登录MongoDb。即使我重新启动mongoDB服务,或重新启动计算机。例如:

C:\Windows\system32>mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
Server has startup warnings:
2018-03-28T16:53:43.515+0800 I CONTROL  [initandlisten]
2018-03-28T16:53:43.516+0800 I CONTROL  [initandlisten] ** WARNING: Access contr
ol is not enabled for the database.
2018-03-28T16:53:43.516+0800 I CONTROL  [initandlisten] **          Read and wri
te access to data and configuration is unrestricted.
2018-03-28T16:53:43.516+0800 I CONTROL  [initandlisten]
2018-03-28T16:53:43.516+0800 I CONTROL  [initandlisten] Hotfix KB2731284 or late
r update is not installed, will zero-out data files.
2018-03-28T16:53:43.516+0800 I CONTROL  [initandlisten]
> show dbs
admin  0.000GB
local  0.000GB
> use admin
switched to db admin
>

我可以将mongodb更改为身份验证的唯一方法是删除mongodb服务并使用以下脚本再次安装此服务:

C:\mongodb\bin>sc delete MongoDB  
C:\mongodb\bin>mongod --dbpath C:\mongodb\data --logpath C:\mongodb\log\MongoDB.log --auth --install

但是,如果我使用这种方式创建auth mongoDB,当我尝试在没有用户名和密码时登录时,它将如下所示:

C:\Windows\system32>mongo
MongoDB shell version v3.4.9
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.9
> show dns
2018-03-28T17:59:06.344+0800 E QUERY    [thread1] Error: don't know how to show
[dns] :
shellHelper.show@src/mongo/shell/utils.js:906:11
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1
> show dbs
2018-03-28T17:59:10.073+0800 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases:
1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:769:19
shellHelper@src/mongo/shell/utils.js:659:15
@(shellhelp2):1:1
>

所以我无法为这个mongoDB创建用户和密码。我怎么能登录?

任何人都可以告诉我如何逐步设置我的mongoDB进行身份验证?或者删除一个旧的mongoDB并使用authutication创建一个新的mongoDB,还有用户名和密码?

如果我尝试设置一个没有auth mongoDB并授权一个,我将在下面得到一个例外。

C:\Windows\system32>mongod --auth --port 27017 --dbpath C:\mongodb\data
2018-03-28T16:49:43.874+0800 I CONTROL  [initandlisten] MongoDB starting : pid=7
988 port=27017 dbpath=C:\mongodb\data 64-bit host=wolf-PC
.....
2018-03-28T16:49:43.877+0800 I STORAGE  [initandlisten] exception in initAndList
en: 98 Unable to create/open lock file: C:\mongodb\data\mongod.lock Another program is using this file.... Is a mongod instance already running?, terminating

我查了一下问题: MongoDB: Server has startup warnings ''Access control is not enabled for the database''

我在上面的删除中没有跟上step4。

MongoDB: Server has startup warnings

我得到了同样的例外。

所以任何人都可以给我一个细节灵魂?

1 个答案:

答案 0 :(得分:3)

您的第一个示例中的身份验证无效的原因是您尚未启用它。 Auth仅由配置启用,而不是由db用户启用。正如您已经演示的那样,启用auth的方法是使用--auth标志启动数据库,或者确保在mongod.conf文件的安全部分中启用授权(如下所示)。

security:
  authorization: enabled

启用授权后,在启动shell时,必须先使用以下选项执行任何操作之前进行身份验证。

mongo <db> -u <username> -p <password>

例如,由于您已在myUserAdmin数据库上创建了admin用户,因此您可以进行以下身份验证:

mongo admin -u myUserAdmin -p abc123

或者,如果您已经使用mongo启动了shell,那么您可以像这样进行身份验证:

1)首先切换到admin db。

use admin

2)然后验证您的用户:

db.auth('myUserAdmin ', 'abc123')

另外,请记住userAdminAnyDatabase是一个非常强大的管理员角色,但它只允许对admin数据库进行读/写访问(而不是您为应用程序存储数据而创建的数据库) )。它还可以在所有数据库中启用管理操作(例如createUsercreateRole等),如果受到攻击可能会造成危险。

因此,如果您尝试创建一个用户来读取/写入非系统数据库,那么您应该为此创建一个不同的特定用户。例如......

1)验证您的管理员用户(如上所示)。

2)创建一个新用户来读取/写入您的应用数据库:

db.createUser(
  {
    user: <app db user>,
    pwd: <password>,
    roles: [ { role: "readWrite", db: <app db> } ]
  }
);

Here详细介绍了每个mongodb角色及其行为方式。