MongoDB身份验证

MongoDB身份验证

对MongoDB部署启用访问控制会强制执行用户身份验证,要求在登录MongoDB系统用户识别自己。 当访问启用了访问控制的MongoDB部署时,用户只能执行由其角色确定的操作。对于认证,MongoDB支持各种认证机制。以下为启用独立 mongod 实例的访问控制讲解,并使用默认身份验证机制。

用户管理员

启用访问控制后,请确保在 admin 数据库中拥有 userAdmin 或 userAdminAnyDatabase 角色的用户。该用户可以管理用户和角色,例如:创建用户,授予或撤销用户角色,以及创建或修改定义角色。

可以在启用访问控制之前或之后创建用户。如果在创建任何用户之前启用访问控制,MongoDB将提供本地主机异常,允许在管理数据库中创建用户管理员。创建后,必须作为用户管理员进行身份验证,以根据需要创建其他用户。

启用过程

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

第一步:启动MongoDB无需访问控制

例如,以下启动不具有访问控制的独立 mongod 实例。

mongod --port 27017 --dbpath /data/db1

第二步:连接到实例

例如,使用mongo shell连接到实例。

mongo --port 27017

根据需要指定其他命令行选项以将mongo shell连接到部署,例如--host。

第三步:创建用户管理员

在管理数据库中,添加具有 userAdminAnyDatabase 角色的用户。 例如,以下在 admin 数据库中创建用户 myUserAdmin:

注意:创建用户的数据库(在此示例中为admin)是用户的身份验证数据库。用户将对该数据库进行身份验证,但用户可以在其他数据库中担任角色; 即用户的认证数据库不限制用户的权限
 

use admin

db.createUser( { user: "myUserAdmin", pwd: "abc123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } )

执行上面命令后,断开mongo shell。

第四步:重新启动具有访问控制的MongoDB实例

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

mongod --auth --port 27017 --dbpath /data/db1

连接到此实例的客户端现在必须以 MongoDB 用户身份进行身份验证。客户只能执行由其分配的角色确定的操作。

第五步:以用户管理员身份进行连接和验证

使用 mongo shell,可以:

  • 通过传递用户凭据或
  • 连接第一个withouth身份验证,然后发出db.auth()方法进行身份验证。

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

         使用-u <username>,-p <password>和--authenticationDatabase <database>命令行选项 启动一个mongo shell:

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

连接后验证:

       将 mongo shell 连接到 mongodb,也就是先连接,后验证用户身份 :

mongo --port 27017

      切换到身份验证数据库(在这种情况下为admin),并使用db.auth(<username>,<pwd>)方法进行身份验证:

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

第六步:根据需要创建其他用户

当管理员用户进行身份验证通过之后,可使用db.createUser()创建其他用户。可以为用户分配任何内置角色或用户定义的角色。

myUserAdmin用户只具有管理用户和角色的权限。如果使用myUserAdmin尝试执行任何其他操作,例如从test数据库中的foo集合读取数据,MongoDB将返回错误。

以下操作将用户 myTester 添加到在test数据库中并给予test数据库的readWrite角色以及在reporting数据库中读取角色。

注意:创建用户的数据库(在本示例中为test)是该用户的身份验证数据库。虽然用户将对该数据库进行身份验证,但用户可以在其他数据库中担任角色; 即用户的认证数据库不会限制用户的权限

use test

db.createUser( { user: "myTester", pwd: "xyz123", roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )

第七步:连接并验证为myTester

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

         使用-u <username>,-p <password>和--authenticationDatabase <database>命令行选项启动一个mongo shell:

$ mongo --port 27017 -u "myTester" -p "xyz123" --authenticationDatabase "test"

连接后验证:

        将mongo shell连接到 mongodb:

$ mongo --port 27017

        切换到身份验证数据库(在这里为test),并使用db.auth(<username>,<pwd>)方法进行身份验证:
 

use test

db.auth("myTester", "xyz123" )

使用用户 myTester 插入一个集合

使用用户 myTester,此用户有权在test数据库中执行读写操作(以及在reporting数据库中执行读操作)。 例如,在test数据库中执行以下插入操作:

 db.foo.insert( { x: 1, y: 1 } )

最后,使用用户 myTester,在reporting数据库中执行插入操作看看返回结果:

use reporting

db.auth("myTester", "xyz123" )

db.product.insert( { x: 1, y: 1 } )

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值