使用 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.authorization
security: 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 验证复制集或分片集群,请参阅使用密钥文件认证部署自托管复制集。