Mongodb3.0.6启用认证权限设置
2015-09-14 17:17
567 查看
MongoDB默认不开启授权认证,只要客户端程序能够访问MongoDB服务器,就可以与它进行连接。
但是在生产环境,一般都是需要开启授权认证的,只有经过授权的用户才能够连接到MongoDB,才允许访问相关的资源,即:用户-角色-资源~ 这种模式与其它关系型数据库的权限模式基本一致,这里不做过多的解释。
要开启认证模式,首先修改MongoDB的配置文件: /etc/mongod.conf (路径可能与我不同~)
修改配置:
开启完成后重启MongoDB即可生效:
需要特别注意一点,就是在开启授权认证模式之前,需要先在MongoDB中创建一个管理员用户,MongoDB是不提供默认用户的。
下面介绍如何创建管理员用户:
1、首先切换到admin数据库,这个库的作用是用来存放MongoDB中所有的授权用户,默认这个库是不存在的,我们先切换过来,在用的时候它会自动创建。
2、创建用户,把下面代码负载进去执行。
MongoDB中内置了很多角色,我们可以直接使用。
角色可以设置多个:
role:表示角色,db:表示当前角色针对哪个数据库有效。比如设置了admin 那么这个用户的权限范围只在admin数据库有效。
比如我设置 role:"readWrite", db:"mydb" 那么这个用户只能在mydb这个数据库有读写的权限。
但是MongoDB中提供了几个全局数据库的角色,例如上面的
注意后面的AndDataBase, 如果设置了这个角色,那么意味着这个角色是针对所有数据库有效的,尽管它设置了db:"admin"。
设置完毕系统管理员用户后,我们就可以开启MongoDB中的授权认证模式了,开启模式后在此进入MongoDB的客户端:
第一步切换到admin数据库:
第二步进行身份认证:
认证成功返回1,如果认证失败会提升相关的错误信息。
我们可以查看一下系统用户:
然后我们可以给具体的数据里设置授权用户了。
上面的URL配置了用户名和密码 以及要连接的数据库。
<span style="font-size:18px;">MongoClient mongoClient = new MongoClient("182.92.229.156",27017); //不需要用户密码即可连接。</span>
但是在生产环境,一般都是需要开启授权认证的,只有经过授权的用户才能够连接到MongoDB,才允许访问相关的资源,即:用户-角色-资源~ 这种模式与其它关系型数据库的权限模式基本一致,这里不做过多的解释。
要开启认证模式,首先修改MongoDB的配置文件: /etc/mongod.conf (路径可能与我不同~)
修改配置:
# Turn on/off security. Off is currently the default #noauth=true auth=true #这个就是开启认证的配置
开启完成后重启MongoDB即可生效:
sudo service mongod restart
需要特别注意一点,就是在开启授权认证模式之前,需要先在MongoDB中创建一个管理员用户,MongoDB是不提供默认用户的。
下面介绍如何创建管理员用户:
1、首先切换到admin数据库,这个库的作用是用来存放MongoDB中所有的授权用户,默认这个库是不存在的,我们先切换过来,在用的时候它会自动创建。
use admin;
切换成功会显示 switched to db admin
2、创建用户,把下面代码负载进去执行。
db.createUser({ "user" : "dbadmin", "pwd": "123456", "roles" : [ {role:"userAdminAnyDatabase", db: "admin"}, {role:"readWriteAnyDatabase", db: "admin"} ]}, { w: "majority" , wtimeout: 5000 } );
MongoDB中内置了很多角色,我们可以直接使用。
角色可以设置多个:
"roles" : [ {role:"userAdminAnyDatabase", db: "admin"}, {role:"readWriteAnyDatabase", db: "admin"} ]},
role:表示角色,db:表示当前角色针对哪个数据库有效。比如设置了admin 那么这个用户的权限范围只在admin数据库有效。
比如我设置 role:"readWrite", db:"mydb" 那么这个用户只能在mydb这个数据库有读写的权限。
但是MongoDB中提供了几个全局数据库的角色,例如上面的
userAdminAnyDatabase, readWriteAnyDatabase
注意后面的AndDataBase, 如果设置了这个角色,那么意味着这个角色是针对所有数据库有效的,尽管它设置了db:"admin"。
设置完毕系统管理员用户后,我们就可以开启MongoDB中的授权认证模式了,开启模式后在此进入MongoDB的客户端:
[root@iZ25ce2pyrlZ ~]# mongo MongoDB shell version: 3.0.6 connecting to: test >
第一步切换到admin数据库:
use admin;switched to db admin
第二步进行身份认证:
db.auth("dbadmin","123456");
认证成功返回1,如果认证失败会提升相关的错误信息。
我们可以查看一下系统用户:
<span style="font-size:18px;">db.system.users.find()</span>
{ "_id" : "admin.dbadmin", "user" : "dbadmin", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "NuYMHdgcMc4KXcghSaahbw==", "storedKey" : "WIddwwnCu5a88R5Osix4BHdml0w=", "serverKey" : "0jPPRIQEXMNdH3IJ8RWyGyJ5rGQ=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" }, { "role" : "readWriteAnyDatabase", "db" : "admin" } ] }
然后我们可以给具体的数据里设置授权用户了。
db.createUser({ "user" : "mydb", "pwd": "mydb", "roles" : [ {role: "readWrite", db: "mydb" } ]}, { w: "majority" , wtimeout: 5000 } );我们给mydb数据库设置读写的权限用户。
MongoClientURI connectionString = new MongoClientURI("mongodb://mydb:mydb@你的IP/?authSource=mydb&authMechanism=SCRAM-SHA-1"); MongoClient mongoClient = new MongoClient(connectionString);
上面的URL配置了用户名和密码 以及要连接的数据库。
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 如何在 Fedora 上安装 MongoDB 服务器
- PHP添加yaf xhprof mongodb 同理
- mongodb安装
- 如何在 Ubuntu 上安装 MongoDB
- perl操作MongoDB报错undefined symbol: HeUTF8解决方法
- C#中使用1.7版本驱动操作MongoDB简单例子
- MongoDB系列教程(四):设置用户访问权限
- php实现的mongodb操作类实例
- 解决mongodb在ubuntu下启动失败,提示couldn‘t remove fs lock errno:9 Bad file descriptor的错误
- 在PostgreSQL的基础上创建一个MongoDB的副本的教程
- java操作mongodb示例分享
- php对mongodb的扩展(初出茅庐)
- 作为PHP程序员应该了解MongoDB的五件事
- 基于MySQL到MongoDB简易对照表的详解
- MongoDB入门教程之C#驱动操作实例
- MongoDB为用户设置访问权限
- MongoDB db.serverStatus()输出内容中文注释
- MongoDB的一些常用查询方法
- mongodb与mysql命令详细对比