文档链接:https://docs.mongodb.com/manual/tutorial/enable-authentication/

Pre

个人总感觉数据库的文档结构不太友好, 不太解决问题。以下按照原文档结构翻译:


下面的教程以一个使用了默认认证机制的standalone mongod实例为背景来演示启用认证。

副本和集群分片的账户认证

请参考:

https://docs.mongodb.com/manual/core/security-internal-authentication/

账户管理

在启用access-control前,请先确认在admin数据库中,存在userAdmin或userAdminAnyDatabase角色的账户。

该角色账户拥有以下权限:创建账户、赋予账户角色、废除账户角色、创建/修改账户角色。

在启用access-control前后都可以创建账户。

如果还未创建任何账户便启用access-control,则MongoDB会抛出一个localhost exception,允许用户在admin数据库中创建一个账户管理员账号。一旦管理员账号建立,用户以账户管理员账号登陆后,才能添加其他账户。

步骤

以下步骤演示在未启用access-control的MongoDB实例中首次添加用户,然后开启的操作。

1.    不启用access-control启动MongoDB

mongod --port  --dbpath /data/db

2.    连接到实例(本地)

mongo --port 

3.    创建用户管理员

创建一个userAdminAnyDatabase角色的用户。

> use admin

> db.createUser(
{
user: "UserAdmin",
pwd: "UserAdminPwd",
roles: [{ role: 'userAdminAnyDatabase', db: 'admin' }]
}
)

退出mongo shell

4.    启用access-control,重启mongoDB

使用--auth选项重启mongod实例

mongod --auth --port  --dbpath /data/db

启用access-control之后,用户需要先登陆才能进行操作。用户能够执行的操作由账户归属的角色决定。

5.    以管理员账号登陆

通过mongo shell,用户可以:

  • 在连接实例时认证
  • 进入shell, 通过db.auth()进行用户认证

连接时认证

mongo --port  -u 'UserAdmin' -p 'UserAdminPwd' --authenticationDatabase "admin"

连接后认证

mongo --port 

> use admin

> db.auth('UserAdmin', 'UserAdminPwd')

6.    创建其他账户

一旦登陆了管理员账户之后,就可以通过db.createUser()来创建其他账户。账户可以赋予mongoDB内置的角色权限,也可以自定义角色权限。

Mongo内置用户角色见:https://docs.mongodb.com/manual/core/security-built-in-roles/

自定义用户角色见:https://docs.mongodb.com/manual/core/security-user-defined-roles/

账户管理员账号UserAdmin只有管理账户和角色的权限。若UserAdmin企图执行其他操作,如从test数据库中的foo集合读取数据,MongoDB会返回一个error。

以下是创建一个账户的操作

> use test

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

7.    使用myTester账户登陆

连接时认证

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

连接后认证

mongo --port 

> use test

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

myTester用户往集合插入数据

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

最新文章

  1. maven: 基本使用
  2. php模拟数据库常用操作效果
  3. 微信开发之Author网页授权
  4. MikroTik RouterOS防火墙与过滤详解
  5. ArrayBlockingQueue跟LinkedBlockingQueue的区别
  6. 创建ubuntu软件源
  7. MyReport演示下载连接和相关文章索引
  8. GDB: advanced usages
  9. Android View, Window,Activity概念区分(2)
  10. python实现维吉尼亚解密
  11. 使用控制台对Redis执行增删改查命令
  12. springBoot拦截器的使用
  13. JavaScript实现HTML页面集成QQ空间分享功能
  14. SharePoint 2010:搜索服务当前处于脱机状态
  15. html5和css3实现的3D滚动特效
  16. php获取微信用户信息(没测试过)
  17. Eclipse各版本分析比较
  18. 如何卸载掉eclipse中的插件
  19. JBPM4入门——2.在eclipse中安装绘制jbpm流程图的插件
  20. OpenGL — GLFW — 颜色

热门文章

  1. 用expect实现SCP/SSH自动输入密码登录
  2. 洛谷P1108 低价购买题解
  3. 越光后端开发——ygapi(2.新建Model)
  4. POJ - 3616 Milking Time (动态规划)
  5. 20175209 《Java程序设计》第六周学习总结
  6. zabbix Server 4.0 部署及之内置item使用案例
  7. webpack学习笔记——publicPath路径问题
  8. 一些Js操作
  9. undefined reference to symbol 'pthread_create@@GLIBC_2.2.5' 的修改方法
  10. Git可视化教程——Git Gui的使用