mongo auth
mongo 权限说明
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34MongoDB数据库在默认是没有用户名及密码,不用安全验证的,只要连接上服务就可以进行CRUD操作.
概念理解:
1.用户概念
Mongodb的用户是由"用户名+所属库名"组成
注意:帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)
例如:
登录mongo库test1,创建用户user,创建的用户为:user@test1
登录mongo库test2,创建用户user,创建的用户为:user@test2
2.角色概念
Mongodb的授权采用了角色授权的方法,每个角色包括一组权限
Mongodb已经定义好了的角色叫内建角色,我们也可以自定义角色
内建角色:
* 数据库用户角色: read readWrite
* 数据库管理角色: dbAdmin dbOwner userAdmin
* 集群管理角色: clusterAdmin clusterManager clusterMonitor hostManager
* 备份恢复角色: backup restore
* 所有数据库角色: readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase
* 超级用户角色: root
* 内部角色: __system
角色权限说明:
* Read 允许用户读取指定数据库
* readWrite 允许用户读写指定数据库
* dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建,删除,查看统计或访问system.profile
* userAdmin 允许用户向system.users集合写入,可以找指定数据库里创建,删除和管理用户
* clusterAdmin 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
* readAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读权限
* readWriteAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读写权限
* userAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
* dbAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
* root 只在admin数据库中可用.超级账号,超级权限创建超级权限用户(auth=false)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@mongodb ~]# mongo
> use admin
> db.createUser(
{
user: "root",
pwd: "root",
roles: [ { role: "root", db: "admin" } ]
}
)
> db.auth('root','root')
> db.createUser(
{
user: "admin",
pwd: "admin",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)重启mongo(auth=true)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17[root@mongodb ~]# mongo
> use admin
> db.auth("root", "rootroot" )
1
> show dbs
admin 0.000GB
local 0.000GB
> exit
bye
或者:
[root@mongodb ~]# mongo --port 27017 -u "root" -p "rootroot" --authenticationDatabase "admin"
> show dbs
admin 0.000GB
local 0.000GB
> exit
bye用户授权过程
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41//创建用户并授权
创建用户条件: 首先选择在哪个数据库下进行创建;其次创建用户有三项需要提供:用户名,密码,角色列表
1.先切换到超级权限用户
> use admin
> db.auth('root','rootroot')
2.创建用户
> use penn
> db.createUser({user:"test1",pwd:"test2",roles:[{role:"readWrite",db:"penn"},{role:"userAdmin",db:"penn"}]})
3.查看用户
> use penn
> show users;
4.修改密码
> use penn
> db.changeUserPassword('test1','test1');
5.权限验证
> use penn
> db.auth('test1','test1')
> show tables;
6.添加角色权限
> use penn
> db.grantRolesToUser("test1",[{role:"read",db:"admin"}])
7.回收角色权限
> use penn
> db.revokeRolesFromUser("test1",[{role:"read",db:"admin"}])
8.删除用户
> use penn
> db.dropUser("test1")
9.查看所有账号
> use admin
> db.auth('root','rootroot')
> db.system.users.find().pretty()
> db.system.users.find().count()