MongoDB使用用户名密码验证的设置方法(windows下)

之前整理的mongo基本语法都是在没有用户名密码验证的条件下测试的,因为mongo与mysql不同,它安装的时候默认是没有权限控制的额,也就是说任何人,只要知道了host和port都可以登陆数据库并操作。
如果想要设置用户,需要自己另行配置。
一开始按照网上的一些方法没有设置成功,主要是因为版本和权限设置的一些问题,所以这里我把记录下来,以便之后查找。



mongo中,每个数据库都可以有自己的管理员账号,只要在响应的数据库中使用如下语法即可添加一个用户:

db.createUser({user : "用户名" , pwd : "密码" , roles : [ { role : "角色" ,db : "数据库"} , ....]})

这样,该用户使用用户名密码就可以操作这一个数据库。但是,如果是在admin数据库中创建的用户,那么可以操作任何数据库,也就是也有最高权限。

*设置一个最高权限的用户的步骤

①首先在无需验证的情况下进入admin数据库:

>use admin
switched to db admin
>db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"__system",db:"admin"}]})

这里注意:
1、有的博客教程中说使用 db.addUser("root","123456") 这个函数,但是在3.6版本中已经不支持这个方法了,只能使用createUser函数
2、在设置roles的时候,一定要加上 __system (有两个下划线) 这个角色。

②重新安装windows服务:
因为之前使用mongod安装windows服务的时候默认是不采用验证的,所以在设置了数据库用户之后需要重新安装一下
进入到mongo的bin目录下面

D:\MongoDB\Server\3.6\bin>mongod --auth --logpath "D:\MongoDB\Server\3.6\logs\mongo.log" --dbpath "D:\MongoDB\Server\3.6\data" --reinstall

这里logpath是日志文件目录,dbpath是数据文件的目录 --auth选项表示使用验证,如果想要不适用验证,只要不用 --auth 选项再重新安装一次服务就可以了。
另外,再重新安装服务之前最好 net stop MongoDB,否则可能出错

③开启MongoDB服务,进入数据库之后使用用户名密码验证:

D:\MongoDB\Server\3.6\bin>mongo.exe
MongoDB shell version v3.6.2
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.2
> use admin
switched to db admin
> show tables
2018-01-29T14:41:39.010+0800 E QUERY    [thread1] Error: listCollections failed: {
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listCollections: 1.0, filter: {}, $db: \"admin\" }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:941:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:953:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:964:16
shellHelper.show@src/mongo/shell/utils.js:806:9
shellHelper@src/mongo/shell/utils.js:703:15
@(shellhelp2):1:1
> db.auth("root","123456")
1
> show tables
system.users
system.version
>

可以看到,未验证的时候执行 show dbs 命令会报错:not authorized on admin to execute command { listCollections: 1.0, filter: {}, $db: \"admin\" }
此时使用验证语句: db.auth("root","123456") 返回1表示验证成功,然后就可以执行各种命令



展开阅读全文

没有更多推荐了,返回首页