[Linux下MongoDB权限管理]
一,MongoDB权限介绍
1)mongodb安装完后,默认是不需要用户密码即可登录的,但是往往数据库方面我们会处于安全性的考虑而设置用户密码,
2)MongoDB是没有默认管理员账号的,所以要先添加管理员账号,在开启权限认证。
3)切换到admin数据库,添加的账号才是管理员的账号。
4)用户只能在用户所在的数据库登录,包括管理员账号。
5)管理员可以管理所有的数据库,但是不能直接管理其它数据库,要先在admin数据库中认证才可以,也是为了 安全性考虑。
二 ,MongoDB添加管理员账户
进入cli管理界面,只有进入此页面之后我们才能够对其进行操作。
2、添加管理用户(mongoDB 没有无敌用户root,只有能管理用户的用户 userAdminAnyDatabase)
利用mongo命令连接mongoDB服务器端:
> use admin
switched to db admin
> db.createUser( {user: “pfnieadmin”,pwd: “123456”,roles: [ { role: “userAdminAnyDatabase”, db: “admin” } ]});
成功后,你将会看到:
注:添加完用户后可以使用show users或db.system.users.find()查看已有用户.
3、添加完管理用户后,关闭MongoDB,并使用权限方式再次开启MongoDB,这里注意不要使用kill直接去杀掉mongodb进程,(如果这样做了,请去data/db目录下删除mongo.lock文件),可以使用db.shutdownServer()关闭.
4、使用权限方式启动MongoDB
在配置文件中添加:auth=true , 然后启动:
5、进入mongo shell,使用admin数据库并进行验证,如果不验证,是做不了任何操作的。
> use admin
> db.auth(“pfnieadmin”,“123456”) #认证,返回1表示成功
我们即可在>后面进行操作。连接数据库并且切换到用户表下
1,连接成功之后首先我们输入命令:show dbs,我们发现其系统中内置了一个数据库名字为local(如果大家查询出来还有一个admin数据库,那是因为你使用的是低版本的MongoDB),admin库是不存在的,需要我们自己创建。
show dbs
admin 0.078GB
local 0.078GB
(use admin) 使用此命令创建一个admin数据库,权限管理就要使用admin数据库,此命令也是切换数据库的命令
use admin switched to db admin
创建一个用户
添加用户
db.createUser( {
user: "pan",
pwd: "pan",
roles: [ { role: "root", db: "admin" } ]
});
登录
db.auth('pan','pan');
(show collections) 切换到admin库之后,使用show collections查询,我们发现该数据库下包含了一个system.user和system.version表,我们主要来看system.user表。
show collections
system.indexes
system.users
system.version
(db.system.users.find())首先使用命令查询system.user表中是含有数据,输入命令:db.system.users.find(),
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JF9GXDlm-1618817466776)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20210418133317933.png)]
三MongoDB的roles角色简单介绍
1, MongoDB内置角色官网文档介绍:http://docs.mongoing.com/manual-zh/reference/built-in-roles.html
关于MongoDB的内置角色,我们大概可以分为以下几种来简单说一下
Database User Roles(数据库用户角色):read、readWrite
Database Administration Roles(数据库管理角色):dbAdmin、dbOwner、userAdmin
Culster Administration Roles(管理员组,针对整个系统进行管理):clusterAdmin、clusterManager、clusterMonitor、hostManager
Backup and Restoration Roles(备份还原角色组):backup、restore
All-Database Roles(所有数据库角色):readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
Superuser Roles(超级管理员):root、(dbOwner、userAdmin、userAdminAnyDatabase这几个角色角色提供了任何数据任何用户的任何权限的能力,拥有这个角色的用户可以在任何数据库上定义它们自己的权限)
Internal Role(内部角色,一般情况下不建议设置):__system
关于上面每一个角色的意义是什么,请自行去官网或者这篇文章http://www.cnblogs.com/SamOk/p/5162767.html查看
\1. 在上面我们在admin数据库下为pfnieadmin用户建立了一个userAdminAnyDatabase角色,使用这个用户来管理用户,可以通过这个角色来创建、删除角色。首先我们切换到admin下授权用户登录(重新连接之后的操作),命令如下:
step1: use admin
step2: db.auth("pfnieadmin","123456") 返回1则表示授权成功,否则授权失败。
step3: show dbs 验证授权是否成功。
\2. 授权成功之后,首先我们创建一个数据库(kgpc),给kgpc数据库创建一个read和readwrtite账号。命令如下:
step1: use kgpc
step2: db.createUser({
user:"jackread",
pwd:"123456",
roles:[
{role:"read",db:"kgpc"}
]
})
step3: 添加读写用户,命令如下:
db.createUser({
user:"jackreadwrite",
pwd:"123456",
roles:[
{role:"readWrite",db:"kgpc"}
]
})
step4: 最后查询我们添加的用户如下所示,则说明我们对其读和读写用户添加完成,执行这个命令,注意下kgpc数据库下面.
\3. 上面我们创建了两个账号之后,首先我们来验证读写账号:
3.1 首先我们进入到kgpc数据库,然后对jackread进行验证,之后对kgpc数据库下的country表进行插入,会提示我们插入失败,没有权限,如下如所示:
use kgpc
db.auth("jackread","123456");
db.country.insert({"id":"1","name":"中国"});
3.2 从上面看到提示我们权授权失败,这时候用我们创建的jackreadwrite(读写)账号授权,然后在进行插入和查询,则发现插入以及查询均成功,如图所示:
use kgpc
db.auth(“jackreadwrite”,“123456”);
db.country.insert({“id”:“1”,“name”:“中国”});
db.country.find();
3.3 从上面我们看到对于读写权限验证没有问题。
\4. 上面测试了读写权限,下面我们测试一下读权限(read)
4.1 继续上面的操作,然后对jackread进行验证,之后对kgpc数据库下的country表查询,如图所示:
id":"1","name":"中国"});
db.country.find();
3.3 从上面我们看到对于读写权限验证没有问题。
\4. 上面测试了读写权限,下面我们测试一下读权限(read)
4.1 继续上面的操作,然后对jackread进行验证,之后对kgpc数据库下的country表查询,如图所示: