欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

程序员文章站 2022-05-08 11:21:27
...

上篇文章讲到了mongodb的安装和默认启动。

这篇文章主要是解决在测试使用mongodb的时候,总是出现的MongoAuthenticationException 异常和 not authorized for query,not authorized on admin to execute command 等问题。

一样:记得在管理员模式下运行CMD,否则服务将启动失败

直接上测试步骤图拉。这里将每次操作的命令都写下来,方便大家更好的复制。

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

我这个是先卸载了原来的mongo服务,然后删除我们配置的data文件夹下的所有东西,同时又清空原来测试生成的log。主要是造就个干净的测试环境。

然后再次重新启动服务,这个启动服务是带权限认证的,也就是说,你没有权限认证,是不可以操作数据库的。

你要回忆一下,你报上面的bug,是不是没有弄这个,或者你的账户,是在打开权限认证之前就添加的user。

为了测试的准确性。我建议,像我这样,直接全部干掉,整个干净的测试环境,再来一遍。反正也挺快的。
进入mongo命令行的运行环境。在admin这个管理数据库用户的数据库上添加个数据库管理账户。再退出命令行shell。

    mongod --remove --serviceName "MongoDB"  

    mongod --config "D:\mongodb\mongo.conf"  --auth --install --serviceName "MongoDB"  

    net start MongoDB  

    use admin  

    db.createUser({user: "admin",pwd: "password",roles: [ { role: "root", db: "admin" } ]});(这个命令是解决问题的重点)  

    exit  

再次启动也不能说是启动,就是再次进入mongo的命令行模式,登录吧算是,并认证用户和密码

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

    mongo --port 27017 -u admin -p password --authenticationDatabase admin  

    //创建数据库lxkdb,当在这个数据库写入数据的时候,这个数据库就出现了。  
    use lxkdb  

    //创建普通账户  
    db.createUser({user: "tester",pwd: "password",roles: [{ role: "readWrite", db: "lxkdb" }]});  

    //选择刚刚创建的数据库  
    use lxkdb  

    //然后进行数据库权限的认证,返回1就是认证OK,0就是认证失败。这个也是重点,在操作数据库之前要有那么一次的权限 认证。这个不是你从那个admin数据库切换到这个lxkdb数据库了吗,所以要权限认证一下,最好认证一下,  
    db.auth('tester','password')  

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

    //在数据库lxkdb中,插入一条数据,这个表叫student
    db.student.save({name: 'zhangsan', age: 25, sex: true});  

    //显示当前数据库有的集合,也就是表啦   
    show collections 

    //查student表全部
    db.student.find()  

下面是使用robo3t这个数据库工具看到的测试结果。

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

管理员账号测试:

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

普通账号测试:

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

看来都成功了!

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

可以看到所有的数据库,一共有三个,其中两个是system级别的,admin和local,这两个是mongo装完之后,自带的。还有个就是我刚刚创建的那个lxkdb数据库啦,可以看到这个数据库里面是有数据的。也是我刚刚插入的。

然后再使用一般的普通的数据库账户登录,看看是什么效果。

Mongodb带权限控制的安装服务并新建个管理账户和一般数据库用户

可以看到,普通账户登录之后,只能看到一个数据库,也就是我刚刚自己建立的lxkdb这个数据库。另外两个是看不到的,这就是权限的关系。

补充:

关于在创建用户的时候,那个roles的不同类型的理解。不知道全不全。

roles 用户角色:

    1. 数据库用户角色:readreadWrite;

    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;

    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;

    4. 备份恢复角色:backup、restore;

    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase

    6. 超级用户角色:root
相关标签: mongodb