现在我的计算机中有一个mongoDB,位于c:\ mongodb \ bin。首先,它是身份验证禁用。所以当我按:
C:\ Windows \ system32> mongo
有一些警告:
2018-03-28T16:53.516 + 0800 I CONTROL [initandlisten] **警告:未为数据库启用访问控制。2018-03-28T16:53.516 + 0800 I CONTROL [initandlisten] **
对数据和配置的读取和写入访问不受限制。
因此,我尝试将访问控制添加到mongoDB。我所做的是:
Run Code Online (Sandbox Code Playgroud)C:\mongodb\bin>use admin db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )
但是在完成上述操作之后,仍然可以在没有用户名和密码的情况下登录MongoDb。即使在重新启动mongoDB服务之后,还是重新启动计算机。例如:
Run Code Online (Sandbox Code Playgroud)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服务,然后使用以下脚本再次安装此服务:
Run Code Online (Sandbox Code Playgroud)C:\mongodb\bin>sc delete MongoDB C:\mongodb\bin>mongod --dbpath C:\mongodb\data --logpath C:\mongodb\log\MongoDB.log --auth --install
但是,如果我使用这种方式创建auth mongoDB,则当我尝试不使用用户名和密码登录时,它将失败,如下所示:
Run Code Online (Sandbox Code Playgroud)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并使用身份验证以及用户名和pwd创建一个新的mongoDB?
如果我尝试设置一个不带身份验证的mongoDB和一个不带身份验证的代码,则会在下面出现异常。
Run Code Online (Sandbox Code Playgroud)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:服务器出现启动警告“未为数据库启用访问控制”
在上述情况下,我未能按照步骤4进行操作。
我有同样的例外。
因此,任何人都可以给我详细的介绍?
第一个示例中的身份验证不起作用的原因是,您尚未启用它。验证仅通过配置启用,而不通过数据库用户的存在启用。正如您已经演示的那样,启用身份验证的方法是使用--auth标志启动db 或确保在mongod.conf文件的安全性部分中启用了授权(如下所示)。
security:
authorization: enabled
Run Code Online (Sandbox Code Playgroud)
启用授权后,启动外壳程序时,必须使用以下选项在执行任何操作之前首先进行身份验证。
mongo <db> -u <username> -p <password>
例如,由于您已经在数据库myUserAdmin上创建了用户admin,则可以像这样进行身份验证:
mongo admin -u myUserAdmin -p abc123
或者,如果您已经使用just启动了shell mongo,则可以像这样进行身份验证:
1)首先切换到admin数据库。
use admin
2)然后验证您的用户:
db.auth('myUserAdmin ', 'abc123')
另外,请记住,userAdminAnyDatabase是非常强大的管理员角色,但是它仅允许对admin数据库(而不是为存储应用程序数据而创建的数据库)进行读/写访问。它还可以跨所有数据库启用管理员操作(例如createUser,createRole等),如果受到危害,可能会很危险。
因此,如果您试图创建一个要从非系统数据库读取/写入的用户,则应该为此创建一个不同的特定用户。例如...
1)对您的管理员用户进行身份验证(如上所示)。
2)创建一个新用户以从您的应用程序数据库读取/写入:
db.createUser(
{
user: <app db user>,
pwd: <password>,
roles: [ { role: "readWrite", db: <app db> } ]
}
);
Run Code Online (Sandbox Code Playgroud)
以下是有关每个mongodb角色及其行为方式的更多详细信息。
| 归档时间: |
|
| 查看次数: |
9382 次 |
| 最近记录: |