使用 SCRAM 在自托管部署上验证客户端
以下步骤将在独立实例上设置 SCRAM 以进行客户端身份验证。mongod 实例。
要使用 SCRAM 验证复制集或分片集群,请参阅使用密钥文件认证部署自托管复制集。
步骤
创建用户管理员
重要
本地主机例外
您可以在启用访问控制之前或之后创建用户管理员。如果您在创建任何用户之前启用访问控制,MongoDB 提供了一个 localhost 例外,允许您在 admin 数据库中创建用户管理员。创建后,您必须以用户管理员身份进行身份验证,才能创建其他用户。
使用 mongosh
切换到
admin数据库添加具有
userAdminAnyDatabase和readWriteAnyDatabase角色的myUserAdmin用户"
use admin db.createUser( { user: "myUserAdmin", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "userAdminAnyDatabase", db: "admin" }, { role: "readWriteAnyDatabase", db: "admin" } ] } )
提示
方法 passwordPrompt() 会提示您输入密码。您还可以直接以字符串形式指定您的密码。我们建议使用 passwordPrompt() 方法,以避免密码在您的屏幕上可见,并可能泄露到您的 shell 历史记录中。
角色 userAdminAnyDatabase 允许此用户执行以下操作:
创建用户
授予或撤销用户角色
创建或修改自定义角色
您可以根据需要为您的用户分配额外的 内置角色 或 用户自定义角色。
您创建用户的数据库,在这个例子中是 admin,是用户的 认证数据库。尽管用户需要对此数据库进行认证,但用户可以在其他数据库中拥有角色。用户的认证数据库不会限制用户的权限。
使用访问控制重新启动 MongoDB 实例
关闭 mongod 实例。使用 mongosh,执行以下命令
db.adminCommand( { shutdown: 1 } )
退出 mongosh.
启用访问控制启动 mongod
如果您从命令行启动
mongod,请添加--auth命令行选项mongod --auth --port 27017 --dbpath /var/lib/mongodb 如果您使用配置文件启动
mongod,请添加配置文件设置security.authorizationsecurity: authorization: enabled
连接到此实例的客户端必须进行认证,并且只能执行其分配的角色所确定的操作。
重要
本地主机例外
您可以在启用访问控制之前或之后创建用户。如果您在创建任何用户之前启用访问控制,MongoDB 提供了一个本地主机异常,允许您在admin数据库中创建用户管理员。一旦创建,您必须作为用户管理员进行身份验证以创建其他用户。
以用户管理员身份连接和认证
使用mongosh,您可以
使用mongosh,通过命令行选项 -u <username>、-p 和 --authenticationDatabase <database> 启动
mongosh --port 27017 --authenticationDatabase \ "admin" -u "myUserAdmin" -p
根据提示输入您的密码。
使用mongosh连接到您的数据库部署
mongosh --port 27017
在mongosh中,切换到认证数据库(在这种情况下,admin),并使用db.auth(<username>, <pwd>)方法进行认证
use admin db.auth("myUserAdmin", passwordPrompt()) // or cleartext password
提示
方法 passwordPrompt() 会提示您输入密码。您还可以直接以字符串形式指定您的密码。我们建议使用 passwordPrompt() 方法,以避免密码在您的屏幕上可见,并可能泄露到您的 shell 历史记录中。
根据提示输入密码。
下一步操作
要使用 SCRAM 验证复制集或分片集群,请参阅使用密钥文件认证部署自托管复制集。