现在我的计算机上有一个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
我得到了同样的例外。
所以任何人都可以给我一个细节灵魂?
答案 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
数据库进行读/写访问(而不是您为应用程序存储数据而创建的数据库) )。它还可以在所有数据库中启用管理操作(例如createUser
,createRole
等),如果受到攻击可能会造成危险。
因此,如果您尝试创建一个用户来读取/写入非系统数据库,那么您应该为此创建一个不同的特定用户。例如......
1)验证您的管理员用户(如上所示)。
2)创建一个新用户来读取/写入您的应用数据库:
db.createUser(
{
user: <app db user>,
pwd: <password>,
roles: [ { role: "readWrite", db: <app db> } ]
}
);
Here详细介绍了每个mongodb角色及其行为方式。