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字段包含了该用户所具有的全部角色,例如:
更进一步,还可以查看角色的特权:showPrivileges是一个可选项;为true时,才会列出指定角色的特权
use products
db.getRole( "read", { showPrivileges: true } )
在返回的结果文档中,privileges字段只列出了该角色在创建时被直接指定的特权,而 inheritedPrivileges字段则列出了所有特权,除了创建时被直接指定的特权外,还包括继承与其他角色的特权。例如:
最后:
注:mongodb使用数据库名和角色名来唯一标识一个角色,每个角色限定于你创建该角色的数据库;
mongodb所有的角色信息保存在admin数据库中的admin.system.roles集合
角色可以新建,也可以直接继承于其他角色;
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集合
相关文章推荐
- 管理站点中的角色和用户and管理文档库的权限
- jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
- Sencha Touch 2 官方文档翻译之 Managing Dependencies with MVC(管理MVC依赖项)
- DSP5509的时钟发生器(翻译总结自TI官方文档)
- jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
- Google Android官方文档进程与线程(Processes and Threads)翻译
- Applying Styles and Themes - 应用Style和Theme - Android官方文档中文翻译
- jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
- [Guava官方文档翻译] 2.使用和避免使用null (Using And Avoiding Null Explained)
- CSL概述(翻译总结自TI官方文档)
- MongoDB官方文档翻译系列之 -- 索引交集
- Scripts to manage Local Users—windows用户管理脚本
- jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)
- 第三章 HTTP状态管理--httpclient4 中文版帮助文档,最新官方版翻译版(三)
- 关于asp.net 2.0的用户、角色管理总结(转)
- Sencha Touch 2 官方文档翻译之 Managing Dependencies with MVC(管理MVC依赖项)
- 转】第三章 HTTP状态管理--httpclient4 中文版帮助文档,最新官方版翻译版
- Applying Styles and Themes - 应用Style和Theme - Android官方文档中文翻译
- Managing Bitmap Memory管理bitmap内存(Android官方文档翻译——四)
- jquery.fullCalendar官方文档翻译(一款小巧好用的日程管理日历, 可集成Google Calendar)