继mongodb3.2复制集和shard集群之后的用户认证登陆。
1:关于mongos登录权限认证配置
[mongodb@node1 keyfile]$ openssl rand -base64 741 > /data/keyfile/zxl [mongodb@node1 keyfile]$ chmod 600 /data/keyfile/zxl
2:把/data/keyfile/zxl文件拷贝到各个机器/data/keyfile/目录下即可
切记属主和组以及文件权限600
3:创建用户
[mongodb@node1 config]$ mongo --port 10005 MongoDB shell version: 3.2.3 connecting to: 127.0.0.1:10005/test mongos> use admin switched to db admin db.createUser( { user: "zxl", pwd: "123", roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] } ) db.createUser( { user: "zxl", pwd: "123", roles: [ { role: "root", db: "admin" } ] }); mongos> db.auth('zxl','123') 1
注:userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限,root:只在admin数据库中可用。超级账号,超级权限,其实 创建一个userAdminAnyDatabase角色就可以,然后可以创建N个用户角色。。。
4:关闭三台机器上的mongod和configsvr以及mongos服务
[mongodb@node1 keyfile]$ netstat -ntpl|grep mongo|awk '{print $NF}'|awk -F'/' '{print $1}'|xargs kill
5:修改三台机器上的shard1.conf、shard2.conf、shard3.conf、configsvr.conf、mongos.conf配置文件中的内容,分别去掉注释内容即可
#security: # keyFile: "/data/keyfile/zxl" # clusterAuthMode: "keyFile" 去掉注释 security: keyFile: "/data/keyfile/zxl" clusterAuthMode: "keyFile"
启动三台机器上的shard1、shard2、shard3以及configsvr和mongos节点
[mongodb@node1 ~]$ mongod -f /data/config/shard1.conf [mongodb@node1 ~]$ mongod -f /data/config/shard2.conf [mongodb@node1 ~]$ mongod -f /data/config/shard3.conf [mongodb@node1 logs]$ mongod -f /data/config/configsvr.conf [mongodb@node1 logs]$ mongos -f /data/config/mongos.conf
登录mongos
[mongodb@node1 config]$ mongo --port 10005 MongoDB shell version: 3.2.3 connecting to: 127.0.0.1:10005/test mongos> use admin switched to db admin mongos> db.auth('zxl','123') 1 mongos> sh.enableSharding("av")//启用shard分片 { "ok" : 1 } mongos> sh.shardCollection("av.xxoo",{name:1})//设置集合的名字以及字段,默认自动建立索引,av库,xxoo集合 { "collectionsharded" : "av.xxoo", "ok" : 1 }
总结内容如下:
系统时间和防火墙,切记
#security.keyFile: 格式与security.authorization相同,功能与--keyFile相同。
--auth: 在mongod启动项中加入--auth,mongodb启动后,就可以完成授权模块的启用);
PS:虽然auth模块启用后本机还能否登陆到数据库,但是不具备增删改查的权限了,所以启动auth模块之前就应该创建一个超级用户
--keyFile <file>: 主要用于分片集群与副本集相互之间的授权使用,在单机情况下只要用到auth,如果是在集群(分片+副本集)环境下,就必须要用到该参数;
因为之前我就创建了一个userAdminAnyDatabase角色,所以创建一个root角色的账户。如下
[mongodb@node1 config]$ mongo 192.168.75.128:10005/admin -u zxl -p 123 --authenticationDatabase admin MongoDB shell version: 3.2.3 connecting to: 192.168.75.128:10005/admin mongos> show dbs ad 0.000GB admin 0.000GB config 0.001GB mongos> db.createUser({user: "root",pwd: "123456",roles: [ "root" ]}) Successfully added user: { "user" : "root", "roles" : [ "root" ] } mongos> db.auth("root","123456") 1 mongos> bye
认证登陆
[mongodb@node1 config]$ mongo 192.168.75.128:10005/admin -u root -p 123456 --authenticationDatabase MongoDB shell version: 3.2.3 connecting to: 192.168.75.128:10005/admin mongos> show dbs ad 0.000GB admin 0.000GB av 0.000GB config 0.001GB