OPTIONS
翻译或纠错本页面

认证

认证是一个确认客户端身份的过程。在访问控制(authorization)开启时,MongoDB要求所有客户必须对自己认证以确保他们是否有权力访问。

虽然认证和 授权 关系非常紧密,认证和授权是两个不同的概念。认证是用来识别用户的身份,授权控制已经认证的用户使用资源和行为的权限。

MongoDB支持一些客户可以用来认证身份的 认证体制 。这些体制允许MongoDB整合到和现有的认证系统里。参见 认证机构 了解详情。

除了认证客户端的身份,MongoDB也可以要求复制集和分片集的成员向他们所在的集 认证他们的成员身份 。 参见 MongoDB事例之间认证 了解详情。

客户端用户

在MongoDB中认证一个客户端需要在MongoDB中添加相应的用户。添加用户时需要在一个特定的数据库中建立该用户。用户名和其所在的数据库联合起来作为识别该用户的方式,也就是说有两个有同样的用户名但是在不同数据库中建立的用户是两个不同的用户。客户端必须在用户所在的数据库进行认证。例如,如果如果使用 mongo 命令符作为客户端,你可以使用 –authenticationDatabase 制定用户认证应当使用的数据库。

如果想添加或者管理用户信息,MongoDB提供 db.createUser() 方法和其他 用户管理方法 <user-management-methods> 。:doc:/tutorial/add-user-to-database` 中有如何在MongoDB中添加用户的例子。

MongoDB把所有用户信息,包括 namepassworduser's database,都储存在 admin 数据库的 system.users 集里。

认证机构

MongoDB支持多个认证机制。MongoDB默认认证机制是一种 挑战-应答机制 (MONGODB-CR) 。MongoDB也支持 x509 certificate authenticationLDAP proxy authentication, 和 Kerberos authentication

该部分介绍MongoDB提供的机制。

如果制定认证机构,请参见 authenticationMechanisms

MONGODB-CR 认证

MONGODB-CR 是一种通过密码认证用户的挑战-应答机制。``MONGODB-CR``是默认的认证机制。

在使用``MONGODB-CR``认证的时候,``MONGODB-CR``将用户和储存在 namepassworddatabase 中的用户数据对比。用户的数据库是建立该用户时所使用的数据库,用户名和其所在的数据库联合一起识别该用户。

Using key files, you can also use MONGODB-CR authentication for the internal member authentication of replica set members and sharded cluster members. The contents of the key files serve as the shared password for the members. You must store the key file on each mongod or mongos instance for that replica set or sharded cluster. The content of the key file is arbitrary but must be the same on all mongod and mongos instances that connect to each other.

参见 Generate a Key File 如何生成密钥文件和开启成员之间密钥文件认证。

x.509 证书认证

2.6 新版功能.

MongoDB支持通过使用x.509 证书认证建立 SSL 连接

向服务器认证,客户端可以使用x.509证书替代用户名和密码。参见 Client x.509 Certificate 了解详情。

进行成员认证,分片集和复制群可以使用 x.509 证书替代密钥文件。参见 Use x.509 Certificate for Membership Authentication 了解详情。

Kerberos 认证

MongoDB企业版 支持使用Kerberos服务认证。Kerberos是一个行业标准认证协议,适用于大规模的客户端-服务器系统。

如果想使用MongoDB与Kerberos,你必须有一个有一个正确设置的Kerberos部署,为MongoDB设置 :ref:` <kerberos-service-principal>`,并且为MongoDB添加了 Kerberos user principal

参见 Kerberos Authentication 了解详情。为MongoDB设置Kerberos认证,请参见 /tutorial/control-access-to-mongodb-with-kerberos-authentication :doc:/tutorial/control-access-to-mongodb-windows-with-kerberos-authentication`。

LDAP代理认证机构认证

MongoDB 企业版 支持通过轻型目录访问协议(LDAP)代理认证。参见 Authenticate Using SASL and LDAP with OpenLDAPAuthenticate Using SASL and LDAP with ActiveDirectory.

MongoDB企业版在Windows上不支持使用LDAP认证。但是MongoDB企业版在Linux上支持活动目录(ActiveDirectory)服务器上的LDAP。

