简介:

mongodb 数据库分片+副本集 搭建完成以后,就可以正常使用,但是有数据安全问题,所以最好设置安全验证。

1.创建超级管理员和普通用户

超级管理员:可管理所有的数据库。 普通用户:某个数据库的管理员。 开启数据库登录认证之前必须要创建一个超级数据库管理员了,否则无法对数据库进行操作。 如何创建用户和数据库授权,请参考Mongodb官方文档。参考地址: https://docs.mongodb.com/manual/core/security-users/ https://docs.mongodb.com/manual/tutorial/create-users/

1.1.数据库角色介绍

MongoDB基本的角色 1.数据库用户角色Database UserRoles:read、readWrite; 2.数据库管理角色DatabaseAdministrator Role:dbAdmin、dbOwner、userAdmin; 3.集群管理角色 ClusterAdministartor Roles:clusterAdmin、clusterManager、clusterMonitor、hostManager; 4.备份恢复角色Backup andRestoration Roles:backup、restore; 5.所有数据库角色All-DatabaseRoles:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase 6.超级用户角色Superuser Roels:root //这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase) 其中MongoDB默认是没有开启用户认证的,也就是说游客也拥有超级管理员的权限。userAdminAnyDatabase:有分配角色和用户的权限,但没有查写的权限   具体角色:   Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限 dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。 root:只在admin数据库中可用。超级账号,超级权限 参考文档地址: https://docs.mongodb.com/manual/reference/built-in-roles/#all-database-roles

1.2.创建管理员用户

创建超级管理员角色用户

在创建数据库超级管理员用户,必须进入到admin数据库下才能创建超级管理员用户。

[hadoop@new-cdh12 ~]$ Tools/mongodb/bin/mongo new-cdh9:28885
MongoDB shell version: 3.2.12
connecting to: new-cdh9:28885/test
mongos> use admin
switched to db admin
mongos> db
admin
mongos> db.createUser({user:‘root’,pwd:‘!@cmcc1234’,roles:[{role:‘root’,db:‘admin’}]})
Successfully added user: {
“user” : “root”,
“roles” : [
{
“role” : “root”,
“db” : “admin”
}
]
}
mongos>

1.3.配置用户认证

1.3.1.生成keyfile

openssl rand -base64 741 > /hadoop/Tools/mongodb/mongodb-keyfile chmod 600 mongodb-keyfile

1.3.2.修改配置文件

除mongos 所有节点的配置文件加上如下内容

security:
keyFile: /hadoop/Tools/mongodb/mongodb-keyfile
clusterAuthMode: keyFile
authorization: enabled

mongos 不需要加

authorization: enabled

1.4 创建普通数据库管理员角色用户

[hadoop@new-cdh9 ~]$ Tools/mongodb/bin/mongo new-cdh9:28885
MongoDB shell version: 3.2.12
connecting to: new-cdh9:28885/test
mongos> show collectionsl
2017-03-07T14:08:02.562+0800 E QUERY [thread1] Error: don’t know how to show [collectionsl] :
shellHelper.show@src/mongo/shell/utils.js:865:11
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

mongos> show collections;
2017-03-07T14:08:04.948+0800 E QUERY [thread1] Error: listCollections failed: {
“ok” : 0,
“errmsg” : “not authorized on test to execute command { listCollections: 1.0, filter: {} }”,
“code” : 13
} :
_getErrorWithCode@src/mongo/shell/utils.js:25:13
DB.prototype._getCollectionInfosCommand@src/mongo/shell/db.js:773:1
DB.prototype.getCollectionInfos@src/mongo/shell/db.js:785:19
DB.prototype.getCollectionNames@src/mongo/shell/db.js:796:16
shellHelper.show@src/mongo/shell/utils.js:754:9
shellHelper@src/mongo/shell/utils.js:651:15
@(shellhelp2):1:1

mongos> use admin
switched to db admin
mongos> db.auth(“root”,“!@cmcc1234”)
1
mongos> show collections;
system.users
system.version
mongos> use family
switched to db family
mongos> db.createUser({user:‘family’,pwd:‘cmcc1234’,roles:[‘dbAdmin’]})
Successfully added user: { “user” : “family”, “roles” : [ “dbAdmin” ] }
mongos> db.createUser({user:‘familyadmin’,pwd:‘cmcc1234’,roles:[‘userAdmin’]})
Successfully added user: { “user” : “familyadmin”, “roles” : [ “userAdmin” ] }
mongos>

创建两个普通用户,权限分别是: dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户 end