码迷,mamicode.com
首页 > 数据库 > 详细

mongodb--创建用户权限

时间:2019-05-08 18:51:05      阅读:192      评论:0      收藏:0      [点我收藏+]

标签:real   chmod   base   功能   min   bit   readwrite   状态   open   

最近在部署MongoDB Replica Set,马上就到生产环境了,一想还没有给数据库设置用户权限,配置的这一路踩了好多坑,希望对大家有帮助

 

1. 配置好mongodb replica set 安装及三结点配置:

#下载地址:
https://www.mongodb.com/download-center?jmp=nav#community
下载后直接解压,安装rpm包
启动命令:
mongod -f /home/root/mongoconf/mongodb_master.conf

#master.conf 
dbpath=/home/root/mongodata/master
logpath=/home/root/mongolog/master.log
pidfilepath=/opt/mongodb/master.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend=true
replSet=bbt
bind_ip= <ip>
port=27017
#auth=true
oplogSize=100
fork=true
noprealloc=true
#maxConns=4000

#arbiter.conf 仲裁配置 和主机在一个服务器
dbpath=/home/root/mongodata/arbiter
logpath=/home/root/mongolog/arbiter.log
pidfilepath=/opt/mongodb/arbiter.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend=true
replSet=bbt
bind_ip=<ip>
port=27019
#auth=true
oplogSize=100
fork=true
noprealloc=true
#maxConns=4000


#slave.conf
dbpath=/home/root/mongodata/slave
logpath=/home/root/mongolog/slave.log
pidfilepath=/opt/mongodb/slave.pid
#keyFile=/opt/mongodb/mongodb.key
directoryperdb=true
logappend=true
replSet=testdb
bind_ip=<ip2>
port=27017
#auth=true
oplogSize=100
fork=true
noprealloc=true
#maxConns=4000

 

启动后可任意找一个结点登录:
mongo 172.31.138.31:27017
执行以下命令配置集群:
cfg={ _id:"bbt", members:[ {_id:0,host:‘172.31.138.31:27017‘,priority:2}, {_id:1,host:‘172.31.138.30:27017‘,priority:1}, {_id:2,host:‘172.31.138.31:27019‘,arbiterOnly:true}] };
rs.initiate(cfg)
rs.status() #查看集群状态

 

2.开始配置用户权限前的准备

由于前面配置好后所有结点的MongoDB服务都启动了,所以第二步先service mongod stop(所有结点都要停止服务) 注:这个命令不一定有效
此步骤可用
mongod -f /home/root/mongoconf/mongodb_master.conf --shutdown

 

3. 启动其中一台mongod服务, 正常启动,不要开启认证功能(#auth=true不要打开),并执行下面语句

 1 use admin
 2 #创建用户管理权限
 3 db.createUser(  
 4   { user: "admin",  
 5     pwd: "admin",  
 6     roles: [{ role: "userAdminAnyDatabase", db: "admin" }]  
 7   } 
 8 
 9 
10 use test
11 #创建用户操作权限(创建几个都可以)
12 db.createUser({ user: "userrwadmin",  pwd: "userrw@hswj0424",  roles: [{ role: "readWrite", db: "bbt" }]})
13 db.createUser({ user: "userradmin",  pwd: "userr@hswj0424",  roles: [{ role: "read", db: "bbt" }]})

 

4. 先在一台机器上产生mongodb keyfile

openssl rand -base64 741 > /home/root/mongodb-keyfile
chmod 600 /home/root/mongodb-keyfile

 

5.将mongodb-keyfile文件拷贝到各个节点上 并且赋予权限 (没有赋予权限的话mongo服务器不能启动)

 

6. 修改mongo.conf

keyFile=/home/root/mongodb-keyfile
auth = true

 

7.重启所有结点的mongod服务就ok了

 

8。操作验证

这两个是两台认证的user 和 pwd
use admin
db.auth(bbtadmin,mongo@hswj0424)
use bbt
db.auth(userrwadmin,userrw@hswj0424)

 也可以可以使用mongo 172.31.138.31:27017  -u userrwadmin -p userrw@hswj0424 --authenticationDatabase bbt 去查看集合的内容
否则会报错——"too many users are authenticated" 

9.总结

1. 给admin库添加用户名和密码时,只需要在一个结点上操作,只要配置好了replica set, 用户名和密码会同步到其他结点.
2. 关于用户名密码认证和结点之间认证.
前者是对于mongodb client而言,处于对每个库的安全考虑,client端想操作数据库,必须先用用户名和密码登录,即配置文件中的auth=true;
而对于节点之间的认证,其实跟前面用户名密码认证是分离的,是让各结点之间有一个key来保持通信,即数据的同步等,是对整个集群成员的安全进行考虑,避免其他用户给集群胡乱添加成员.即配置文件中的keyFile;

mongodb--创建用户权限

标签:real   chmod   base   功能   min   bit   readwrite   状态   open   

原文地址:https://www.cnblogs.com/yuanfang0903/p/10833683.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!