• 售前

  • 售后

热门帖子
入门百科

浅析MongoDB之安全认证

[复制链接]
知足常乐77 显示全部楼层 发表于 2021-8-14 15:25:17 |阅读模式 打印 上一主题 下一主题
目次


  • 一、MongoDB的用户和脚色权限简介

    • 1.1、查看全部内置脚色
    • 1.2、常见的内置脚色

  • 二、单实例情况

    • 2.1、创建用户
    • 2.2、服务端开启认证
    • 2.3、客户端登录认证

  • 三、副本集情况

    • 3.1、添加管理账户
    • 3.2、创建副本集认证的key文件
    • 3.3、修改设置文件指定keyfile
    • 3.4、重启副本集
    • 3.5、毗连测试
    • 3.6、添加平凡用户


一、MongoDB的用户和脚色权限简介

为了强制开启用户访问控制(用户验证),则必要在
  1. MongoDB
复制代码
实例启动时使用选项
  1. --auth
复制代码
或在指定启动设置文件中添加
  1. auth=true
复制代码

       
  • 启用访问控制:
    1. MongoDB
    复制代码
    使用的是基于脚色的访问控制
    1. (Role-Based Access Control,RBAC)
    复制代码
    来管理用户对实例的访问。通过对用户授予一个或多个脚色来控制用户访问数据库资源的权限和数据库操纵的权限,在对用户分配脚色之前,用户无法访问实例。   
  • 脚色:在
    1. MongoDB
    复制代码
    中通过脚色对用户授予相应数据库资源的操纵权限,每个脚色当中的权限可以表现指定,也可以通过集成其他脚色的权限,大概两者都存在的权限。   
  • 权限:权限由指定的数据库(resource)以及答应在运行资源上举行的操纵(action)构成。资源(resource)包罗:数据库、集合、部分集合和集群;操纵(action)包罗:对资源的增、删、改、查(CRUD)操纵。
在脚色界说时可以包罗一个或多个已存在的脚色,新创建的脚色会继承包罗的脚色全部的权限。在同一个数据库中,新创建脚色可以继承其他脚色的权限,在
  1. admin
