mongodb设置用户名密码,以及权限

来源:互联网 发布:淘宝店页头尺寸 编辑:程序博客网 时间:2024/05/18 01:53

MongoDB 内置角色

(1).数据库用户角色

针对每一个数据库进行控制。
read :提供了读取所有非系统集合,以及系统集合中的system.indexes, system.js, system.namespaces
readWrite: 包含了所有read权限,以及修改所有非系统集合的和系统集合中的system.js的权限.

 

(2).数据库管理角色

每一个数据库包含了下面的数据库管理角色。
dbOwner:该数据库的所有者,具有该数据库的全部权限。
dbAdmin:一些数据库对象的管理操作,但是没有数据库的读写权限。(参考:http://docs.mongodb.org/manual/reference/built-in-roles/#dbAdmin)
userAdmin:为当前用户创建、修改用户和角色。拥有userAdmin权限的用户可以将该数据库的任意权限赋予任意的用户。

 

(3).集群管理权限

admin数据库包含了下面的角色,用户管理整个系统,而非单个数据库。这些权限包含了复制集和共享集群的管理函数。
clusterAdmin:提供了最大的集群管理功能。相当于clusterManager, clusterMonitor, and hostManager和dropDatabase的权限组合。
clusterManager:提供了集群和复制集管理和监控操作。拥有该权限的用户可以操作config和local数据库(即分片和复制功能)
clusterMonitor:仅仅监控集群和复制集。
hostManager:提供了监控和管理服务器的权限,包括shutdown节点,logrotate, repairDatabase等。
备份恢复权限:admin数据库中包含了备份恢复数据的角色。包括backup、restore等等。

 

(4).所有数据库角色

admin数据库提供了一个mongod实例中所有数据库的权限角色:
readAnyDatabase:具有read每一个数据库权限。但是不包括应用到集群中的数据库。
readWriteAnyDatabase:具有readWrite每一个数据库权限。但是不包括应用到集群中的数据库。
userAdminAnyDatabase:具有userAdmin每一个数据库权限,但是不包括应用到集群中的数据库。
dbAdminAnyDatabase:提供了dbAdmin每一个数据库权限,但是不包括应用到集群中的数据库。

(5). 超级管理员权限

root: dbadmin到admin数据库、useradmin到admin数据库以及UserAdminAnyDatabase。但它不具有备份恢复、直接操作system.*集合的权限,但是拥有root权限的超级用户可以自己给自己赋予这些权限。

(6). 备份恢复角色:backup、restore;

(7). 内部角色:__system


针对某个数据库建立用户

给mydb创建读写权限的用户 kerry
use mydb
db.createUser({  
... user:'kerry',  
... pwd:'123456',  
... roles:[  
... {role:'readWrite',db:'mydb'}  

... ]}) 


启动mongodb时候,要加--auth  如何不加--auth默认不需要密码即可访问。


D:\Program Files\MongoDB\Server\3.4\bin>mongod.exe --dbpath="D:\Program Files\MongoDB\Server\3.4\data" --logpath="D:\Program Files\MongoDB\Server\3.4\
log\mongo.log" --auth
2017-06-21T11:29:15.515+0800 I CONTROL  [main] log file "D:\Program Files\MongoDB\Server\3.4\log\mongo.log" exists; moved to "D:\Program Files\MongoDB
\Server\3.4\log\mongo.log.2017-06-21T03-29-15".



当不输入用户密码连接是报错如下:做不了任何操作。

D:\Program Files\MongoDB\Server\3.4\bin>mongo.exe
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.1
> show dbs
2017-06-21T11:32:15.576+0800 E QUERY    [main] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:755:19
shellHelper@src/mongo/shell/utils.js:645:15
@(shellhelp2):1:1



正确的连接方式:

D:\Program Files\MongoDB\Server\3.4\bin>mongo mydb -u kerry -p 123456
MongoDB shell version v3.4.1
connecting to: mongodb://127.0.0.1:27017/mydb
MongoDB server version: 3.4.1


进入命令行后,只能use mydb自己的库操作。kerry用户没有其他库的操作权限。 

> show dbs
2017-06-21T11:34:26.523+0800 E QUERY    [main] Error: listDatabases failed:{
        "ok" : 0,
        "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
        "code" : 13,
        "codeName" : "Unauthorized"
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1
shellHelper.show@src/mongo/shell/utils.js:755:19
shellHelper@src/mongo/shell/utils.js:645:15
@(shellhelp2):1:1
> use mydb
switched to db mydb
> show tables
data
users
> show tables
data
users
> db.data.find()
{ "_id" : ObjectId("5938e6a24cc242261473547e"), "begintime" : "20170608100000", "endtime" : "
: "1", "response" : [ { "type" : "11", "nub" : "81", "city" : "2" } ] }
{ "_id" : ObjectId("5938e6a34cc242261473547f"), "begintime" : "20170608101000", "endtime" : "
: "1", "response" : [ { "type" : "11", "nub" : "66", "city" : "2" } ] }


原创粉丝点击