MongoDB 3.4 的四个组件说明:
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc
$ yum install -y mongodb-org
配置SELinux
$ semanage port -a -t mongod_port_t -p tcp 27017
如果禁用SELinux (修改配置文件的方式必须重启系统)
$ vim /etc/selinux/config
修改配置
SELINUX=disabled
或者
SELINUX=permissive
$ setenforce 0
此处我们将我们下载好的压缩包mongodb-linux-x86_64-rhel70-3.4.4.tgz上传至服务器
$ tar -zxvf mongodb-linux-x86_64-rhel70-3.4.4.tgz /home
$ cd mongodb-linux-x86_64-rhel70-3.4.4
$ mkdir /home/mongodb
$ cp -R * /home/mongodb
$ mkdir /home/mongodb/data
$ mkdir /home/mongodb/log/mongolog
mongodb配置文件,mongo.cfn。需要注意,配置文件的缩进是空格,使用制表符Tab缩进会报错
systemLog:
destination: file
path: "/home/mongodb/log/mongolog/mongod.log"
logAppend: true
storage:
journal:
enabled: true
dbPath: /home/mongodb/data
processManagement:
fork: true #后台进程方式启动
pidFilePath: "/home/mongodb/data/mongod.pid"
net:
bindIp: 127.0.0.1 #此处修改为服务器IP,否则本机以外无法访问
port: 27017
setParameter:
enableLocalhostAuthBypass: false
$ vim /etc/profie.d/mongo.sh
编辑mongo.sh文件,添加内容:export PATH=$PATH:/home/mongodb/bin
$ source /etc/profile.d/mongo.sh
直接命令行配置启动
$ mongod --dbpath=/home/mongodb/data/ --logpath=/home/mongodb/log/mongolog/mongo.log --logappend --auth --fork
使用配置文件配置启动
$ mongod -f /home/mongodb/mongo.cfn
$ service mongod start
停止MongoDB服务:service mongod stop
重启MongoDB服务:service mongod restart
[initandlisten] waiting for connections on port <port>
为当前MongoDB服务的端口,默认为27017。端口可以在/etc/mongod.conf主配置文件中进行配置,只要配置文件修改均需要重启MongoDB服务方可生效。
$ chkconfig mongod on
$ firewall-cmd --zone=public --add-port=27017/tcp --permanent
$ firewall-cmd --reload
$ yum erase $(rpm -qa | grep mongodb-org)
$ rm -r /var/log/mongodb
$ rm -r /var/lib/mongo
$ mongo --host 192.168.0.100
$ show dbs;
$ use admin;
switched to db admin
$ show collections;
system.version
$ exit;
MongoDB一路走来,各个版本权限管理差别较大,本文讲解的权限是基于v3.4.4版本,如果使用低于或高于本文所用版本,可能存在差异。
权限、用户、角色管理均基于Shell,所以所有操作均需要保证已登录Shell客户端
所有用户均储存在admin数据库下的db.system.users集合
数据库用户角色
read
仅拥有数据库读权限
readWrite
数据库读写权限
数据库管理角色
dbAdmin
可以对数据库的system.indexes、system.namespaces、system.profile 集合进行操作
dbOwner
对数据库的拥有者、角色提供管理权限,同时提供readWrite、dbAdmin、userAdmin角色的权限
userAdmin
当前数据库(使用use切换的目标数据库)提供,创建、修改角色及用户的权限。
明确的提供以下操作:
所有数据库角色
userAdminAnyDatabase
仅能够进行本地连接Shell,仅拥有userAdmin角色的权限,没有readWrite权限
dbAdminAnyDatabase
仅能够进行本地连接Shell,仅拥有dbAdmin角色的权限,没有readWrite权限
readAnyDatabase
仅能够进行本地连接Shell,仅拥有read权限
readWriteAnyDatabase
仅能够进行本地连接Shell,仅拥有 readWrite权限
超级用户角色
配置文件/home/mongodb/mongo.cfn中添加一下代码,开启权限验证
security:
authorization: "enabled"
首先创建一个超级管理员
> use admin
> db.createUser(
{
user: "admin",
pwd: "admin123",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
user:用户名
pwd:用户密码
roles:一组角色设置(对象)
role:角色名
db:角色所控制的数据库名userAdminAnyDatabase:仅能通过本地连接管理用户及角色
官方文档地址:https://docs.mongodb.com/manual/reference/built-in-roles/#userAdminAnyDatabase
超级管理员创建完成后,退出命令行,重启MongoDB
重启MongoDB后,进入Shell客户端,在命令行进行认证
$ mongo --host 192.168.0.100 --port 27017 -u "admin" -p "admin123" --authenticationDatabase "admin"
ationDatabase "admin"
MongoDB shell version v3.4.4
connecting to: mongodb://192.168.0.202:27017/
MongoDB server version: 3.4.4
>
-u:用户名
-p:密码
–authenticationDatabase:刚刚创建admin用户时,role指定userAdminAnyDatabase角色,对应的db指定的数据库如果直接使用$ mongo –host 192.168.0.100 –port 27017连接Shell客户端,则需要成功连接后,使用db.auth(“admin”, “admin123”)用户完成认证
> use admin;
> db.system.users.remove({user:"admin"});
> db.dropUser("admin")
> use admin;
> db.updateUser( "root",{pwd:"root123"})
用户管理相关文档地址:https://docs.mongodb.com/manual/reference/method/js-user-management/