MongoDB用户管理操作

一、用户权限介绍

Mongodb中可以对用户进行读/写权限控制,主要有如下权限类型

权限类型(角色)说明
read赋予用户指定数据库读权限
readWrite赋予用户指定数据库读写权限
dbAdmin赋予用户在指定数据库中执行管理函数权限,如索引创建、删除,查看 统计或访问 system.profile
userAdmin赋予用户向 system.users 集合写入权限,可以在指定数据库里创建、删 除和管理用户
clusterAdmin赋予用户所有分片和复制集相关函数的 管理权限(admin库中可用)
readAnyDatabase赋予用户所有数据库的读权限(admin库中可用)
readWriteAnyDatabase赋予用户所有数据库的读写权限(admin库中可用)
userAdminAnyDatabase赋予用户所有数据库的 userAdmin 权限(admin库中可用)
dbAdminAnyDatabase赋予用户所有数据库的 dbAdmin 权限(admin库中可用)
root超级管理员(admin库中可用)

二、创建用户

2.1、创建管理员

对应用户管理员,通常只赋予用户操作权限,不授权DB的读写权限,所以授userAdminAnyDatabase权限即可。
管理员账户必须在admin库下创建,而MongoDB 3.0版本后没有默认admin库,需要先手动创建一个。
启动MongoDB后,在bin目录下执行./mongo命令,进入客户端命令窗口。

2.1.1、创建admin库

执行use admin

> use admin
switched to db admin
2.1.2、在admin库创建用户

执行db.createUser()可以创建用户,下面是执行语句格式
user表示新建的用户名
pwd表示用户密码
customData表示存放一些用户相关的自定义数据(可选)
roles是数组类型,表示给用户配置的权限

db.createUser({ 
	user: "<name>", 
	pwd: "<cleartext password>", 
	customData: { <any information> }, 
	roles: [ 
			{ role: "<role>", db: "<database>" } | "<role>", 
			... 
			]
 });

创建一个用户名为pandafox,密码为123456的用户管理员

> db.createUser({user:'pandafox',pwd:'123456',roles:[{role:'userAdminAnyDatabase',db:'admin'}]})
Successfully added user: {
	"user" : "pandafox",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		}
	]
}

2.1.3、查看用户

执行db.system.users.find(),可以查看到用户相关信息

> db.system.users.find()
{ "_id" : "admin.pandafox", "userId" : UUID("22b25314-a601-43b1-af71-f0582f896ece"), "user" : "pandafox", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "9vErokSyPS2tGCeSnSsWzA==", "storedKey" : "vWezRfXwv/fd1vuK/tRKtBDGAWc=", "serverKey" : "4KvyD2348chlHPWehP40O+RZNQQ=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "rJiUl4MKauibSnNXH3md4twF1umLiNDCiH87Kg==", "storedKey" : "qVmeLILDx+D90lw3Rvx7kAdppeU65jEeJ2U919ghqvc=", "serverKey" : "FYb/OmXDZiuGUFo+avcNnv0iszncv6OHrOILLAl/h7c=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
2.1.4、开启用户验证

1)在mongodb.conf配置文件中,增加auth启动参数,并设置为true

[root@localhost etc]# cat mongodb.conf 
dbpath=/usr/local/mongodb/data/db/
logpath=/usr/local/mongodb/log/mongodb.log
port=27017
fork=true
auth=true

2)重启MongoDB服务

2.1.5、效果验证

1)切换到admin库,未登录情况执行命令,提示无权限,说明admin库已经授权用户成功

> use admin
switched to db admin
> db.system.users.find()
Error: error: {
	"ok" : 0,
	"errmsg" : "command find requires authentication",
	"code" : 13,
	"codeName" : "Unauthorized"
}

2)登录,使用db.auth('user','pwd'),返回1表示登录成功

> db.auth('pandafox','123456')
1

3)再次执行db.system.users.find()会返回对应用户信息

2.2、创建普通用户

普通用户需要由管理员创建并授权。所以,我们首先做的就是用管理员账户登录数据库。

> use admin
switched to db admin
> db.auth('pandafox','123456')
1
2.2.1、创建test库
> use test
switched to db test
2.2.2、创建testfox用户

创建testfox用户,密码为123456,拥有test库的读写权限

> db.createUser({user:'testfox',pwd:'123456',roles:[{role:'readWrite',db:'test'}]})
Successfully added user: {
	"user" : "testfox",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "test"
		}
	]
}
2.2.3、效果验证

1)新开一个客户端,切换到test库,并登录

> use test
switched to db test
> db.auth('testfox','123456')
1

2)可见读写是ok的

> db.test.insert({name:'tom'})
WriteResult({ "nInserted" : 1 })
> db.test.find()
{ "_id" : ObjectId("5efbd7687e496edd01619a3d"), "name" : "tom" }

3)如果不登录是无法操作的

> db.test.insert({name:'tom'})
WriteCommandError({
	"ok" : 0,
	"errmsg" : "command insert requires authentication",
	"code" : 13,
	"codeName" : "Unauthorized"
})

三、修改用户

3.1、权限修改

使用 db.updateUser()函数进行修改

> db.updateUser("pandafox",{roles:[{"role":"userAdminAnyDatabase","db":"admin"},{"role":"dbAdminAnyDatabase","db":"admin"}]})
> show users
{
	"_id" : "admin.pandafox",
	"userId" : UUID("22b25314-a601-43b1-af71-f0582f896ece"),
	"user" : "pandafox",
	"db" : "admin",
	"roles" : [
		{
			"role" : "userAdminAnyDatabase",
			"db" : "admin"
		},
		{
			"role" : "dbAdminAnyDatabase",
			"db" : "admin"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1",
		"SCRAM-SHA-256"
	]
}

3.2、密码修改

1)使用db.updateUser()函数(有用户管理权限)
修改密码

db.updateUser('pandafox',{'pwd':'654321'})

断开连接,重新登录验证

> use admin
switched to db admin
> db.auth('pandafox','123456')
Error: Authentication failed.
0
> db.auth('pandafox','654321')
1

2)使用db.changeUserPassword()函数(有用户管理权限)
修改密码

> db.changeUserPassword('pandafox','123456')

断开连接,重新登录验证

> use admin
switched to db admin
> db.auth('pandafox','654321')
Error: Authentication failed.
0
> db.auth('pandafox','123456')
1

四、删除用户

使用 db.dropUser()函数删除用户,成功则返回true

> use test
switched to db test
> db.dropUser('testfox')
true
> show users
> 
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值