欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

linux下mongodb设置用户权限

程序员文章站 2022-06-03 20:46:07
...

为了保证线上mongodb数据库的安全性以及防止劫持,我们需要给数据库设置权限验证

1.创建数据库权限用户

进入mongodb的安装目录的bin下,从这里进入MongoDB shell

这个是个人的安装路径,仅供参考

cd /opt/modules/mongodb/bin

./mongo
复制代码

mongodb的用户分两种,一种是管理员,一种是普通用户。

管理员管理普通用户、普通用户管理数据库数据.

先创建管理员

下面是db的命令行操作:

>show dbs(可以列出数据库列表,方便查看)

>use admin 

>db.createUser({user:'user',pwd:'password',roles:[{role:'readWriteAnyDatabase',db:'admin'}]})

复制代码

创建指定数据库testdb的用户,并且分配权限

>use testdb (你要设置用户的数据库名称)

>db.createUser({user:'user1',pwd:'password1',roles:[{role:'readWrite',db:'testdb'}]})

>db.auth('user1', 'password1') 

//返回 1 ,则说明用户密码设置ok
复制代码
- 常用的role值记录: 
1. 数据库用户角色:read、readWrite; 
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin; 
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 
4. 备份恢复角色:backup、restore; 
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 
6. 超级用户角色:root 
7. 内部角色:__system 

- 相应的功能 
- Read:允许用户读取指定数据库 
- readWrite:允许用户读写指定数据库 
- dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile 
- userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 
- clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 
- readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 
- readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 
- userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 
- dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 
- root:只在admin数据库中可用。超级账号,超级权限

复制代码

2.重启mongodb服务进程

用户创建成功后,ctrl+c退出shell进程

这个时候需要重新启动mongodb服务,使权限生效

cd /opt/modules/mongodb/ 

//先关掉服务(killing process with pid XXX)
bin/mongod --config /opt/data/mongodb/data/mongodb.conf -shutdown

//开启权限认证服务,需要附加--auth
bin/mongod --config /opt/data/mongodb/data/mongodb.conf --auth
复制代码

这个时候,数据库的用户权限就加好了,可以在第一步的MongoDB shell中执行以下db命令,确保权限生效:

>use admin

>show collections
复制代码
[thread1] Error: listCollections failed: {
	"ok" : 0,
	"errmsg" : "not authorized on admin to execute command { listCollections: 1.0, filter: {} }",
	"code" : 13,
	"codeName" : "Unauthorized"
} :
复制代码

如果出现上面的错误,说明权限已经设置成功了,此时远程连接数据库将会报出权限错误

需要执行下面权限登陆,

>db.auth('user','password')

>show collections
//可以操作成功了
复制代码

3.删除用户

db.dropUser(<user_name>) 删除某个用户,接受字符串参数

示例:db.dropUser(“admin”)

4.修改密码

有2个方法:

1.这是添加用户的方法,但是如果用户名相同,密码不同的话,就会更新密码。

> db.addUser('user','new password')  
复制代码

2.db.changeUserPassword

db.changeUserPassword('user','new password');  
复制代码

5.忘记数据库密码?

如果忘记了密码,可以执行非权限认证:

//先关掉服务(killing process with pid XXX)
bin/mongod --config /opt/data/mongodb/data/mongodb.conf -shutdown

bin/mongod --config /opt/data/mongodb/data/mongodb.conf 
复制代码

再次执行,会得到admin数据库中的collections列表

>use admin

>show collections
复制代码

然后这个时候,操作权限恢复,可以再次进行用户的权限设置