授权¶
MongoDB支持基于角色的访问控制(RBAC)来管理对MongoDB系统的访问。一个用户可以被授权一个或者多个:ref:角色 <roles> 以决定该用户对数据库资源和操作的访问权限。在权限以外,用户是无法访问系统的。
MongoDB默认不开启授权。你可以通过设置 --auth 或者 --keyFile 选项开启授权,或者如果你使用配置文件的话,使用 security.authorization 或 security.keyFile 设置。
MongoDB提供 自带角色, 每一个角色都为一种常见用例提供一个明确的作用。例如 read, readWrite, dbAdmin, 和 root 等角色。
管理员也可以建立新的角色和权限以满足作业需要。管理员分配的权限范围可以详细到集合层面。
在被授权一个角色后,一个用户可以接受所有该角色的权限。一个用户可以同时拥有多个角色,
角色¶
一个角色包括一系列联合资源和合法操作的权限。每个权限都是直接在角色或继承角色中定义的。
一个角色的权限适用于建立该角色时使用的数据库。一个在``admin``数据库里建立的角色能包括适用于所有数据库或:ref:`cluster <resource-cluster>`的权限。
一给被指定角色的用户拥有所有该角色的权限。用户可以有多个角色,也可以在不同数据库中有不同角色。
角色永远赋予权限而从不会限制权限。例如,如果一个用户在一个数据库中拥有:authrole:read 和 :authrole:`readWriteAnyDatabase`两个角色。后者更广泛的访问权会被保留。
权限¶
每个权限包括一些 *操作*以及这些操作所适用的资源。
一个权限的 资源 可以是一个数据库、集合、多个集合、或者一个集群。如果是集群,相关的操作会影响整个系统的状态,而不仅仅是某个数据库或集合。
一个:doc:操作 </reference/privilege-actions>`是一个命令或者适用于某资源的方法。一个资源可以有多个被适用的操作。参见 :doc:/reference/privilege-actions` 了解所有可用的操作。
例如,一个包括 update 操作的权限允许一个用户改变指定资源上的现有文档。如果要想让该用户在此基础之上拥有建立文档的权限,管理员会在权限中添加 insert 操作。
了解权限语法,参见 admin.system.roles.privileges。
继承的权限¶
一个角色的定义中可以包含一个或者多个角色,这种情况下这个角色会继承所有其包含的角色的所有权限。
一个角色可以继承其数据库中其他角色的权限。一个在``admin``数据库中建立的角色可以继承任意数据库角色中的权限。
用户自定义角色¶
2.6 新版功能.
用户管理员可以建立
MongoDB将每个用户定义的角色局限于其所生成的数据库中,并且用角色的名称和其所在的数据库来准确指定这个角色。MongoDB将角色储存于 ``admin``数据库 system.roles 中。请务必不要直接访问该集合,而使用 角色管理命令 查看和编辑角色。
用户¶
MongoDB将用户信息储存在受保护的 admin.system.users 集合。使用 用户管理方法 查看或编辑用户认证信息。
为用户制定的角色¶
用户管理员
MongoDB将每个用户局限于其所生成的数据库中。MongoDB讲所有用户的定义都储存在 admin 数据库中,无论该用户适用于哪个数据库。所有MongoDB将用户储存于 ``admin``数据库 system.users 集合 中。请务必不要直接访问该集合,而使用 角色管理命令 查看和编辑角色。
数据库中第一个被指定的用户应当是:authrole:userAdmin 或者 userAdminAnyDatabase。这个用户之后可以用来建立系统中所有其他用户。参见 Create a User Administrator。
保护用户和角色集合¶
MongoDB将用户和角色信息储存在受保护的 admin.system.roles 和 admin.system.users 集合。使用 用户管理方法 查看或编辑这些信息。
如果你关闭访问控制,**请勿**使用 insert() 和 update() 等常规操作手段编辑 admin.system.roles 和 admin.system.users 集合
附加信息¶
参见安全参考文献了解所有 自带角色 and all available 需要权限的操作。同时考虑参考文献中的 资源文档 的格式。
建立用户请参见 Create a User Administrator 和 Add a User to a Database 教程。