MongoDB AUTH结果验证及开启方法

 
 
 
  1. 创建超级管理员(root)和普通用户(gxpt)

#创建超级管理员(root)
RS1:PRIMARY> use admin
RS1:PRIMARY> db.createUser( 
  { user: "root", 
    pwd: "root", 
    roles: [ { role: "root", db: "admin" } ] 
  } 
); 
 
root用户所属admin数据库
RS1:PRIMARY>  db.auth('root', 'root');
返回1 则执行成功
#创建普通用户(gxpt)
#切换至gxpt数据库
RS1:PRIMARY>use gxpt
RS1:PRIMARY>db.createUser( 
  { user: "gxpt", 
    pwd: "gxpt", 
    roles: [ { role: "readWrite", db: "gxpt" } ] 
  } 
); 
gxpt用户所属gxpt数据库
认证用户(gxpt)
RS1:PRIMARY> db.auth("gxpt","gxpt");
1
1返回1 则执行成功
  1. 服务端确认当前用户

RS1:PRIMARY> use admin;
 switched to db admin
RS1:PRIMARY> show users;
{
        "_id" : "admin.root",
        "user" : "root",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "root",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}
RS1:PRIMARY> use gxpt;
switched to db gxpt
RS1:PRIMARY> show users;
{
        "_id" : "gxpt.gxpt",
        "user" : "gxpt",
        "db" : "gxpt",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "gxpt"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}
}用户权限如下  
用户  
角色                      
身份
root 
root
超级管理员
gxpt
readWrite
普通用户
 
  1. 未开启AUTH认证

    1. root用户登录

新建数据库
ok
删除数据库
ok
    1. gxpt用户登录

新建数据库
ok
删除数据库
ok
结论:未启用AUTH,普通用户可以对任何数据库做 创建、删除操作!!!
因此为了规避不规范操作,必须开始Mongo的AUTH认证
 
  1. 官方文档对于角色 <root>的描述

可见:角色<root>是涵盖 readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin, restore, and backup等角色的超级角色
 
  1. 生成秘钥文件

[root@MongoDB236 ~]# openssl rand -base64 100 > /opt/var/data/mongodb/mongodb.key
[root@MongoDB236 ~]# chmod 600 /opt/var/data/mongodb/mongodb.key
请根据初始化参数文件指定该文件名称及目录
远程拷贝至其他节点
[root@MongoDB236 ~]# scp /opt/var/data/mongodb/mongodb.key 192.168.8.237:/opt/var/data/
[root@MongoDB236 ~]# scp /opt/var/data/mongodb/mongodb.key 192.168.8.238:/opt/var/data/
 
  1. 修改初始化参数文件 xxxx.conf文件

。。。
keyFile=/opt/var/data/mongodb/mongodb.key
auth=true
。。。
请放开以上参数
  1. 分别在三个节点重新启动MongoDB

[root@MongoDB236 ~]# service mongodb stop
[root@MongoDB236 ~]# service mongodb start
 
  1. 开启AUTH认证

需要在未启用AUTH的情况下对 admin gxpt启用认证。
> db.auth("admin","admin");
1
> db.auth("gxpt","gxpt");
1
返回1 表明操作正常
 
[root@Mongodb237 mongodb]# mongo -usuper -psuper 127.0.0.1/admin
MongoDB shell version v4.0.0
MongoDB server version: 4.0.0
> db;db;
admin
> show dbs;show dbs;
admin  0.000GB
gxpt   0.000GB
local  0.000GB
ok
 
 
    1. root用户登录

super用户对gxpt数据库创建collection
ok
super用户对gxpt数据库创建collection
Ok
 
    1. gxpt用户登录

gxpt只对gxpt数据库有读写权限,因此可以正常 创建、删除collection
对于其他数据库没有读写权限!!!因此其他数据库不可见
借用客户端对其他库创建collection 报错:未经过认证
结论:启用AUTH之后,普通用户只对所属的数据库有操作权限。
 
posted @ 2018-11-02 14:24  Oracle-fans  阅读(925)  评论(0编辑  收藏  举报