MongoDB 3.0+安全权限访问控制详解
MongoDB是一个流行的文档型数据库,但是在安全方面需要特别注意。MongoDB 3.0及其以上版本引入了各种安全性改进,从而为MongoDB用户提供了一些方法来保护他们的数据、说明和数据库自身。本文将重点关注MongoDB 3.0及其以上版本的安全权限访问控制。
1. 创建管理员用户
要开始使用MongoDB的安全权限访问控制,您需要一个特殊的管理员用户。管理员用户授予系统的最高权限,只应该分配给可信的人员。以下是如何创建管理员用户的步骤:
在命令行使用mongod启动Mongod服务之前,使用以下命令来创建管理员用户:
mongo -u admin -p --authenticationDatabase admin
然后在Mongo shell上执行以下语句:
use admin
db.createUser(
{
user: "admin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
这将创建一个名为“admin”的用户,设置密码为“password”,并授予它“userAdminAnyDatabase”的角色,这个角色会给予用户管理任何数据库的权限。
2. 创建其他用户并授予权限
要创建其他MongoDB 用户并授予它们权限,可以按照以下步骤操作:
- 在Mongo shell上执行以下命令创建一个名为“testUser”的用户,并将密码设置为“testPassword”,并将其添加到具有“dbOwner”角色的特定数据库:
use test
db.createUser(
{
user: "testUser",
pwd: "testPassword",
roles: [ { role: "dbOwner", db: "test" } ]
}
)
这将创建一个名为“testUser”的用户,密码为“testPassword”,并将它授予一个名为“dbOwner”的角色,这个角色会给它以完全访问它所属的“test”数据库的权限。
- 在Mongo shell上,使用以下命令将用户添加到授权列表:
use admin
db.grantRolesToUser(
"testUser",
[ "readWrite" , "dbAdmin" ]
)
这将授予“testUser”用户“readWrite”和“dbAdmin”的角色,这些角色分别允许用户读取和写入数据库,并管理数据库。
示例1:授予一个用户只读访问权限
假如我们要创建一个名为“readOnlyUser”的用户,并将其添加到具有“read”访问级别的特定数据库:
use test
db.createUser(
{
user: "readOnlyUser",
pwd: "readOnlyPassword",
roles: [ { role: "read", db: "test" } ]
}
)
这将创建一个名为“readOnlyUser”的用户,密码为“readOnlyPassword”,并将它授予一个名为“read”的角色,这个角色会给它以只读的权限,只能访问它所属的“test”数据库。
示例2:授予一个用户在特定集合上读写权限
假如我们要将一个名为“readWriteUser”的用户授予特定集合上的读写权限(例如,名为“products”):
use test
db.createUser(
{
user: "readWriteUser",
pwd: "readWritePassword",
roles: [ { role: "readWrite", db: "test" } ]
}
)
这将创建一个名为“readWriteUser”的用户,密码为“readWritePassword”,并将它授予一个名为“readWrite”的角色,这个角色会给它以读/写访问权限,并且可以在它所属的“test”数据库中访问所有集合。
然而,我们需要将它的访问权限限制在只能访问“products”集合上。可以使用以下命令来实现:
use test
db.grantRolesToUser(
"readWriteUser",
[ { role: "readWrite", db: "test", collection: "products" } ]
)
这将授予“readWriteUser”用户一个名为“readWrite”的角色,并仅允许它在“test”数据库的“products”集合上进行读写操作。
结论
上述是MongoDB 3.0及其以上版本中的安全权限控制的示例代码。授予权限时,应该始终仔细检查每个用户的角色和访问级别,确保他们的权限足够但不过度。同时,必须注意保证管理员和普通用户的密码保密性,防止他们被泄露。做好这些措施可以保证MongoDB的数据安全性和可靠性。