MongoDB用户管理
MongoDB的用户管理涉及用户的创建、分配角色、认证、登录、查看、修改以及删除等操作。以下是详细的MongoDB用户管理教程,包括如何使用MongoDB shell(mongosh)进行这些操作。
一、连接到MongoDB
首先,打开终端并使用mongosh命令连接到MongoDB服务器。例如:
mongosh --host <hostname> --port <port>
其中,<hostname>
是MongoDB服务器的主机名或IP地址,<port>
是MongoDB服务器监听的端口号,默认端口是27017。
二、创建用户
在MongoDB中,用户是针对特定数据库创建的。使用use
命令切换到你要创建用户的数据库,然后使用db.createUser
命令创建用户并分配角色。例如,创建一个名为testuser
的用户,密码为password123
,并赋予readWrite
和dbAdmin
角色:
use <database_name>;
db.createUser({
user: "testuser",
pwd: "password123",
roles: [
{ role: "readWrite", db: "<database_name>" },
{ role: "dbAdmin", db: "<database_name>" }
]
});
其中,<database_name>
是你要创建用户的数据库名。
三、验证用户
创建用户后,可以使用db.auth
命令验证用户身份。例如:
db.auth("testuser", "password123");
如果验证成功,将返回1;如果验证失败,将返回0。
四、启用身份验证
为了确保只有经过身份验证的用户才能访问MongoDB,需要启用身份验证。编辑MongoDB配置文件mongod.conf
,并在其中添加以下内容:
security:
authorization: "enabled"
然后重启MongoDB服务以应用更改。例如,在Linux系统上,可以使用以下命令重启MongoDB服务:
sudo systemctl restart mongod
五、使用用户身份登录
启用身份验证后,需要使用创建的用户身份连接到MongoDB。例如:
mongosh --host <hostname> --port <port> -u "testuser" -p "password123" --authenticationDatabase "<database_name>"
六、查看用户
可以使用show users
或db.system.users.find()
命令查看当前数据库中的用户。例如:
show users;
或者:
db.system.users.find().pretty();
七、修改用户
可以使用db.changeUserPassword
命令修改用户密码,或者使用db.runCommand
命令修改用户信息和密码。例如,修改testuser
用户的密码为newpassword
:
db.changeUserPassword("testuser", "newpassword");
或者,同时修改用户信息和密码:
db.runCommand({
updateUser: "testuser",
pwd: "newpassword",
customData: { description: "updated description" }
});
八、删除用户
可以使用db.dropUser
命令删除指定用户。例如,删除名为testuser
的用户:
use <database_name>;
db.dropUser("testuser");
九、角色管理
MongoDB提供了多种内置角色,可以根据需要为用户分配不同的角色。例如:
read
:授予用户只读数据的权限。readWrite
:授予用户读写数据的权限。dbAdmin
:在当前数据库中执行管理操作。dbOwner
:在当前数据库中执行任意操作。userAdmin
:在当前数据库中管理用户。readAnyDatabase
:授予在所有数据库上读取数据的权限。readWriteAnyDatabase
:授予在所有数据库上读写数据的权限。userAdminAnyDatabase
:授予在所有数据库上管理用户的权限。dbAdminAnyDatabase
:授予管理所有数据库的权限。root
:超级账号,具有超级权限。
可以使用db.grantRolesToUser
和db.revokeRolesFromUser
命令为用户分配或撤销角色。例如,为testuser
用户分配readAnyDatabase
角色:
db.grantRolesToUser("testuser", [{ role: "readAnyDatabase", db: "admin" }]);
撤销testuser
用户的readAnyDatabase
角色:
db.revokeRolesFromUser("testuser", [{ role: "readAnyDatabase", db: "admin" }]);
十、注意事项
- 在数据库中创建的第一个用户应该是具有管理其他用户权限的用户管理员。
- 用户和认证数据库作为该用户的唯一标识符。如果两个用户具有相同的名称,但在不同的数据库中创建,则它们是两个不同的用户。
- 用户的权限不限于认证数据库。通过分配给其他数据库中的用户角色,在一个数据库中创建的用户可以拥有对其他数据库的操作权限。
通过以上步骤,你可以有效地管理MongoDB中的用户,确保数据库的安全性和可访问性。
本文地址:https://www.tides.cn/p_mongodb-user-manage