复制代码
数据库中创建的脚色可以继承在其它恣意数据库中的脚色的权限。
脚色权限的查看,可以通过如下的下令举行查看:
  1. # 查询所有角色权限(仅用户自定义角色)
  2. > db.runCommand({ rolesInfo: 1 })
  3. # 查询所有角色权限(包含内置角色)
  4. > db.runCommand({ rolesInfo: 1, showBuiltinRoles: true })
  5. # 查询当前数据库中的某角色的权限
  6. > db.runCommand({ rolesInfo: "<rolename>" })
  7. # 查询其它数据库中指定的角色权限
  8. > db.runCommand({ rolesInfo: { role: "<rolename>", db: "<database>" } }
  9. # 查询多个角色权限
  10. > db.runCommand({
  11.         rolesInfo: [
  12.                 "<rolename>", { role: "<rolename>", db: "<database>" },
  13.                 ...
  14.         ]
  15. })
复制代码
示例:

1.1、查看全部内置脚色
  1. > db.runCommand({rolesInfo:1, showBuiltinRoles:true})
  2. {
  3.         "roles" : [
  4.                 {
  5.                         "role" : "__queryableBackup",
  6.                         "db" : "admin",
  7.                         "isBuiltin" : true,
  8.                         "roles" : [ ],
  9.                         "inheritedRoles" : [ ]
  10.                 },
  11.                 {
  12.                         "role" : "__system",
  13.                         "db" : "admin",
  14.                         "isBuiltin" : true,
  15.                         "roles" : [ ],
  16.                         "inheritedRoles" : [ ]
  17.                 },
  18.                 {
  19.                         "role" : "backup",
  20.                         "db" : "admin",
  21.                         "isBuiltin" : true,
  22.                         "roles" : [ ],
  23.                         "inheritedRoles" : [ ]
  24.                 },
  25.                 {
  26.                         "role" : "clusterAdmin",
  27.                         "db" : "admin",
  28.                         "isBuiltin" : true,
  29.                         "roles" : [ ],
  30.                         "inheritedRoles" : [ ]
  31.                 },
  32.                 {
  33.                         "role" : "clusterManager",
  34.                         "db" : "admin",
  35.                         "isBuiltin" : true,
  36.                         "roles" : [ ],
  37.                         "inheritedRoles" : [ ]
  38.                 },
  39.                 {
  40.                         "role" : "clusterMonitor",
  41.                         "db" : "admin",
  42.                         "isBuiltin" : true,
  43.                         "roles" : [ ],
  44.                         "inheritedRoles" : [ ]
  45.                 },
  46.                 {
  47.                         "role" : "dbAdmin",
  48.                         "db" : "admin",
  49.                         "isBuiltin" : true,
  50.                         "roles" : [ ],
  51.                         "inheritedRoles" : [ ]
  52.                 },
  53.                 {
  54.                         "role" : "dbAdminAnyDatabase",
  55.                         "db" : "admin",
  56.                         "isBuiltin" : true,
  57.                         "roles" : [ ],
  58.                         "inheritedRoles" : [ ]
  59.                 },
  60.                 {
  61.                         "role" : "dbOwner",
  62.                         "db" : "admin",
  63.                         "isBuiltin" : true,
  64.                         "roles" : [ ],
  65.                         "inheritedRoles" : [ ]
  66.                 },
  67.                 {
  68.                         "role" : "enableSharding",
  69.                         "db" : "admin",
  70.                         "isBuiltin" : true,
  71.                         "roles" : [ ],
  72.                         "inheritedRoles" : [ ]
  73.                 },
  74.                 {
  75.                         "role" : "hostManager",
  76.                         "db" : "admin",
  77.                         "isBuiltin" : true,
  78.                         "roles" : [ ],
  79.                         "inheritedRoles" : [ ]
  80.                 },
  81.                 {
  82.                         "role" : "read",
  83.                         "db" : "admin",
  84.                         "isBuiltin" : true,
  85.                         "roles" : [ ],
  86.                         "inheritedRoles" : [ ]
  87.                 },
  88.                 {
  89.                         "role" : "readAnyDatabase",
  90.                         "db" : "admin",
  91.                         "isBuiltin" : true,
  92.                         "roles" : [ ],
  93.                         "inheritedRoles" : [ ]
  94.                 },
  95.                 {
  96.                         "role" : "readWrite",
  97.                         "db" : "admin",
  98.                         "isBuiltin" : true,
  99.                         "roles" : [ ],
  100.                         "inheritedRoles" : [ ]
  101.                 },
  102.                 {
  103.                         "role" : "readWriteAnyDatabase",
  104.                         "db" : "admin",
  105.                         "isBuiltin" : true,
  106.                         "roles" : [ ],
  107.                         "inheritedRoles" : [ ]
  108.                 },
  109.                 {
  110.                         "role" : "restore",
  111.                         "db" : "admin",
  112.                         "isBuiltin" : true,
  113.                         "roles" : [ ],
  114.                         "inheritedRoles" : [ ]
  115.                 },
  116.                 {
  117.                         "role" : "root",
  118.                         "db" : "admin",
  119.                         "isBuiltin" : true,
  120.                         "roles" : [ ],
  121.                         "inheritedRoles" : [ ]
  122.                 },
  123.                 {
  124.                         "role" : "userAdmin",
  125.                         "db" : "admin",
  126.                         "isBuiltin" : true,
  127.                         "roles" : [ ],
  128.                         "inheritedRoles" : [ ]
  129.                 },
  130.                 {
  131.                         "role" : "userAdminAnyDatabase",
  132.                         "db" : "admin",
  133.                         "isBuiltin" : true,
  134.                         "roles" : [ ],
  135.                         "inheritedRoles" : [ ]
  136.                 }
  137.         ],
  138.         "ok" : 1
  139. }
复制代码
1.2、常见的内置脚色

       
  • 数据库用户脚色:
    1. read
    复制代码
    1. readWrite
    复制代码
       
  • 数据库管理脚色:
    1. dbAdmin
    复制代码
    1. dbOwner
    复制代码
    1. userAdmin
    复制代码
       
  • 集群管理脚色:
    1. clusterAdmin
    复制代码
    1. clusterManager
    复制代码
    1. clusterMonitor
    复制代码
       
  • 全部数据库用户脚色:
    1. readAnyDatabase
    复制代码
    1. readWriteAnyDatabase
    复制代码
    1. userAdminAnyDatabase
    复制代码
    1. dbAdminAnyDatabase
    复制代码
       
  • 备份恢复脚色:
    1. backup
    复制代码
    1. restore
    复制代码
       
  • 超等用户脚色:
    1. root
    复制代码
       
  • 内部脚色:
    1. system
    复制代码
脚色阐明:
            脚色            权限形貌                                    read            可以读取指定数据库中任何数据。                            readWrite            可以读写指定数据库中任何数据,包罗创建、重命名、删除集合                            readAnyDatabase            可以读取全部数据库中任何数据(除了数据库config和local之外)                            readWriteAnyDatabase            可以读写全部数据库中任何数据(除了数据库config和local之外)                            userAdminAnyDatabase            可以在指定数据库创建和修改用户(除了数据库config和local之外)                            dbAdminAnyDatabase            可以读取任何数据库以及对数据库举行清算、修改、压缩、获取统计信息、执行查抄等操纵(除了数据库config和local之外)                            dbAdmin            可以读取指定数据库以及对数据库举行清算、修改、压缩、获取统计信息、执行查抄等操纵                            userAdmin            可以在指定数据库创建和修改用户                            clusterAdmin            可以对整个集群或数据库体系举行管理操纵                            backup            备份MongoDB数据最小的权限                            restore            从备份文件中还原恢复MongoDB数据(除了system.profile集合)的权限                            root            超等账户,超等权限        
二、单实例情况


2.1、创建用户

创建用户格式如下:
  1. db.createUser({
  2.         user:"<name>",
  3.         pwd:"<password>",
  4.         customData:{<any Object Data},
  5.         roles:[
  6.                 {role:"<role>",db:"database"},
  7.                 ...
  8.         ]
  9. })
  10. 备注:
  11. 1)user:新建用户名
  12. 2)pwd:新建用户密码
  13. 3)customData:存放一些用户相关的自定义数据,可忽略
  14. 4)roles:数据类型,配置用户的权限
