使用 SCRAM 对自管理部署上的客户端进行身份验证
以下步骤将在独立运行的 mongod
实例上为客户端身份验证设置 SCRAM。
要对副本集或分片集群使用 SCRAM 身份验证,请参阅使用密钥文件身份验证部署自管理副本集。
步骤
在没有访问控制的情况下启动 MongoDB
在没有访问控制的情况下,启动独立运行的 mongod
实例。
打开终端并以 mongod
用户的身份运行以下命令:
mongod --port 27017 --dbpath /var/lib/mongodb
本教程中的 mongod
实例使用 port 27017
和 /var/lib/mongodb
数据目录。
本教程假定 /var/lib/mongodb
目录已存在,并且是默认的 dbPath
。您可以根据需要指定其他数据目录或端口。
创建用户管理员
重要
本地主机异常
在启用访问控制前后都能创建用户管理员。如果您先启用访问控制,再创建用户,MongoDB 会提供本地主机例外,允许您在 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 身份验证,请参阅使用密钥文件身份验证部署自管理副本集。