mongo访问控制启用

版本

mongo>=4.4

概念

认证库(authenticationDatabase):这里的认证库是一个跟mysql等其他库很不一样的地方。我的理解是把他当做一个登录的选项。相当于你除了用户名密码,还需要知道认证库是哪一个。那怎么知道认证库?用户在哪个数据库下创建的,认证库就是哪一个。

超级管理员

在启用访问控制前,你需要在admin库中创建一个拥有 userAdmin 或者 userAdminAnyDatabase角色的超级管理员,这个管理员后续用来管理user和roles,比如创建用户,授权或撤销某个用户的角色,以及创建和修改自定义角色

启用访问控制步骤

  1. 启动mongodb。不启用访问控制
mongod --port 27017 --dbpath /var/lib/mongodb
  1. 连接实例
mongo --port 27017 
  1. 创建管理员
use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // 这里也可以直接写你要设置的密码
    roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ]
  }
)

创建用户所在数据库是用户的authentication database(认证数据库)。尽管用户将对此数据库进行身份验证,但该用户可以在其他数据库中拥有roles; 即用户的认证数据库不限制用户的权限;但是创建用户的信息存放在admin库中

  1. 重启实例,开启访问控制
a. 关闭mongo实例 db.adminCommand( { shutdown: 1 } )
b. 退出 mongo shell
c. mongod --auth --port 27017 --dbpath /var/lib/mongodb
    如果是你是用配置文件启动,你需要在配置文件中添加如下配置开启访问控制
    security:
        authorization: enabled
  1. 使用管理员连接mongo实例 有两种连接方式
  • 直接通过mongo 连接并携带凭证 mongo --port 27017 --authenticationDatabase “admin” -u “myUserAdmin” -p
  • 先连接,然后在通过db.auth()方法认证
mongo --port 27017
# 切换到认证库
use admin
# 认证
db.auth(<username>, <pwd>)
  1. 管理员创建成功,则可以按需创建用户。

就可以使用db.createUser()方法创建其他用户。你可以复制任意内置roles和用户自定义roles给创建的用户 举例如下:在testDB
数据库下创建一个myTester用户。同时赋予对test库的readWrite角色和对reporting库的read角色。

这里说明下, 为什么切换到testDB上创建用户, 因为只有切换到该库创建,用户的认证库才是testDB。但是创建用户的信息存放在admin库中


use testDB
db.createUser(
  {
    user: "myTester",
    pwd:  passwordPrompt(),   // or cleartext password
    roles: [ { role: "readWrite", db: "testDB" },
             { role: "read", db: "reporting" } ]
  }
)
  1. 使用myTester用户登录
mongo --port 27017 -u "myTester" --authenticationDatabase "testDB" -p
  1. 使用myTester插入文档
db.foo.insert( { x: 1, y: 1 } )

内置角色

role种类

  • Database User Roles
  • Database Administration Roles
  • Cluster Administration Roles
  • Backup and Restoration Roles
  • All-Database Roles
  • Superuser Roles
  • Internal Role

自托管mongo服务内置角色

  • 每个数据库都包含Database user和Database administration角色
  • 只有admin数据库包含所有角色

新库创建新用户的整体步骤

  1. 需要超级管理员
  2. 管理员登录
  • db.auth方式
use admin
db.auth("root","xxx");
  • 命令行方式
mongo  -u root -p xxx --authenticationDatabase admin 
  1. use newDatabase
  2. db.createUser() 赋予角色和对应的认证库
   {
   user: "salary",
   pwd:  "salary",  
   roles: [ { role: "dbOwner", db: "vv_salary" } ]
   }
  这里的role常用值有 dbOwner  read  readWrite readAnyDatabase ... 
  1. 退出,用新用户登录

关注:鲁班曰

参考文献

Enable Access Control
Built-In Roles

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值