复制代码
示例:创建一个管理员账户
  1. # mongo --host=10.10.10.11 --port=27017
  2. > show dbs;
  3. admin       0.000GB
  4. collectest  0.000GB
  5. config      0.000GB
  6. local       0.000GB
  7. >
  8. > use admin
  9. switched to db admin
  10. >
  11. > db.createUser({"user":"root","pwd":"123456","roles":[{"role":"root","db":"admin"}]});
  12. Successfully added user: {
  13.         "user" : "root",
  14.         "roles" : [
  15.                 {
  16.                         "role" : "root",
  17.                         "db" : "admin"
  18.                 }
  19.         ]
  20. }
复制代码
查看用户:
  1. # 方法一
  2. > use admin;
  3. switched to db admin
  4. >
  5. > show users;
  6. {
  7.         "_id" : "admin.root",
  8.         "userId" : UUID("d7280144-2886-45eb-95f3-1965be4eb7fe"),
  9.         "user" : "root",
  10.         "db" : "admin",
  11.         "roles" : [
  12.                 {
  13.                         "role" : "root",
  14.                         "db" : "admin"
  15.                 }
  16.         ],
  17.         "mechanisms" : [
  18.                 "SCRAM-SHA-1",
  19.                 "SCRAM-SHA-256"
  20.         ]
  21. }
  22. # 方法二
  23. > use admin;
  24. switched to db admin
  25. >
  26. > show tables;
  27. system.users
  28. system.version
  29. >
  30. > db.system.users.find()
  31. { "_id" : "admin.root", "userId" : UUID("d7280144-2886-45eb-95f3-1965be4eb7fe"), "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "u2nQBHuC2P367Qo5mLhcRw==", "storedKey" : "0ccLsqhpWUyCdAoQKZQNNHwvj9g=", "serverKey" : "9Qxfsw+GCQMwUuyz9AlKRAX6zx0=" }, "SCRAM-SHA-256" : { "iterationCount" : 15000, "salt" : "rxajlRAv8zteEMm6r2Wx8GFY1ShBeLjHUqJ7iA==", "storedKey" : "T9z/0GJ21cxJ4CvnNL+PBGkTYwdPu9YxmRo1CQ2tGp0=", "serverKey" : "UBVuzHOxfKADUdpxIhRBab2HwPdLhNL2yUZzyTXFRt0=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ]
