mongodb管理Security and Authentication
mongodb管理Security and Authentication
mongdb自己也提供了验证机制,如果不验证是无法访问数据库对象,一个数据可以有多个用户,用户的权限也可以各不相同,下面具体介绍一下。
> use admin ----登录到超级管理员
>db.addUser("root", "abcd");
{
"_id" : ObjectId("4eaf58af769d879418d93191"),
"user" : "root",
"readOnly" : false,
"pwd" : "1a0f1c3c3aa1d592f490a2addc559383"
}
创建了一个超级用户,这个用户可以访问任何数据库,权限最大
> use test
switched to db test 切换到test数据库
> db.addUser("test_user", "efgh");
{
"user" : "test_user",
"readOnly" : false,
"pwd" : "6076b96fc3fe6002c810268702646eec"
}
> db.addUser("read_only", "ijkl", true);
{
"user" : "read_only",
"readOnly" : true,
"pwd" : "f497e180c9dc0655292fee5893c162f1"
}
以上创建两个用户,test_user和read_only,不同的是,read_only用户只有只读权限
> use test
switched to db test
> db.test.find();
error: { "$err" : "unauthorized for db [test] lock type: -1 " }
> db.auth("read_only", "ijkl");
1
> db.test.find();
{ "_id" : ObjectId("4bb007f53e8424663ea6848a"), "x" : 1 }
> db.test.insert({"x" : 2});
unauthorized
> db.auth("test_user", "efgh");
1
> db.test.insert({"x": 2});
> db.test.find();
{ "_id" : ObjectId("4bb007f53e8424663ea6848a"), "x" : 1 }
{ "_id" : ObjectId("4bb0088cbe17157d7b9cac07"), "x" : 2 }
以上例子可以看到没有验证用户登录,对数据库读写操作均不能,read_only用户只能查询,不能插入,但是test_user用户验证登录后就可以插入了。
如果这时,show dbs,还是报错,因为test_user 不是admin用户,所以没有权限。
> use admin
switched to db admin
> db.auth("root", "abcd");
1
> show dbs
admin
local
test
验证了超级用户就可以做相关操作
创建的这些用户都存在创建时数据库下面一个叫system.users的集合里面,如果要移除一个user,例如移除test_user
> db.auth("test_user", "efgh");
1
> db.system.users.remove({"user" : "test_user"});
> db.auth("test_user", "efgh");
0
启用验证登录:如果是配置文件启动server端,里面可以加入auth = true ,如果是跟参数启动mongod 后面记得跟--auth。