mongod user and role management
一、用户--auth: 在mongod启动项中加入--auth,mongodb启动后,就可以完成授权模块的启用);PS:虽然auth模块启用后本机还能否登陆到数据库,但是不具备增删改查的权限了,所以启动auth模块之前就应该创建一个超级用户--keyFile <file>: 主要用于分片集群与副本集相互之间的授权使用,在单机情况下只要用到auth,如果是在集群(分片+副本集)环境下,就必须要用到该参数;security.authorization: 在MongoDB 2.6版本开始,mongod/mongos的启动配置文件增加了YAML格式的写法,功能更auth是一样的,后面的操作中,都是采用该格式security.keyFile: 格式与security.authorization相同,功能与--keyFile相同。mongdb在V3.0版本之后内置了root 角色,也就是结合了 readWriteAnyDatabase、dbAdminAnyDatabase 、 userAdminAnyDatabase、clusterAdmin4个角色权限,类似于Oracle的sysdba角色,但是MongoDB的超级管理员用户名称是可以随便定义的:> use adminswitched to db admin> db.createUser(... {... user: "ljaiadmin",... pwd: "123456",... roles: [ { role: "root", db: "admin" } ]... }... )重启完mongod进程后,接下来做一下权限的验证:> use adminswitched to db admin> db.auth('ljaiadmin','123456') (注:切换到admin用户进行授权验证)1> show dbs > use adminswitched to db admin> show users创建普通用户:use reportingdb.createUser({ user: "reportsUser", pwd: "12345678", roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ]})二、角色 (1).数据库用户角色 针对每一个数据库进行控制。 read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.(2).数据库管理角色 每一个数据库包含了下面的数据库管理角色。 dbOwner:该数据库的所有者,具有该数据库的全部权限。 dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考:http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin) userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。
(3).集群管理权限 admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。 clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。 clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能) clusterMonitor:仅仅监控集群和复制集。 hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。 备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。
(4).所有数据库角色 admin数据库提供了一个mongod实例中所有数据库的权限角色: readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。 readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。 userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。 dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
(5). 超级管理员权限 root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。
(6). 备份恢复角色:backup、restore;
(7). 内部角色:__system三、相关命令 除了db.createUser(),下面几个函数也是常用的: 获得数据库的所有用户权限信息:db.getUsers() 获得某个用户的权限信息:db.getUser() 创建角色: db.createRole() 更新角色:db.updateRole() 删除角色:db.dropRole() 获得某个角色信息:db.getRole() 删除用户:db.dropUser() 删除所有用户:db.dropAllUsers() 将一个角色赋予给用户:db.grantRolesToUser() 撤销某个用户的某个角色权限:db.revokeRolesFromUser() 更改密码:db.changeUserPassword()参考:https://docs.mongodb.com/manual/tutorial/create-users/https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
页:
[1]