• mongo 4.4 访问控制启用


    超级管理员

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

    启用访问控制步骤

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

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

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

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

    use test
    db.createUser(
      {
        user: "myTester",
        pwd:  passwordPrompt(),   // or cleartext password
        roles: [ { role: "readWrite", db: "test" },
                 { role: "read", db: "reporting" } ]
      }
    )
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 使用myTester用户登录
    mongo --port 27017 -u "myTester" --authenticationDatabase "test" -p
    
    • 1
    1. 使用myTester插入文档
    db.foo.insert( { x: 1, y: 1 } )
    
    • 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");
    
    • 1
    • 2
    • 命令行方式
    mongo  -u root -p xxx --authenticationDatabase admin 
    
    • 1
    1. use newDatabase
    2. db.createUser() 赋予角色和对应的认证库
    3. 退出,用新用户登录

    vx:ashinstrong

    参考文献

    Enable Access Control

    Built-In Roles

  • 相关阅读:
    2023届春招实习-个人面试过程和面经分享
    【Harbor作为Chart仓库】Helm离线部署AWX1.0.0
    java毕业设计房屋租赁平台mybatis+源码+调试部署+系统+数据库+lw
    Mysql基本命令操作
    spark集群环境下,实现人口平均年龄计算
    (Note)动态规划的基本步骤
    KafkaQ - 好用的 Kafka Linux 命令行可视化工具
    电赛控制类PID算法实现
    Mysql——压缩包方式安装教程
    如何处理linux 自动执行的sh脚本
  • 原文地址:https://blog.csdn.net/z475382220/article/details/133351280