MongoDB用户安全认证基础

MongoDB · ruyi · 于 2年前发布 · 1429 次阅读

每个MongoDB实例中可以后很多用户,如果开启了安全检查,则只有认证用户才能对数据库进行读写操作。MongoDB 安装后默认不启用认证,也就是说在本地可以通过 mongo 命令不输入用户名密码,直接登陆到数据库,下面我们来演示认证过程:

在开启安全认证之前,至少要创建一个管理员账号。下面是没有开启安全认证的服务器,我们添加了一个管理员账号dbadmin,在test库添加了两个普通账号query,query2,其中query2为只读账号,创建只读账号只需将addUser的第三个参数设置为true就可以了(addUser不仅可以添加账号,而且可以修改用户只读状态和口令)

[mongodb@AliyunServer ~]$ mongo
MongoDB shell version: 2.4.6
connecting to: test
> use admin
switched to db admin
> show dbs
admin0.203125GB
local0.078125GB
> show collections;
product
system.indexes
system.profile
system.users
> use admin
switched to db admin
> db.addUser("dbadmin","dbadmin");
{
"_id" : ObjectId("523fb132e1913d4553dea0da"),
"user" : "dbadmin",
"readOnly" : false,
"pwd" : "5470314b0f28d059441ac215b60ca222"
}
> use test
switched to db test
> db.addUser("query","query");
{
"user" : "query",
"readOnly" : false,
"pwd" : "f5d126bd43ef72af2c60535d4b5f1f28",
"_id" : ObjectId("523fb8ba4878cf4bbef3e7fa")
}
> db.addUser("query2","query2",true);
{
"user" : "query2",
"readOnly" : true,
"pwd" : "30dce37a38c19c0e986a52dd6c042842",
"_id" : ObjectId("523fb8d84878cf4bbef3e7fb")
}
> 

现在修改配置文件,加入--auth选项打开安全认证并重启服务器

[mongodb@AliyunServer ~]$ vim config/mongod.cnf 
auth = 1
[mongodb@AliyunServer ~]$ kill -9 16218
[mongodb@AliyunServer ~]$ /data/mongodb/bin/mongod -f /data/mongodb/config/mongod.cnf

重新连接后,认证生效,不能对test库做任何操作,无论读取和写入

[mongodb@AliyunServer ~]$ mongo admin
MongoDB shell version: 2.4.6
connecting to: admin
> use test
switched to db test
> db.test.find();
error: { "$err" : "not authorized for query on test.test", "code" : 16550 }
> show collections;
Mon Sep 23 12:10:40.311 error: {
"$err" : "not authorized for query on test.system.namespaces",
"code" : 16550
} at src/mongo/shell/query.js:128

下面用db.auth命令对query2用户认证,认证后可以查找数据,但是不能写入

> db.auth("query2","query2");
1
> db.test.find();
> db.test.insert({"x":2});
not authorized for insert on test.test

对query用户认证后,可以读写,但不能列出数据库,列出数据库需要管理员权限

> db.auth("query","query");
1
> db.test.insert({"x":2});
> db.test.find();
{ "_id" : ObjectId("523fbfca8cec457331ff2f93"), "x" : 2 }
> show dbs;
Mon Sep 23 12:13:12.314 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46

如果这篇文章对您有帮助,不妨微信小额赞助我一下,让我有动力继续写出高质量的帖子。

本帖已经被管理员设置为: 精华帖 !
共收到 1 条回复 MongoDB 安全 认证
tony#12年前 0 个赞

没有设置key 对文件?

回复本帖 (需要登录)