复制代码
2.2、服务端开启认证

修改设置文件:
  1. # vim /usr/local/mongodb/conf/mongodb.conf
  2. dbpath=/usr/local/mongodb/data
  3. logpath=/usr/local/mongodb/log/mongodb.log
  4. bind_ip=0.0.0.0
  5. port=27017
  6. logappend=1
  7. fork=1
  8. auth=true    #开启认证
复制代码
重启服务:
  1. # ps -ef |grep mongod
  2. root       6991      1  0 19:46 ?        00:00:10 mongod -f /usr/local/mongodb/conf/mongodb.conf
  3. root       7438   6395  0 20:14 pts/1    00:00:00 grep --color=auto mongod
  4. # kill -2 6991
  5. #
  6. # mongod -f /usr/local/mongodb/conf/mongodb.conf
复制代码
登岸测试:
  1. # mongo --host=10.10.10.11 --port=27017
  2. MongoDB shell version v4.4.1
  3. connecting to: mongodb://10.10.10.11:27017/?compressors=disabled&gssapiServiceName=mongodb
  4. Implicit session: session { "id" : UUID("cb337048-a9c8-45ae-99aa-b0cb8cc7a163") }
  5. MongoDB server version: 4.4.1
  6. > show dbs   #查看
  7. >
  8. > use admin   #切换到admin库
  9. switched to db admin
  10. > db.auth("root","123456")        #进行认证
  11. 1
  12. > show dbs;
  13. admin       0.000GB
  14. collectest  0.000GB
  15. config      0.000GB
  16. local       0.000GB
复制代码
添加一个平凡用户:
创建平凡用户可以在没有开启认证的时候添加,也可以在开启认证之后添加,但开启认证之后,必须使用有操纵
  1. admin
复制代码
库的用户登录认证后才气操纵。底层是将用户信息生存在了
  1. admin
复制代码
数据库的集合
  1. system.users
复制代码
中。
  1. # 创建(切换)将来要操作的数据库articledb
  2. > use articledb
  3. switched to db articledb
  4. >
  5. > db.createUser({user:"user1",pwd:"1234",roles:[{role:"readWrite",db:"articledb"}]})
  6. Successfully added user: {
  7.         "user" : "user1",
  8.         "roles" : [
  9.                 {
  10.                         "role" : "readWrite",
  11.                         "db" : "articledb"
  12.                 }
  13.         ]
  14. }
  15. # 测试是否可用
  16. > db.auth("user1","1234")
  17. 1
复制代码
2.3、客户端登录认证

方法1
先毗连,在认证:
  1. # mongo --host 10.10.10.11 --port 27017
  2. MongoDB shell version v4.4.1
  3. connecting to: mongodb://10.10.10.11:27017/?compressors=disabled&gssapiServiceName=mongodb
  4. Implicit session: session { "id" : UUID("4efbbc03-31b7-45ff-8b3a-5ce6f76ff1ca") }
  5. MongoDB server version: 4.4.1
  6. > use admin
  7. switched to db admin
  8. > db.auth("root","123456")
  9. 1
  10. > show dbs
  11. admin       0.000GB
  12. collectest  0.000GB
  13. config      0.000GB
  14. local       0.000GB
复制代码
方法2
毗连时举行认证:
  1. # mongo --host 10.10.10.11 --port 27017 --authenticationDatabase admin -u root -p 123456
  2. MongoDB shell version v4.4.1
  3. connecting to: mongodb://10.10.10.11:27017/?authSource=admin&compressors=disabled&gssapiServiceName=mongodb
  4. Implicit session: session { "id" : UUID("0848b5d0-fb56-40eb-9b37-542682fd6ada") }
  5. MongoDB server version: 4.4.1
  6. ......
  7. >
  8. > show dbs
  9. admin       0.000GB
  10. collectest  0.000GB
  11. config      0.000GB
  12. local       0.000GB
