MongoDB - 用户权限配置

在上一节中我介绍 了怎么安装配置MongoDB --> MongoDB - MongoDB简单安装(v3.6) ,如果还没有安装mongodb的请参考。

MongoDB 在默认情况下是没有权限的,不需要用户名密码,只要能连接到服务器,就可以使用MongoDB。但是一般在真正的部署中,必然是要开启权限的,毕竟安全第一嘛。mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。创建管理用户的的步骤就是先第一次没有认证启动服务,创建管理账号,第二次才认证启动服务。

在windows下,下面的操作就都用 管理员启动CMD

1. 先创建一个管理账号(这时先不开启权限认证,要不然你就进不去了,嘻嘻)

进入到安装目录的bin目录下,执行 mongo 命令连接数据库。

使用admin数据库

>use admin

在admin数据库中创建admin管理员用户, 并赋予角色(角色对应着的权限哦)

db.createUser(
  {
    user: "admin",
    pwd: "123456",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

这时还可以使用命令查看创建的user,比如show users, db.auth("admin", "123456") 等

>show users
>db.auth("admin","123456")

当然我们还可以查看一下这个数据库的信息


> db.system.users.find();
{ "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "cFISfpbm04pmIFpqiL340g==", "storedKey" : "WG1DSEEEHUZUBjsjsnEA4RFVY2M=", "serverKey" : "9Lm+IX6l9kfaE/4C25/ghsQpDkE=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
> 
> db.system.indexes.find();
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.version" }
{ "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.users" }
{ "v" : 1, "unique" : true, "key" : { "user" : 1, "db" : 1 }, "name" : "user_1_db_1", "ns" : "admin.system.users" }
> 
> db.system.version.find();
{ "_id" : "authSchema", "currentVersion" : 5 }
> 

2. 如果项目中有一个数据库需要管理,比如test,那我们可以在这个时候为它增加管理用户

>use test

>db.createUser(
		{
			user: "admin",
			pwd: "123456",
			roles: [{ role: "readWrite", db: "test" },{ role: "dbAdmin", db: "test" }]
		}
	)

3. 开启数据库权限认证

先停止数据库服务

C:\Windows\system32>net stop mongodb
MongoDB 服务正在停止.
MongoDB 服务已成功停止。

修改数据库配置 mongod.config(上一节创建的配置文件),在末尾加上 auth=true

扫描二维码关注公众号,回复: 3212842 查看本文章
#数据库路径
dbpath=D:\database\MongoDB\Server\3.6\data
#日志输出文件路径
logpath=D:\database\MongoDB\Server\3.6\log\mongodb.log
#错误日志采用追加模式
logappend=true
#启用日志文件,默认启用
journal=true
#过滤掉无用的日志信息,若需要调试使用请设置为false
quiet=true
#端口号 默认为27017
port=27017
auth=true

重新启动服务就可以了。这时用mongo客户端连接数据库,默认登录,发现无权操作了:

MongoDB shell version v3.6.6-77-ge7b3f4dbcd
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.6.6-77-ge7b3f4dbcd
> show dbs
2018-08-23T10:31:48.969+0800 E QUERY    [thread1] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0, $db: \"admin\" }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1
shellHelper.show@src/mongo/shell/utils.js:849:19
shellHelper@src/mongo/shell/utils.js:739:15
@(shellhelp2):1:1
>

那需要先切换到admin数据库 ,然后再验证登录。 (直接登录也是不可以的,必须先切换)

> db.auth("admin","123456")
Error: Authentication failed.
0
> use admin
switched to db admin
> db.auth("admin","123456")
1
> show dbs
admin    0.000GB
test  0.000GB
config   0.000GB
local    0.000GB
>

4. 连接mongodb

双击mongodb bin 目录下的mongo.exe, 默认连接的是test数据库。

那么连接其他数据库,直接用以下的指令。

> mongo -u admin -p 123456 localhost:27017/admin

5. 更新数据库的权限

db.updateRole("admin",{ roles:[{ role: "readWrite",db: "test"},{ role: "dbOwner",db: "test"}]}})

还有一些信息请参考 MongoDB 基础(六)安全性(权限操作)

猜你喜欢

转载自blog.csdn.net/maihilton/article/details/81975478
今日推荐