MongoDB 用户权限与安全相关
2014-03-17 12:31
323 查看
根据官方文档开启 mongod 服务时不添加任何参数时,可以对数据库任意操作,而且可以远程访问数据库,所以推荐只是在开发是才这样不设置任何参数。
而提高 mongodb 数据库安全有几个方面:
1.绑定 内网IP 地址设置 <--推荐用内网IP,减少外网访问。
2.更改默认端口。
3.用户认证绑定 IP 地址.
4. 使用IPSEC策略,限制访问端口和IP。
1.)只有本地才可以访问:
mongod--bind_ip 127.0.0.1
2.)在设置其它的端口:
mongod --bind_ip 127.0.0.1--port28888
3.)添加用户认证:
添加用户认证必须在启动 mongod 服务时添加--auth参数:
mongod --bind_ip 127.0.0.1 --port28888--auth
4.)使用IPSEC策略,限制访问端口和IP。
#!/bin/bash
#for abcd Corporation:
#drop control ports ,some ports for history problem
/sbin/iptables -A INPUT -p tcp --dport28888-j
DROP
/sbin/iptables -A INPUT -p tcp -s 1.22.10.21/32 --dport28888-j
ACCEPT
注意所有用户的认证信息都保存在每一个数据库的 system.users 集合中。例如:在数据库 projectx 中(就是 use projectx 后)projectx.system.users 会保存所有用户的信息(这里的用户是数据库用户)。
在最初始的时候 mongodb 都默认有一个 admin 数据库(刚开始是空的),而 admin.system.users 中将会保存比在其它数据库中设置的用户权限跟大的用户信息。
注意:当 admin.system.users 中没有添加任一一个用户(即为空)时,即使 mongod 启动时添加了 --auth 参数,即使,在除 admin 数据库中添加了用户,此时不进行任何认证依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一个用户。
如下分别创建两个用户:
在 projectx 中创建用户名为 user1 密码为 1resu 的用户,如下:
$ ./mongo>use
projectx>db.addUser("user1","1resu");
12ef4
在 admin 中创建用户名为 root 密码为 toor 的用户,如下:
$ ./mongo
>use admin
>db.addUser("root","toor");
>db.auth("root","toor");
1
^^^^ 如果认证成功会显示 1
^^^^ 用以下命令可以查看所有当前选择的数据库的用户信息
Centos5.5-64bit-IP=80:/tools/mongodb/mongodb1.8/bin#./mongo localhost:3306
MongoDB shell version: 1.8.0
connecting to: localhost:3306/test
> use admin;
switched to db admin
> db.system.users.find();
error: {
"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
"code" : 10057
}
> db.auth("kadmin", "kadmin");
1
> db.system.users.find();
{ "_id" : ObjectId("4d8d8ab69c6467b52026ae57"), "user" : "kadmin", "readOnly" : false, "pwd" : "2be6a622a0d0f69ac838db1fd0f2ece"
}
> use hai;
switched to db hai
> db.system.users.find();
{ "_id" : ObjectId("4d8d8a7a9c6467b52026ae56"), "user" : "hairoot", "readOnly" : false, "pwd" : "3c5db163d5b5825573259bf0c7af84fb"
}
>
>db.system.users.find();
{"_id":
ObjectId("4d761dfc23e14f10be8563c5"),"user":"root","readOnly":false,"pwd":"6a921fa21bbcd22989efecbcb2340d17"}
$ ./mongo
>use projectx
switched to db dbtest
>db.aaaa.insert({aa:"xx"});
unauthorized
^^^^ 一旦在 admin 数据库中添加了用户,
^^^^ 那么对数据库的操作必须进行认证,否则提示 unauthorized
>db.auth("user1","1resu");
1
>db.aaaa.insert({aa:"xx"});
>db.aaaa.find();
{"_id":
ObjectId("4d7628638e6ce2eb56b45a41"),"aa":"xx"}
^^^^ 进行用户认证后就可以插入数据了
>use projecty
switched to db projecty
>db.zzz.insert({aa:"xx"});
unauthorized
^^^^ 由于用户 user1 只作用于 projectx
^^^^ 并没有对 projecty 的操作权限
^^^^ 而我们却可以用 admin 库中的用户认证后进行创建,如下
>use admin
>db.auth("root","toor");
1
>use projecty
switched to db projecty
>db.zzz.insert({aa:"xx"});
>db.zzz.find();
{"_id":
ObjectId("4d7628638e6ce2eb56b45a41"),"aa":"xx"}
^^^^ 用 admin 库中的用户认证后就可以创建另一个数据库了
^^^^ 所以说明 admin 数据库中的权限很大,如果没有指定 readonly 的话
^^^^ 它可以进行任何操作,很危险
>use projectx
>db.addUser("user2","2resu",true);
{
"user":"user2",
"readOnly":true,
"pwd":"471e31e021a3656044ef3487ea90e0cf"
}
^^^^ 当一 user2 用户认证时,user2 只能对 projectx 进行只读操作。
------------------------------------
1.指定服务端口
mongod --port 27017
2.限定IP(只允许特定IP访问)
mongod --bind_ip 127.0.0.1
3.用户验证模式(db层)
mongod --auth #启动时加上--auth参数
#use mydb
#db.auth('username','password')
注1:
全局数据库权限:在admin库里添加用户
> use admin
switched to db admin
> db.addUser('username','password')
{
"user" : "username",
"readOnly" : false,
"pwd" : "aa5469a39788b6c3988537cd409887a1"
}
特定某个数据库权限:
> use mydb
switched to db mydb
> db.addUser('username','password')
{
"user" : "username",
"readOnly" : false,
"pwd" : "aa5469a39788b6c3988537cd409887a1"
}
注2:
添加只读权限的用户
> db.addUser('username','password',true)
{
"user" : "username",
"readOnly" : true,
"pwd" : "aa5469a39788b6c3988537cd409887a1"
}
而提高 mongodb 数据库安全有几个方面:
1.绑定 内网IP 地址设置 <--推荐用内网IP,减少外网访问。
2.更改默认端口。
3.用户认证绑定 IP 地址.
4. 使用IPSEC策略,限制访问端口和IP。
1.)只有本地才可以访问:
mongod--bind_ip 127.0.0.1
2.)在设置其它的端口:
mongod --bind_ip 127.0.0.1--port28888
3.)添加用户认证:
添加用户认证必须在启动 mongod 服务时添加--auth参数:
mongod --bind_ip 127.0.0.1 --port28888--auth
4.)使用IPSEC策略,限制访问端口和IP。
#!/bin/bash
#for abcd Corporation:
#drop control ports ,some ports for history problem
/sbin/iptables -A INPUT -p tcp --dport28888-j
DROP
/sbin/iptables -A INPUT -p tcp -s 1.22.10.21/32 --dport28888-j
ACCEPT
注意所有用户的认证信息都保存在每一个数据库的 system.users 集合中。例如:在数据库 projectx 中(就是 use projectx 后)projectx.system.users 会保存所有用户的信息(这里的用户是数据库用户)。
在最初始的时候 mongodb 都默认有一个 admin 数据库(刚开始是空的),而 admin.system.users 中将会保存比在其它数据库中设置的用户权限跟大的用户信息。
注意:当 admin.system.users 中没有添加任一一个用户(即为空)时,即使 mongod 启动时添加了 --auth 参数,即使,在除 admin 数据库中添加了用户,此时不进行任何认证依然可以使用任何操作,直到知道你在 admin.system.users 中添加了一个用户。
如下分别创建两个用户:
在 projectx 中创建用户名为 user1 密码为 1resu 的用户,如下:
$ ./mongo>use
projectx>db.addUser("user1","1resu");
12ef4
在 admin 中创建用户名为 root 密码为 toor 的用户,如下:
$ ./mongo
>use admin
>db.addUser("root","toor");
>db.auth("root","toor");
1
^^^^ 如果认证成功会显示 1
^^^^ 用以下命令可以查看所有当前选择的数据库的用户信息
Centos5.5-64bit-IP=80:/tools/mongodb/mongodb1.8/bin#./mongo localhost:3306
MongoDB shell version: 1.8.0
connecting to: localhost:3306/test
> use admin;
switched to db admin
> db.system.users.find();
error: {
"$err" : "unauthorized db:admin lock type:-1 client:127.0.0.1",
"code" : 10057
}
> db.auth("kadmin", "kadmin");
1
> db.system.users.find();
{ "_id" : ObjectId("4d8d8ab69c6467b52026ae57"), "user" : "kadmin", "readOnly" : false, "pwd" : "2be6a622a0d0f69ac838db1fd0f2ece"
}
> use hai;
switched to db hai
> db.system.users.find();
{ "_id" : ObjectId("4d8d8a7a9c6467b52026ae56"), "user" : "hairoot", "readOnly" : false, "pwd" : "3c5db163d5b5825573259bf0c7af84fb"
}
>
>db.system.users.find();
{"_id":
ObjectId("4d761dfc23e14f10be8563c5"),"user":"root","readOnly":false,"pwd":"6a921fa21bbcd22989efecbcb2340d17"}
$ ./mongo
>use projectx
switched to db dbtest
>db.aaaa.insert({aa:"xx"});
unauthorized
^^^^ 一旦在 admin 数据库中添加了用户,
^^^^ 那么对数据库的操作必须进行认证,否则提示 unauthorized
>db.auth("user1","1resu");
1
>db.aaaa.insert({aa:"xx"});
>db.aaaa.find();
{"_id":
ObjectId("4d7628638e6ce2eb56b45a41"),"aa":"xx"}
^^^^ 进行用户认证后就可以插入数据了
>use projecty
switched to db projecty
>db.zzz.insert({aa:"xx"});
unauthorized
^^^^ 由于用户 user1 只作用于 projectx
^^^^ 并没有对 projecty 的操作权限
^^^^ 而我们却可以用 admin 库中的用户认证后进行创建,如下
>use admin
>db.auth("root","toor");
1
>use projecty
switched to db projecty
>db.zzz.insert({aa:"xx"});
>db.zzz.find();
{"_id":
ObjectId("4d7628638e6ce2eb56b45a41"),"aa":"xx"}
^^^^ 用 admin 库中的用户认证后就可以创建另一个数据库了
^^^^ 所以说明 admin 数据库中的权限很大,如果没有指定 readonly 的话
^^^^ 它可以进行任何操作,很危险
>use projectx
>db.addUser("user2","2resu",true);
{
"user":"user2",
"readOnly":true,
"pwd":"471e31e021a3656044ef3487ea90e0cf"
}
^^^^ 当一 user2 用户认证时,user2 只能对 projectx 进行只读操作。
------------------------------------
1.指定服务端口
mongod --port 27017
2.限定IP(只允许特定IP访问)
mongod --bind_ip 127.0.0.1
3.用户验证模式(db层)
mongod --auth #启动时加上--auth参数
#use mydb
#db.auth('username','password')
注1:
全局数据库权限:在admin库里添加用户
> use admin
switched to db admin
> db.addUser('username','password')
{
"user" : "username",
"readOnly" : false,
"pwd" : "aa5469a39788b6c3988537cd409887a1"
}
特定某个数据库权限:
> use mydb
switched to db mydb
> db.addUser('username','password')
{
"user" : "username",
"readOnly" : false,
"pwd" : "aa5469a39788b6c3988537cd409887a1"
}
注2:
添加只读权限的用户
> db.addUser('username','password',true)
{
"user" : "username",
"readOnly" : true,
"pwd" : "aa5469a39788b6c3988537cd409887a1"
}
相关文章推荐
- mongoDB的复制集5----复制集安全(认证,用户,权限)
- mongoDB用户/权限相关命令
- Mongodb用户权限管理相关命令
- Linux用户以及权限相关常用命令总结
- 【Mongodb】用户和认证 权限总结
- linux 用户权限相关
- 多站点IIS用户安全权限设置
- linux用户权限相关内容查看
- MongoDB增加用户认证: 增加用户、删除用户、修改用户密码、读写权限、只读权限
- mongoDB 3.0 安全权限访问控制
- MongoDB 3.0 安全权限访问控制
- MongoDB用户权限设置
- mongodb 用户和权限设置
- FrameWork数据权限浅析2之基于用户的配置表实现行级数据安全
- sql server2005安全管理之用户、角色、架构 与 权限
- mongoDB 3.0 安全权限访问控制
- mongodb用户管理与权限配置
- Linux组、用户、权限相关命令练习
- 【Oracle】查看oracle用户相关权限
- MongoDB 3.4.2 添加用户、设置权限