mongodb 开启身份认证_MongoDB开启安全认证

MongoDB开启安全认证

注意

对MongoDB部署启用访问控制会强制执行身份验证,要求用户识别自己。当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。

启用访问控制后,请确保在admin数据库中拥有userAdmin或userAdminAnyDatabase角色的用户。该用户可以管理用户和角色

未开启复制集的实例

以下过程首先将用户管理员添加到运行无访问控制的MongoDB实例,然后启用访问控制。

启动MongoDB

连接到实例

如:

mongo --port=27017

1

创建用户管理员

在admin数据库中添加具有userAdminAnyDatabase角色的用户。例如:

use admin

db.createUser(

{

user:"myUserAdmin",

pwd: "abc123",

roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

}

)

1

2

3

4

5

6

7

8

然后断开连接

重新启动具有访问控制的MongoDB实例

使用–auth命令行选项重新启动mongod实例,如果使用配置文件,则使用security.authorization设置。例如:

mongod --auth --port 27017

1

或者使用配置文件,增加参数:

security:

authorization: enabled //冒号后面需要空一格

1

2

以用户管理员身份进行连接和验证

在连接期间进行身份验证,例如:

mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"

1

连接后验证,例如:

use admin

db.auth("myUserAdmin", "abc123" )

1

2

创建用户的数据库是该用户的身份验证数据库。虽然用户将对该数据库进行身份验证,但用户可以在其他数据库中担任角色;即用户的认证数据库不限制用户的特权。

开启复制集的实例

在副本集中执行密钥文件访问控制

对于成员的内部认证,MongoDB可以使用密钥文件,密钥文件的内容作为成员的共享密码。密钥长度必须在6到1024个字符之间,并且只能包含base64集合中的字符

密钥文件的内容在所有相互连接的mongod和mongos实例上必须相同。您必须将密钥文件存储在副本集的每个成员上。

执行内部认证也强制执行用户访问控制

密钥文件是最低限度的安全形式,最适用于测试或开发环境。

注意:执行访问控制的以下过程需要停止mongod服务

创建一个密钥文件

使用密钥文件身份验证,副​​本集中的每个mongod实例使用密钥文件的内容作为共享密码,用于验证部署中的其他成员。可以使用您选择的任何方法生成密钥文件。例如,以下操作使用openssl生成密码文件,然后使用chmod来更改文件权限,以便仅为文件所有者提供读取权限

openssl rand -base64 753 >

chmod 400

1

2

将密钥文件复制到每个副本集成员

将密钥文件复制到托管副本集成员的每个服务器。确保运行mongod实例的用户是文件的所有者,并且可以访问密钥文件

关闭副本集的所有成员

关闭复制集中的每个mongod,从次节点开始。直到副本集的所有成员都离线,包括任何仲裁者。主节点必须是最后一个成员关闭以避免潜在的回滚。要关闭mongod,请使用mongo shell连接每个mongod,并在admin数据库上发出db.shutdownServer():

use admin

db.shutdownServer()

1

2

启动执行访问控制的副本集的每个成员

使用keyFile参数运行mongod同时强制内部身份验证和基于角色的访问控制。使用配置文件或命令行启动副本集中的每个mongod。

配置文件

如果使用配置文件,请将security.keyFile选项设置为keyfile的路径,

security:

keyFile:

1

2

使用配置文件启动mongod:

mongod --config

1

命令行

如果使用命令行选项,请使用–keyFile数启动mongod:

mongod --keyFile

1

连接主节点

通过localhost接口将mongo shell连接到配置服务器mongod主节点

必须使用localhost接口连接,因为没有为部署创建任何用户。创建第一个用户后,无论您如何连接到mongod,都必须使用该用户进行身份验证。

创建用户管理员

创建第一个用户后,localhost异常不再可用。

第一个用户必须具有创建其他用户的权限,例如具有userAdminAnyDatabase的用户。这确保您可以在Localhost异常关闭后创建其他用户。

以下示例在admin数据库上创建具有userAdminAnyDatabase角色的用户

admin = db.getSiblingDB("admin")

admin.createUser(

{

user: "fred",

pwd: "changeme1",

roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]

}

)

1

2

3

4

5

6

7

8

验证用户管理员

在mongo shell中,使用db.auth()进行身份验证。

db.getSiblingDB("admin").auth("fred", "changeme1" )

1

或者使用-u ,-p 和–authenticationDatabase参数将新的mongo shell连接到主副本集成员

mongo -u "fred" -p "changeme1" --authenticationDatabase "admin"

1

创建集群管理员(可选)

集群管理员用户具有clusterAdmin角色,它允许对复制操作的访问。创建群集管理员用户并在admin数据库中分配clusterAdmin角色,例如:

db.getSiblingDB("admin").createUser(

{

"user" : "ravi",

"pwd" : "changeme2",

roles: [ { "role" : "clusterAdmin", "db" : "admin" } ]

}

)

1

2

3

4

5

6

7

创建其他用户(可选)

...

来源:https://blog.csdn.net/jeanette_zlj/article/details/79563954

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值