复制代码
参数阐明:
       
    1. --host
    复制代码
    :毗连的主机地点   
    1. --port
    复制代码
    :毗连的端口   
    1. --authenticationDatabase
    复制代码
    :指定毗连到哪个库。当登录是指定用户暗码时,必须指定对应的数据库!   
    1. -u
    复制代码
    :用户名   
    1. -p
    复制代码
    :暗码

三、副本集情况

对于搭建好的
  1. mongodb
复制代码
副本集,为了安全,启动安全认证,使用账户暗码登录。
对副本集执行访问控制必要设置两个方面:
1)副本集和共享集群的各个节点成员之间使用内部身份验证,可以使用秘钥文件或
  1. x.509
复制代码
证书。秘钥文件比力简单。
2)使用客户端毗连到
  1. mongodb
复制代码
集群时,可开启访问授权。对于集群外部的访问。如通过可视化客户端、大概通过代码毗连的时候,必要开启授权。

3.1、添加管理账户

在主节点添加管理账户,副本聚会会议主动同步。
  1. myrs:PRIMARY> use admin
  2. switched to db admin
  3. myrs:PRIMARY> db.createUser({user:"root",pwd:"123456",roles:[{role:"root",db:"admin"}]})
  4. Successfully added user: {
  5.         "user" : "root",
  6.         "roles" : [
  7.                 {
  8.                         "role" : "root",
  9.                         "db" : "admin"
  10.                 }
  11.         ]
  12. }
复制代码
备注:
该步骤也可以在开启认证之后,但必要通过
  1. localhost
复制代码
登录才答应添加用户,用户数据也会主动同步到副本集。后续再创建其他用户,都已使用该超管用户创建。

3.2、创建副本集认证的key文件

天生一个key文件到当前文件夹中。
可以使用任何方法天生秘钥文件,例如,一下使用
  1. openssl
复制代码
天生暗码文件,然后使用
  1. chmod
复制代码
来更改文件权限,仅为文件全部这提供读取权限。
  1. # openssl rand -base64 90 -out ./mongo.keyfile
  2. # chmod 400 ./mongo.keyfile
  3. # ll mongo.keyfile
  4. -r--------. 1 root root 122 Nov 17 16:27 mongo.keyfile
复制代码
备注:
全部副本集节点都必须使用同一份
  1. keyfile
复制代码
,一样寻常在一台呆板上天生,然后拷贝到其他呆板上,且必须有读的权限,否则将来会报错:
  1. permissions on /mongodb/replica_sets/myrs_27017/mongo.keyfile are too open
复制代码
一样寻常情况下和设置文件放置在一起,方便查找。这里都
  1. copy
复制代码
到各个节点的设置文件目次
  1. # cp mongo.keyfile /data/replica_sets/myrs_27017/
  2. # cp mongo.keyfile /data/replica_sets/myrs_27018/
  3. # cp mongo.keyfile /data/replica_sets/myrs_27019/
复制代码
3.3、修改设置文件指定keyfile

分别编辑几个服务的
  1. mongod.conf
复制代码
文件,添加干系内容:
  1. # vim /data/replica_sets/myrs_27017/mongod.conf
  2. security:
  3.     #keyfile鉴权文件
  4.     keyFile: /data/replica_sets/myrs_27017/mongo.keyfile
  5.     #开启认证方式运行
  6.     authorization: enabled
  7. # vim /data/replica_sets/myrs_27018/mongod.conf
  8. security:
  9.     #keyfile鉴权文件
  10.     keyFile: /data/replica_sets/myrs_27018/mongo.keyfile
  11.     #开启认证方式运行
  12.     authorization: enabled
  13. # vim /data/replica_sets/myrs_27019/mongod.conf
  14. security:
  15.     #keyfile鉴权文件
  16.     keyFile: /data/replica_sets/myrs_27019/mongo.keyfile
  17.     #开启认证方式运行
  18.     authorization: enabled