MongoDB在有2.4和2.6多版本的分片集部署中**不**支持LDAP认证。

认证行为

客户端认证。

客户端可以使用以下几种方式认证:挑战-应答x.509LDAP ProxyKerberos 机构。

每一个客户端的连接都应当以一个用户认证。如果客户端以某一用户向一个数据库认证,之后又用另一用户向同一数据库认证,第二次认证会使前一次的实效。虽然客户端可以同时以多个用户认证,只要这些用户都在不同数据库里,我们推荐一次只以一个用户认证,确保该用户在其所在的数据库内有足够的权限。

参见 Authenticate to a MongoDB Instance or Cluster 了解详情。

MongoDB事例之间认证

你可以认证 复制集分片集 里的成员。同一个MongoDB部署里的不同成员互相认证可以通过MongoDB 的:setting:~security.keyFilex.509 <security-auth-x509>`机制。使用 :setting:`~security.keyFile 认证成员会开启授权。

确保复制集和分片集群在可信的网络里运行。确保网络只允许可信任的网络流量能够到达每一个:program:mongodmongos 事例。

使用环境的防火墙和路由设置确保*只有*来自客户端和其他成员的流量能够到达你的:program:mongod 和 :program:`mongos`事例。如果需要的话,使用虚拟私人网络(VPN)以确保在广域网(WAN)上连接的安全性。

始终确保:

  • 你的网络设置允许每一个每一个复制集或分片集的成员都可以连接到所有其他成员。

  • 如果你使用MongoDB的认证系统来限制对基础设施的访问,那么确保你对所有成员都设置一个:setting:`~security.keyFile`以确保他们可以认证。

参见:doc:/tutorial/generate-key-file 如何生成密钥文件并且开启使用密钥文件认证成员。例如使用密钥文件进行分片集认证。参见 在集群中开启权限认证

在分片集里认证

在分片集中,应用程序可以直接使用:term:config servers <config server>`服务器``admin``数据库中的用户身份凭证向 :program:`mongos 实例认证。分片集中的分片也存有用户身份凭证,客户端在维护服务器时可以直接向分片认证。一般来讲,应用程序或者客户端应该通过:program:`mongos`连接到分片集。

在 2.6 版更改: 在之前版本里,用户向一个集中的数据库认证的身份凭证是存在该数据库的 primary shard 里。

有一些维护作业,例如:dbcommand:cleanupOrphanedcompactrs.reconfig(),需要直接连接分片集里的每一个分片。在开启认证的时候进行这些操作必须要直接连接一个分片,并以*分片本地*管理员用户的身份认证。为了建立一个*分片本地*管理员用户,直接连接到一个分片并建立用户。MongoDB将所有的*分片本地*用户都存在该分片的``admin``数据库中。这些*分片本地*用户完全独立于通过:program:`mongos`添加的分片集的用户。*分片本地*用户只在在分片本地使用,无法通过:program:`mongos`访问。直接连接分片只应当针对分片进行维护和设置时使用。

本地主机例外

你可以使用本地主机例外在系统中建立第一个用户。在被开启时,本地主机例外允许所有来自本地主机接口的所有连接都对该实例有完全的访问权限。本地主机例外只有在MongoDB实例中没有任何用户时才适用。

如果你在部署新的MongoDB系统时使用本地主机例外,你所创建的第一个用户必须是在 admin 数据库中并且有权力建立其他用户,例如一个有:authrole:userAdminuserAdminAnyDatabase 权限的用户。参见:doc:/tutorial/enable-authenticationCreate a User Administrator 了解详情。

在一个分片集中,本地主机例外对整个集和每一个分片都适用。本地主机例外对整个分片集适用的前提是设置服务器中没有用户信息并且用户使用 mongos 实例连接。

本地主机例外可以分别适用于对每个分片,前提是该分片中没有用户信息并且客户端直接连接分片。

为了防止对集群分片未经授权的访问,你必须在每一个分片上建立一个管理员或者关闭本地主机例外。在启动时通过 setParameter 设置 enableLocalhostAuthBypass 这项参数为 0 以关闭本地主机例外。

←   安全概念 授权  →