Mongodb用户,角色,权限管理¶
概念¶
用户概念¶
Mongodb的用户是由 用户名+所属库名组成
例如:
登录mongo testdb1 ,创建用户testuser
登录mongo testdb2 ,创建用户testuser
那上面创建的用户分别是:testuser@testdb1,testuser@testdb2
在哪个库下面创建用户,这个用户就是哪个库的
角色概念¶
查看所有用户show roles
Mongodb的授权采用了角色授权的方法,每个角色包括一组权限。
Mongodb已经定义好了的角色叫内建角色,我们也可以自定义角色。
Mongodb内建角色包括下面几类:
xx | 角色 |
---|---|
Database User Roles | readreadWrite |
Database Administration Roles | dbAdmindbOwneruserAdmin |
Cluster Administration Roles | clusterAdminclusterManagercluster MonitorhostManager |
Backup and Restoration Roles | backuprestore |
All-Database Roles(3.4) | readAnyDatabasereadWriteAnyDataba seuserAdminAnyDatabasedbAdminAnyD atabase |
Superuser Roles | root |
Internal Role | __system |
配置认证环境和认证登录¶
- Mongodb默认不开启认证
启动mongodb之后,创建一个管理用户
use admin
db.createUser({user:'yang',pwd:'yang',roles:[{ "role" : "root", "db" : "admin" }]});
关闭mongodb
db.shutdownServer()
启用mongodb授权认证
- 以–auth 启动mongod
- 旧版本在mongodb配置文件中加入auth=true,mongodb
3.x使用yaml语法,配置不一样,请参考
mongodb之yaml配置文件
第一次启用–auth时会出现:
2015-05-13T11:20:22.296+0800 I ACCESS [conn1] note: no users configured in admin.system.users, allowing localhost access
2015-05-13T11:20:22.297+0800 I ACCESS [conn1] Unauthorized not authorized on admin to execute command { getLog: “startupWarnings” }
2015-05-13T12:07:08.680+0800 I INDEX [conn1] build index on: admin.system.users properties: { v: 1, unique: true, key: { user: 1, db: 1 }, name: “user_1_db_1″, ns: “admin.system.users” }
即之前未定义过用户,所以mongod将允许本地直接访问
启动Mongodb
sudo service mongod start
认证登录
连接的时候认证
mongo ip:27017/admin -u yang -p
连接之后认证
> use admin
switched to db admin
> db.auth('yang','yang')
用户授权详解¶
创建用户并授权¶
语法:db.createUser({user:“UserName”,pwd:“Password”,roles:[{role:“RoleName”,db:“Target_DBName”}]})
创建用户有3项需要提供:用户名,密码,角色列表
创建用户示例
> use admin
switched to db admin
> db.createUser(
... {
... user: "yang",
... pwd: "yang"
... ,
... roles: [{role: "root",db: "admin"}]
... }
... )
Successfully added user: {
"user" : "yang",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
>
修改密码¶
use test
db.changeUserPassword('testuser','testPWD');
添加角色¶
use test
db.grantRolesToUser( "testuser", [ { role: "read",db:"admin"} ] )
回收角色权限¶
use test
db.revokeRolesFromUser("testuser",[ { role: "read",db:"admin"} ] )
删除用户¶
首先进入目标库:use test db.dropUser(“testuser”)
注意事项¶
1、MongodbVOE版本太低,可能导致远程连接mongodb认证失败,建议升级版本或者更换其它GUI工具 2、远程连接Mongodb一定要把mongodb服务器的防火墙打开,否则连接不上