复制代码
3.4、重启副本集

假如副本集是开启状态,则先分别关闭副本集中的每个
  1. mongod
复制代码
,从次节点开始。直到副本集的全部成员都离线,包罗任何仲裁者。主节点必须是最后一个成员关闭,以避免潜伏的回滚。
  1. # ps -ef |grep mongod
  2. root       2649      1  1 11:20 ?        00:04:44 mongod -f /data/replica_sets/myrs_27017/mongod.conf
  3. root       2728      1  1 11:20 ?        00:05:21 mongod -f /data/replica_sets/myrs_27018/mongod.conf
  4. root       4534      1  0 14:13 ?        00:01:07 mongod -f /data/replica_sets/myrs_27019/mongod.conf
  5. # kill -2 2649 4534 2728
复制代码
分别启动副本集:
  1. # mongod -f /data/replica_sets/myrs_27017/mongod.conf
  2. about to fork child process, waiting until server is ready for connections.
  3. forked process: 6287
  4. child process started successfully, parent exiting
  5. #
  6. # mongod -f /data/replica_sets/myrs_27018/mongod.conf
  7. about to fork child process, waiting until server is ready for connections.
  8. forked process: 6365
  9. child process started successfully, parent exiting
  10. #
  11. # mongod -f /data/replica_sets/myrs_27019/mongod.conf
  12. about to fork child process, waiting until server is ready for connections.
  13. forked process: 6456
  14. child process started successfully, parent exiting
复制代码
查看进程情况:
  1. # ps -ef |grep mongo
  2. root       6287      1  3 16:40 ?        00:00:02 mongod -f /data/replica_sets/myrs_27017/mongod.conf
  3. root       6365      1  3 16:41 ?        00:00:02 mongod -f /data/replica_sets/myrs_27018/mongod.conf
  4. root       6456      1  2 16:41 ?        00:00:01 mongod -f /data/replica_sets/myrs_27019/mongod.conf
复制代码
3.5、毗连测试

毗连主节点测试:
先毗连,再认证
  1. # mongo --host 10.10.10.11 --port 27017
  2. MongoDB shell version v4.4.1
  3. connecting to: mongodb://10.10.10.11:27017/?compressors=disabled&gssapiServiceName=mongodb
  4. Implicit session: session { "id" : UUID("e1218d07-5094-468d-bdfe-f1d3e3815281") }
  5. MongoDB server version: 4.4.1
  6. myrs:PRIMARY> show dbs
  7. myrs:PRIMARY> db.auth("root","123456")
  8. 1
  9. myrs:PRIMARY> show dbs
  10. admin       0.000GB
  11. collectest  0.000GB
  12. config      0.000GB
  13. local       0.001GB
  14. test        0.000GB
复制代码
毗连时举行认证:
  1. # mongo --host 10.10.10.11 --port 27017 --authenticationDatabase admin -u root -p 123456
  2. ---
  3. myrs:PRIMARY> show dbs
  4. admin       0.000GB
  5. collectest  0.000GB
  6. config      0.000GB
  7. local       0.001GB
  8. test        0.000GB
