启动MongoDB服务时,在没有指定--auth参数情况下,不需要任何验证就可以对数据库进行任意操作。为了安全,一般需要为数据库创建相应的角色,为角色分配相应的权限,在启动MongoDB时指定--auth参数。
启动MongoDB服务,进入MongoDB Shell控制台,切换至admin数据库,创建数据库管理员用户,其指令如下(以#开头的为注释说明,非输入控制台内容,每条指令以Enter键结束):
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# 切换至admin数据库。
# 也可以使用db = db.getSiblingDB('admin')代替use admin。
use admin
# 创建管理员用户,并指定其权限。
db.addUser({
user :
'root'
,
pwd
:
'123456'
,
roles : [
'clusterAdmin'
,
'dbAdminAnyDatabase'
,
'userAdminAnyDatabase'
,
'readWriteAnyDatabase'
]
})
|
关闭MongoDB服务,重启MongoDB服务并加上--auth参数,进入MongoDB Shell控制台,切换至admin数据库,敲入show collections指令,此时系统报错:error : {"$err" : "not authorized for query on admin.system.namespaces", "code" : 16550}。这是需要认证的缘故,在控制台输入如下指令进行认证:
1
2
3
|
# 进行用户认证,输入上面创建的用户名及密码。
# 也可以使用db.auth('root', '123456')代替下面指令。
db.auth({user :
'root'
,
pwd
:
'123456'
})
|
认证通过后,重新敲入show collection指令,此时不再报错,可以看到指令相应的输出结果。
接下来,为指定数据库创建一般用户角色,用于程序读取、修改数据库。假如现有blog数据库,要为其创建用户名为admin、密码为123456,拥有CRUD(增查改删)权限,指令如下:
1
2
3
4
5
6
7
8
9
|
# 切换至blog数据库。
use blog
# 创建admin用户。
db.addUser({
user :
'admin'
,
pwd
:
'123456'
,
roles : [
'readWrite'
]
})
|
PHP连接至blog数据库代码示例(PHP必须安装MongoDB扩展,若想了解PHP如何安装MongoDB扩展,请参阅:PHP使用MongoDB扩展):
1
2
3
4
5
6
7
|
<?php
$mongo
=
new
MongoClient(
'mongodb://admin:123456@localhost:27017/blog'
);
/**
* 其他代码。
*/
?>
|
说明:不同MongoDB版本在创建数据库用户角色会存在细微的差别,本文使用的是MongoDB 2.4.4版本。若想了解更多MongoDB用户权限,请参阅MongoDB官方手册:User Privilege Roles in MongoDB。