1.Mongo中的权限架构

mongo中以用户-角色-数据来进行相对应权限的配置,其中只有部分角色有对系统级数据库有操作权限
具体架构大致如下:
image.png

2.Mongo中的内置角色信息

  1. read:提供读取所有非系统的集合(数据库)
  2. readWrite:提供读写所有非系统的集合(数据库)和读取所有角色的所有权限
  3. dbAdmin:提供执行管理任务的功能,例如与架构相关的任务,索引编制,收集统计信息。此角色不授予用户和角色管理权限。
  4. dbOwner:提供对数据库执行任何管理操作的功能。此角色组合了readWrite,dbAdmin和userAdmin角色授予的权限。
  5. userAdmin:提供在当前数据库上创建和修改角色和用户的功能。由于userAdmin角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供对数据库的超级用户访问权限,或者,如果作用于管理数据库,则提供对群集的访问权限。
  6. clusterAdmin:提供最佳的集群管理访问。此角色组合了clusterManager,clusterMonitor和hostManager角色授予的权限。此外,该角色还提供了dropDatabase操作。
  7. readAnyDatabase:仅在admin 数据库中使用,提供所有数据库的读权限。
  8. readWriteAnyDatabase:仅在admin 数据库中使用,提供所有数据库的读写权限
  9. userAdminAnyDatabase:仅在admin 数据库中使用,提供与userAdmin相同的用户管理操作访问权限,允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供超级用户访问权限。
  10. dbAdminAnyDatabase:仅在admin 数据库中使用,提供与dbAdmin相同的数据库管理操作访问权限,该角色还在整个群集上提供listDatabases操作。
  11. root:仅在admin 数据库中使用,提供超级权限

    3.单节点mongo授权步骤

    在部署并启动mongo后,也需要对mongo进行权限配置。因为通常在生产环境中通常对于权限的设置都比较严格。因此在日常学习中为了模拟线上环境,同时保证自己mongo服务器的安全,也需要进行相应的配置
    需要注意的是,一定在创建用户后,再开启权限认证!!!!!!!!!!!!!!!

    创建超级管理员

    超级管理员可以给任何用户进行授权操作,但是超级管理员只能操作授权的数据库
    具体步骤如下

  12. 登录mongo

  13. use admin
  14. 创建管理员账号:db.createUser({ user:’root’, pwd:’123456’, roles:[{role:’root’,db:’admin’}]})
  15. 验证管理员账号:db.auth(“root”, “123456”)
  16. exit

    创建普通管理员(假设目前库为test数据库)

  17. 登录mongo

  18. use test
  19. 创建管理员账号:db.createUser({ user: “test”,pwd: “test”,roles: [ { role: “dbOwner”, db: “test” }]})
  20. 验证管理员账号:db.auth(“test”, “test”)
  21. exit

    修改配置文件重启服务

  22. vim /usr/local/mongodb/etc/mongodb.conf

  23. 在文件末尾追加内容:auth=true
  24. cd /usr/local/mongodb/bin
  25. ./mongod -shutdown —config /usr/local/mongodb/etc/mongodb.conf
  26. ./mongod —config /usr/local/mongodb/etc/mongodb.conf

    4.副本集mongo授权步骤

    登录主节点

    mongo 120.48.107.224

    创建超级管理员

    步骤与单节点一致

    创建普通管理员(假设目前库为test数据库)

    步骤与单节点一致

    生成keyFIle并复制、授权

  27. openssl rand -base64 666 > /usr/local/mongodb-set/keyfile

  28. cp /usr/local/mongodb-set/keyfile /usr/local/mongodb-set/primary/config/keyfile
  29. cp /usr/local/mongodb-set/keyfile /usr/local/mongodb-set/secondary/config/keyfile
  30. cp /usr/local/mongodb-set/keyfile /usr/local/mongodb-set/arbiter/config/keyfile
  31. chmod 600 /usr/local/mongodb-set/primary/config/keyfile
  32. chmod 600 /usr/local/mongodb-set/secondary/config/keyfile
  33. chmod 600 /usr/local/mongodb-set/arbiter/config/keyfile

    配置文件添加授权配置

  34. vim /usr/local/mongodb-set/primary/config/mongod.conf

    1. security:
    2. keyFile: /usr/local/mongodb-set/primary/config/keyfile
    3. authorization: enabled
  35. vim /usr/local/mongodb-set/secondary/config/mongod.conf

    1. security:
    2. keyFile: /usr/local/mongodb-set/secondary/config/keyfile
    3. authorization: enabled
  36. vim /usr/local/mongodb-set/arbiter/config/mongod.conf

    1. security:
    2. keyFile: /usr/local/mongodb-set/arbiter/config/keyfile
    3. authorization: enabled

    关闭节点

  37. 主节点:/usr/local/mongodb-set/mongo/bin/mongod —shutdown —config /usr/local/mongodb-set/primary/config/mongod.conf

  38. 从节点:/usr/local/mongodb-set/mongo/bin/mongod -shutdown —config /usr/local/mongodb-set/secondary/config/mongod.conf
  39. 仲裁节点:/usr/local/mongodb-set/mongo/bin/mongod -shutdown —config /usr/local/mongodb-set/arbiter/config/mongod.conf

    启动节点

  40. 主节点:/usr/local/mongodb-set/mongo/bin/mongod —config /usr/local/mongodb-set/primary/config/mongod.conf

  41. 从节点:/usr/local/mongodb-set/mongo/bin/mongod —config /usr/local/mongodb-set/secondary/config/mongod.conf
  42. 仲裁节点:/usr/local/mongodb-set/mongo/bin/mongod —config /usr/local/mongodb-set/arbiter/config/mongod.conf

    5.Mongo中链接数据库的命令

    链接命令格式

  43. 链接本地无权限认证:mongo

  44. 链接远程无权限认证:mongo 120.48.107.224
  45. 链接本地有权限认证:mongo -u ${用户名} —authenticationDatabase ${授权数据库} -p ${密码}
  46. 链接远程有权限认证:mongo -host 120.48.107.224 -u ${用户名} —authenticationDatabase ${授权数据库} -p ${密码}

    windows链接示例

  47. 链接本地无权限认证:mongo

  48. 链接远程无权限认证:mongo 120.48.107.224
  49. 链接本地有权限认证:mongo -u root —authenticationDatabase admin -p 123456
  50. 链接远程有权限认证:mongo -host 120.48.107.224 -u test —authenticationDatabase files -p test
  51. 链接远程有权限认证:mongo -host 120.48.107.224 -u ftc —authenticationDatabase java_test -p 1213456

    linux链接示例

  52. 链接本地无权限认证:进入安装bin目录下,./mongo

  53. 链接本地有权限认证:进入安装bin目录下,./mongo -u root —authenticationDatabase ‘admin’ -p ‘123456’

    6.个人常用链接

  54. 远程链接副本集主节点(admin):mongo 120.48.107.224 -u root —authenticationDatabase admin -p 123456

  55. 远程链接副本集主节点(java_test):mongo 120.48.107.224 -u java_test —authenticationDatabase java_test -p java_test
  56. 远程链接副本集主节点(java_test_bak):mongo 120.48.107.224 -u java_test_bak —authenticationDatabase java_test_bak -p java_test_bak