您的位置:首页 > 数据库 > Mongodb

MongoDB用户和角色管理(源自对官方文档的翻译并总结——Manage Users and Roles)

2016-09-07 20:12 681 查看
首先要明白roles(角色)依托于用户(users),代表某个user有执行某些操作的本领;

角色可以新建,也可以直接继承于其他角色;

1.创建用户

不加访问控制来启动mongdb

mongod --port 27017 --dbpath /data/db1

连接mongodb
mongo --port 27017
(1)创建第一个用户,用户管理者(user administrator)

在创建用户时可以指定其一到多个角色

use admin
db.createUser(
{
user: "myUserAdmin",
pwd: "abc123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
关闭mongdb服务器
db.shutdownServer()
开启mongodb的鉴权模式

mongod --auth --port 27017 --dbpath /data/db1
鉴权的两种方式:

(一)登陆时鉴权

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
(二)登陆后鉴权
mongo --port 27017
use admin
db.auth("myUserAdmin", "abc123" )注:这里是本地登录,所以没有指定ip,如果远程登陆必须指定mongodb主机的ip
(三)修改用户密码

db.changeUserPassword("username", "newpwd")
2.创建或收回角色

mongodb内建的角色有很多,宏观上分为:

Database
User Roles
Database
Administration Roles
Cluster
Administration Roles
Backup
and Restoration Roles
All-Database
Roles
Superuser Roles
Internal Role

更具体的内建角色请查看官方文档,这里不再赘述。

注:除了admin数据库中的角色外,其他角色只能拥有其所属数据库的特权,继承时也只能继承所属数据库之下的其他角色

(1)创建用户自定义的角色:

下面的例子在admin数据库上创建了一个名为manageOpRole的角色 ,

并指定它的权限为只能运行db.currentOp() 和 db.killOp()方法

use admin
db.createRole(
{
role: "manageOpRole",
privileges: [
{ resource: { cluster: true }, actions: [ "killop", "inprog" ] },
{ resource: { db: "", collection: "" }, actions: [ "killCursors" ] }
],
roles: []
}
)
注:mongodb中只有使用 db.killOp() 方法或 killOp命令才能做到值终止客户端的操作,而又不会对服务器造成影响 


(2)废除角色

use reporting
db.revokeRolesFromUser(
"reportsUser",
[
{ role: "readWrite", db: "accounts" }
]
)

(3)授予角色
use reporting
db.grantRolesToUser(
"reportsUser",
[
{ role: "read", db: "accounts" }
]
)

(4)查看角色
为了查看一个用户的已有角色,使用db.getUser("username")命令,例如:

use reporting
db.getUser("reportsUser")

在返回的结果文档中roles字段包含了该用户所具有的全部角色,例如:

...
"roles" : [
{ "role" : "readWrite", "db" : "accounts" },
{ "role" : "read", "db" : "reporting" },
{ "role" : "read", "db" : "products" },
{ "role" : "read", "db" : "sales" }
]

更进一步,还可以查看角色的特权:showPrivileges是一个可选项;为true时,才会列出指定角色的特权

use products
db.getRole( "read", { showPrivileges: true } )
在返回的结果文档中,privileges字段只列出了该角色在创建时被直接指定的特权,而 inheritedPrivileges字段则列出了所有特权,除了创建时被直接指定的特权外,还包括继承与其他角色的特权。例如:

...
"privileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
],
"inheritedPrivileges" : [
{
"resource": { "db" : "products", "collection" : "" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
},
{
"resource" : { "db" : "products", "collection" : "system.js" },
"actions": [ "collStats","dbHash","dbStats","find","killCursors","planCacheRead" ]
}
]


最后:

注:mongodb使用数据库名和角色名来唯一标识一个角色,每个角色限定于你创建该角色的数据库;

mongodb所有的角色信息保存在admin数据库中的admin.system.roles集合

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb 管理 文档 继承
相关文章推荐