• MongoDB 基础了解(二)


    一、用户与权限管理

    1.常用权限

    2.创建管理用户

            MongoDB有一个用户管理机制,简单描述为管理用户组,这个组的用户是专门为管理普通用户而设的,暂且称之为管理员。

            管理员通常没有数据库的读写权限,只有操作用户的权限,我们只需要赋予管理员 userAdminAnyDatabase 角色即可。另外管理员账户必须在admin数据库下创建。

             由于用户被创建在哪个数据库下,就只能在哪个数据库登录,所以把所有的用户都创建在admin数据库下。这样我们切换数据库时就不需要频繁的进行登录了。

            先 use admin 切换至admin 数据库进行登录,登录后再use切换其他数据库进行操作即可。第二次的 use就不需要再次登录了。MongoDB设定use第二个数据库时如果登录用户权限比较高就可以直接操作第二个数据库,而不需要登录。

    1. > show dbs
    2. > use admin
    3. > show users
    4. > db.createUser({
    5. ... user:"uaad",
    6. ... pwd:"uaad",
    7. ... roles:[ {
    8. ... "role":"userAdminAnyDatabase",
    9. ... "db":"admin"
    10. ... }] }
    11. ... )
    12. > show users
    13. ·user:用户名
    14. ·pwd:密码
    15. ·customData:存放用户相关的自定义数据,该属性也可忽略
    16. ·roles:数组类型,配置用户的权限

    开启身份验证并重启服务:

    1. 管理员账户创建完成以后,需要重新启动MongoDB,并开启身份验证功能。
    2. 便用认证函数 db.auth(“用户名”,”密码”)进行身份认证。返回结果1,则表示认证成功,返回0则表示认证失败。
    3. 登录成功以后即可进行该用户所拥有的角色对应的权限的其他操作,比如 show dbss再次查看所有数据库信息。
    1. [root@sql ~]# vim /usr/local/mongodb/bin/mongodb.conf
    2. #开启身份验证功能
    3. auth = true # authorization 的缩写
    4. [root@sql ~]# mongod -f /usr/local/mongodb/bin/mongodb.conf --shutdown
    5. [root@sql ~]# mongod -f /usr/local/mongodb/bin/mongodb.conf
    6. [root@sql ~]# mongo
    7. > show dbs # 没有登录查看不到信息
    8. > use admin # 只能到 admin 数据库下登录用户
    9. switched to db admin
    10. > db.auth("uaad","uaad")
    11. 1 # 返回1登录成功,返回0登录失败
    12. > show dbs
    13. admin 0.000GB
    14. config 0.000GB
    15. local 0.000GB

     3.创建普通用户

            需求:创建一个test数据库,给这个数据库添加一个用户,用户名为testuser,密码为123456。并授予该用户对test数据库的读写操作权限。

    1.管理员登录数据库

    普通用户需要由管理员用户创建,所以先便用管理员用户登录数据库。

    1. > use admin
    2. switched to db admin
    3. > db.auth("uaad","uaad"
    4. 1

    2.创建数据库

    MongoDB没有特定创建数据库的语法,在便用use切换数据库时,如果对应的数据库不存在则直接创建并切换。

    1. > use test
    2. switched to db test

    3.创建用户

    1. > db.createUser({user:"testuser",pwd:"123456",roles:[{role:"readWrite",db:"test"}]})
    2. Successfully added user: {
    3. "user" : "testuser",
    4. "roles" : [
    5. {
    6. "role" : "readWrite",
    7. "db" : "test"
    8. }
    9. ]
    10. }

     4.更新用户

    1.更新角色

            如果我们需要对已存在的用户进行角色修改,可以使用 db.updateUser()函数来更新用户角色。注意:执行该函数需要当前用户具有 userAdmin 或 userAdminAnyDatabse 或 root 角色。

    db.updateUser("用户名",{"roles":[{"role”:"角色名称",db:"数据库”},{"更新项2""更新内容"}]})

            比如给刚才的 uaad 用户再添加 readWriteAnyDatabase 和 dbAdminAnyDatabase 权限。

    1. > db.updateUser("uaad", {"roles":[{"role":"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"},{role:"dbAdminAnyDatabase",db:"admin"}]})
    2. > show users
    3. {
    4. "_id" : "admin.uaad",
    5. "userId" : UUID("b6532586-b403-4cb0-9a10-a0c84ee8ce9e"),
    6. "user" : "uaad",
    7. "db" : "admin",
    8. "roles" : [
    9. {
    10. "role" : "userAdminAnyDatabase",
    11. "db" : "admin"
    12. },
    13. {
    14. "role" : "readWriteAnyDatabase",
    15. "db" : "admin"
    16. },
    17. {
    18. "role" : "dbAdminAnyDatabase",
    19. "db" : "admin"
    20. }
    21. ],
    22. "mechanisms" : [
    23. "SCRAM-SHA-1",
    24. "SCRAM-SHA-256"
    25. ]
    26. }

    2.更新密码

            更新用户密码有以下两种方式,更新密码时需要切换到该用户所在的数据库。注意:需要使用具有 userAdmin或 userAdminAnyDatabse 或 root 角色的用户执行:

    • 使用 db.updateUser ("用户名",  {"pwd":"新密码"}) 函数更新密码
    • 便用 db.changeUserPassword ("用户名", "新密码") 函数更新密码

    5.删除用户

            通过 db.dropUser()函数可以删除指定用户,删除成功以后会返回true。删除用户时需要切换到该用户所在的数据库。注意:需要使用具有 userAdmin 或 userAdminAnyDatabse 或 root 角色的用户才可以删除其他用户。

    1. > use admin
    2. switched to db admin
    3. > db.auth("uaad","uaad")
    4. 1
    5. > use test
    6. switched to db test
    7. > show users
    8. {
    9. "_id" : "test.testuser",
    10. "userId" : UUID("ae6e219d-3c1c-41ba-a8d6-1ab6724dd480"),
    11. "user" : "testuser",
    12. "db" : "test",
    13. "roles" : [
    14. {
    15. "role" : "readWrite",
    16. "db" : "test"
    17. }
    18. ],
    19. "mechanisms" : [
    20. "SCRAM-SHA-1",
    21. "SCRAM-SHA-256"
    22. ]
    23. }
    24. > db.dropUser("testuser")
    25. true
    26. > show users

  • 相关阅读:
    Kotlin(十)类的继承
    java面试题-并发编程相关面试题
    Linux 操作另一台服务器
    ACL 2019 - AMR Parsing as Sequence-to-Graph Transduction
    【Arduino】实验使用ESP32单片机根据光线变化控制LED小灯开关(图文)
    NSSCTF做题
    SpringBoot源码篇(二)启动过程
    Nacos整合到SpringCloud中
    vue项目上线后去除控制台所有console.log打印-配置说明
    Appl swc
  • 原文地址:https://blog.csdn.net/weixin_46560589/article/details/126250587