43523 发表于 2016-6-21 09:47:22

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]
查看完整版本: mongod user and role management