重要
如果您为部署启用了访问控制,则必须使用每个部分中指定的必需特权以用户身份进行身份验证。具有该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
上的角色:accountsreportsUser
使用db.grantRolesToUser()
方法授予角色。例如,以下操作向reportsUser用户授予
数据库read角色
accounts:
对于分片群集,对用户的更改是
mongos在命令运行时立即发生的。但是,对于mongos群集中的其他
实例,用户缓存可能要等待10分钟才能刷新。请参阅
userCacheInvalidationIntervalSecs。
对于给定角色,请使用db.getRole()方法或
rolesInfo命令,并showPrivileges选择以下选项:
例如,要查看read角色在products数据库上授予的特权,请使用以下操作,发出:
在返回的文档中,privilegesand
inheritedPrivileges数组。该
privileges列表列出了由角色直接指定的特权,并排除了从其他角色继承的那些特权。该inheritedPrivileges
名单由该角色授予的所有权限,无论是直接指定和继承。如果该角色未从其他角色继承,则两个字段相同。