对现有副本集实施访问控制需要配置:
对于本教程,副本集的每个成员都使用相同的内部身份验证机制和设置。
强制执行内部身份验证也会强制执行用户访问控制。要连接到副本集,mongo
外壳程序之类的客户端需要使用用户帐户。参见
用户。
如果Cloud Manager或Ops Manager正在管理您的部署,请参阅 Cloud Manager手册或Ops Manager手册以实施访问控制。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
在版本3.6中更改。
从MongoDB 3.6,MongoDB二进制文件mongod
和开始
mongos
,localhost
默认情况下绑定到。从MongoDB 2.6到3.4版本localhost
,默认情况下仅绑定来自正式MongoDB RPM(Red Hat,CentOS,Fedora Linux和衍生产品)和DEB(Debian,Ubuntu和衍生产品)的二进制文件
。要了解有关此更改的更多信息,请参阅
Localhost绑定兼容性更改。
本教程使用这些mongod
程序。Windows用户应改用该mongod.exe
程序。
本教程仅介绍在admin
数据库上创建最少数量的管理用户。对于用户身份验证,本教程使用默认的SCRAM
身份验证机制。质询响应安全机制最适合测试或开发环境。对于生产环境,我们建议使用x.509证书或LDAP代理身份验证
(仅适用于MongoDB Enterprise)或Kerberos身份验证
(仅适用于MongoDB Enterprise)。
有关为特定身份验证机制创建用户的详细信息,请参阅特定身份验证机制页面。
有关创建和管理用户的最佳实践,请参见➤配置基于角色的访问控制。
以下执行访问控制的过程需要停机。有关不需要停机的过程,请参阅将 更新副本设置为密钥文件身份验证(无停机) 。
通过密钥文件认证,mongod
副本集中的每个
实例都将密钥文件的内容用作共享密码,以认证部署中的其他成员。只有
mongod
具有正确密钥文件的实例才能加入副本集。
注意
从MongoDB 4.2开始,用于内部成员身份验证的密钥文件使用YAML格式,以允许密钥文件中包含多个密钥。YAML格式接受以下内容:
YAML格式与使用文本文件格式的现有单键密钥文件兼容。
密钥的长度必须在6到1024个字符之间,并且只能包含base64集中的字符。副本集的所有成员必须共享至少一个公共密钥。
注意
在UNIX系统上,密钥文件不得具有组或世界权限。在Windows系统上,不检查密钥文件权限。
您可以使用任何选择的方法来生成密钥文件。例如,以下操作用于openssl
生成复杂的伪随机1024字符串,用作共享密码。然后,它chmod
用于更改文件许可权,以仅为文件所有者提供读取许可权:
使用配置文件设置或
命令行选项重新启动副本集中的每个 mongod
副本
。运行与所述命令行选项或
配置文件设置强制两个
内部/成员身份验证和
基于角色的访问控制。security.keyFile
--keyFile
mongod
--keyFile
security.keyFile
如果使用配置文件,请设置
security.keyFile
到密钥文件的路径,以及replication.replSetName
副本集名称。包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定net.bindIp
设置。有关更多信息,请参见Localhost绑定兼容性更改。
开始mongod
使用配置文件:
有关配置文件的更多信息,请参阅 配置选项。
如果使用命令行选项,请从mongod
以下选项开始:
--keyFile
设置为密钥文件的路径,并且--replSet
设置为副本集名称。包括配置所需的其他选项。例如,如果您希望远程客户端连接到您的部署,或者您的部署成员在不同的主机上运行,请指定
--bind_ip
。有关更多信息,请参见
Localhost绑定兼容性更改。
小费
如果可能,请使用逻辑DNS主机名而不是IP地址,尤其是在配置副本集成员或分片群集成员时。逻辑DNS主机名的使用避免了由于IP地址更改而导致的配置更改。
有关命令行选项的更多信息,请参见
mongod
参考页。
通过localhost接口将mongo
Shell 连接到mongod
实例之一
。您必须
在与实例相同的物理计算机上运行外壳程序。mongo
mongod
使用rs.status()
来识别初级副本集成员。如果您连接到主服务器,请继续执行下一步。如果不是,请mongo
通过localhost接口将shell 连接到主服务器。
重要
您必须先连接到主服务器,然后再继续。
重要
创建第一个用户后,localhost异常不再可用。
第一个用户必须具有创建其他用户(例如具有的用户)的特权userAdminAnyDatabase
。这样可以确保您可以在Localhost Exception
关闭后创建其他用户。
如果至少一个用户就不能有权限创建用户,一旦本地主机异常关闭您可能无法创建或修改用户权限的新,因此无法获得必要的操作。
使用db.createUser()
方法添加用户。用户应至少具有数据库userAdminAnyDatabase
角色
admin
。
您必须连接到主数据库才能创建用户。
以下示例在数据库中创建fred
具有
userAdminAnyDatabase
角色的用户admin
。
重要
密码应随机,长且复杂,以确保系统安全并防止或延迟恶意访问。
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
群集管理员用户具有该clusterAdmin
角色,该角色授予对复制操作的访问权限。
创建集群管理员用户并clusterAdmin
在admin
数据库中分配
角色:
小费
从mongo
Shell的4.2版本开始,您可以将该passwordPrompt()
方法与各种用户身份验证/管理方法/命令结合使用,以提示输入密码,而不是直接在方法/命令调用中指定密码。但是,您仍然可以像在早期版本的mongo
Shell中一样直接指定密码
。
出现提示时输入密码。
有关使用x.509进行内部身份验证的详细信息,请参阅 使用x.509证书进行成员身份验证。
要将密钥文件内部身份验证升级到x.509内部身份验证,请参阅从密钥文件身份验证 升级到x.509身份验证。