重要
如果您为部署启用了访问控制,则必须使用每个部分中指定的必需特权以用户身份进行身份验证。具有该userAdminAnyDatabase
角色或userAdmin
特定数据库中的角色的用户管理员
提供执行本教程中列出的操作所需的特权。有关将用户管理员添加为第一个用户的详细信息,请参见
启用访问控制。
角色授予用户访问MongoDB资源的权限。MongoDB提供了许多内置角色,管理员可以使用这些角色来控制对MongoDB系统的访问。但是,如果这些角色无法描述所需的特权集,则可以在特定数据库中创建新角色。
除了在admin
数据库中创建的角色之外,角色只能包含适用于其数据库的特权,并且只能从其数据库中的其他角色继承。
在admin
数据库中创建的角色可以包括应用于admin
数据库,其他数据库或
群集资源的特权,并且可以从其他数据库以及数据库中的角色继承admin
。
若要创建新角色,请使用db.createRole()
方法,在privileges
数组中指定特权,并在数组中指定继承的角色roles
。
MongoDB使用数据库名称和角色名称的组合来唯一定义角色。每个角色的作用域仅限于您在其中创建角色的数据库,但是MongoDB将所有角色信息存储admin.system.roles
在admin
数据库的
集合中。
要在数据库中创建角色,您必须具有:
createRole
grantRole
内置角色userAdmin
并
在其各自的资源上userAdminAnyDatabase
提供createRole
和
grantRole
采取行动。
要创建具有authenticationRestrictions
指定角色的角色,必须对创建角色的
数据库资源执行操作。setAuthenticationRestriction
以下示例创建一个名为的角色manageOpRole
,该角色仅提供运行db.currentOp()
和
的特权db.killOp()
。[1]
注意
在版本3.2.9中进行了更改:在mongod
实例上,用户不需要任何特定的特权即可查看或取消自己的操作。有关详细信息,请参见
db.currentOp()
和db.killOp()
。
manageOpRole
具有对多个数据库和群集资源起作用的特权。因此,您必须在admin
数据库中创建角色。
新角色授予杀死任何操作的权限。
警告
极其谨慎地终止正在运行的操作。仅使用该db.killOp()
方法或killOp
命令终止由客户端启动的操作,而不终止内部数据库操作。
[1] | 内置角色clusterMonitor 还提供了db.currentOp() 与其他特权一起运行的特权,而内置角色hostManager 提供了db.killOp() 与其他特权一起运行的特权。 |
mongostat
¶以下示例创建一个名为的角色mongostatRole
,该角色仅提供运行特权mongostat
。
[2]
[2] | 内置角色
clusterMonitor 还提供了mongostat 与其他特权一起运行的
特权。 |
system.views
跨数据库的集合¶以下示例创建一个名为的角色dropSystemViewsAnyDatabase
,该角色
提供将system.views
集合删除到任何数据库中的特权
。
system.views
集合拖放到任何数据库中。¶actions
包含dropCollection
动作的数组
,以及""
)数据库和字符串
"system.views"
的集合。有关更多信息,请参见将
跨数据库的集合指定为资源。要显示要修改的用户的角色和特权,请使用
db.getUser()
和db.getRole()
方法。
例如,要查看reportsUser
在Examples中创建的
角色,请发出:
要显示数据库中readWrite
角色所授予用户的特权
"accounts"
,请发出:
撤销该db.revokeRolesFromUser()
方法的作用。以下示例操作从中删除数据库readWrite
上的角色:accounts
reportsUser
使用db.grantRolesToUser()
方法授予角色。例如,以下操作向reportsUser
用户授予
数据库read
角色
accounts
:
对于分片群集,对用户的更改是
mongos
在命令运行时立即发生的。但是,对于mongos
群集中的其他
实例,用户缓存可能要等待10分钟才能刷新。请参阅
userCacheInvalidationIntervalSecs
。
对于给定角色,请使用db.getRole()
方法或
rolesInfo
命令,并showPrivileges
选择以下选项:
例如,要查看read
角色在products
数据库上授予的特权,请使用以下操作,发出:
在返回的文档中,privileges
and
inheritedPrivileges
数组。该
privileges
列表列出了由角色直接指定的特权,并排除了从其他角色继承的那些特权。该inheritedPrivileges
名单由该角色授予的所有权限,无论是直接指定和继承。如果该角色未从其他角色继承,则两个字段相同。