您的位置:首页 > 数据库 > Mongodb

Mongodb3.0.6启用认证权限设置

2015-09-14 17:17 567 查看
MongoDB默认不开启授权认证,只要客户端程序能够访问MongoDB服务器,就可以与它进行连接。

<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配置了用户名和密码 以及要连接的数据库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mongodb