复制代码
毗连副本节点测试:
  1. # mongo --host 10.10.10.11 --port 27018 --authenticationDatabase admin -u root -p 123456
  2. myrs:SECONDARY> show dbs        #查看数据库,这里不能查看是因为默认副本节点不能查询数据,需要开启查询权限
  3. uncaught exception: Error: listDatabases failed:{
  4.         "topologyVersion" : {
  5.                 "processId" : ObjectId("5fb38ca9ae9c791f8008eb9a"),
  6.                 "counter" : NumberLong(4)
  7.         },
  8.         "operationTime" : Timestamp(1605603187, 1),
  9.         "ok" : 0,
  10.         "errmsg" : "not master and slaveOk=false",
  11.         "code" : 13435,
  12.         "codeName" : "NotMasterNoSlaveOk",
  13.         "$clusterTime" : {
  14.                 "clusterTime" : Timestamp(1605603187, 1),
  15.                 "signature" : {
  16.                         "hash" : BinData(0,"hCt+wCrLo2uwZucZsLN0id+Rnh0="),
  17.                         "keyId" : NumberLong("6893051287466672133")
  18.                 }
  19.         }
  20. } :
  21. _getErrorWithCode@src/mongo/shell/utils.js:25:13
  22. Mongo.prototype.getDBs/<@src/mongo/shell/mongo.js:147:19
  23. Mongo.prototype.getDBs@src/mongo/shell/mongo.js:99:12
  24. shellHelper.show@src/mongo/shell/utils.js:937:13
  25. shellHelper@src/mongo/shell/utils.js:819:15
  26. @(shellhelp2):1:1
  27. myrs:SECONDARY>
  28. myrs:SECONDARY> rs.secondaryOk()        #开启副本集读取权限
  29. myrs:SECONDARY>
  30. myrs:SECONDARY> show dbs        #再次查看
  31. admin       0.000GB
  32. collectest  0.000GB
  33. config      0.000GB
  34. local       0.001GB
  35. test        0.000GB
复制代码
3.6、添加平凡用户

添加平凡用户对指定库有读写权限:
  1. //连接主节点
  2. # mongo --host 10.10.10.11 --port 27017 --authenticationDatabase admin -u root -p 123456
  3. myrs:PRIMARY> use collectest        #切换到collectest库
  4. switched to db collectest
  5. myrs:PRIMARY>
  6. myrs:PRIMARY> db.createUser({user:"u_test",pwd:"123",roles:[{role:"readWrite", db:"collectest"}]})        #创建用户u_test对collectest库有读写权限
  7. Successfully added user: {
  8.         "user" : "u_test",
  9.         "roles" : [
  10.                 {
  11.                         "role" : "readWrite",
  12.                         "db" : "collectest"
  13.                 }
  14.         ]
  15. }
  16. myrs:PRIMARY>
复制代码
使用平凡用户登录并查询数据:
  1. # mongo --host 10.10.10.11 --port 27017 --authenticationDatabase collectest -u u_test -p 123
  2. ...
  3. myrs:PRIMARY>
  4. myrs:PRIMARY> show dbs
  5. collectest  0.000GB
  6. myrs:PRIMARY>
  7. myrs:PRIMARY> use collectest
  8. switched to db collectest
  9. myrs:PRIMARY>
  10. myrs:PRIMARY> show collections
  11. collectest
  12. myrs:PRIMARY>
  13. myrs:PRIMARY> db.collectest.find()
  14. { "_id" : ObjectId("5faa3432f6e79c62c00e4d72"), "name" : "张三", "sex" : "男", "age" : 22, "userid" : 1001, "createdatetime" : ISODate("2020-11-10T06:33:22.459Z") }
  15. { "_id" : ObjectId("5facec10cca53c48154d261c"), "name" : "小白", "sex" : "女", "age" : 20, "userid" : 1002, "createdatetime" : ISODate("2020-11-12T08:02:24.915Z") }
  16. { "_id" : ObjectId("5facf32dfb5fe16aaf699d7d"), "name" : "小嘿", "sex" : "女", "age" : 21, "userid" : 1002, "createdatetime" : ISODate("2020-11-12T08:32:45.919Z") }
  17. myrs:PRIMARY>
  18. #查询一个普通用户没有权限的库,则会提示响应警告,并无法查看成功。
  19. myrs:PRIMARY> use admin
  20. switched to db admin
  21. myrs:PRIMARY> show collections
  22. Warning: unable to run listCollections, attempting to approximate collection names by parsing connectionStatus
复制代码
以上就是浅析MongoDB之安全认证的具体内容,更多关于MongoDB 安全认证的资料请关注草根技术分享其它干系文章!

帖子地址: 

回复

使用道具 举报

分享
推广
火星云矿 | 预约S19Pro,享500抵1000!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

草根技术分享(草根吧)是全球知名中文IT技术交流平台,创建于2021年,包含原创博客、精品问答、职业培训、技术社区、资源下载等产品服务,提供原创、优质、完整内容的专业IT技术开发社区。
  • 官方手机版

  • 微信公众号

  • 商务合作