首页 > 技术文章 > mongo-yum安装-配置用户权限

china2k 2017-12-17 13:02 原文

安装

安装步骤参考https://www.cnblogs.com/layezi/p/7290082.html

安装前注意: 此教程是通过yum安装的.仅限64位centos系统

安装步骤:

1、创建仓库文件: 

vi /etc/yum.repos.d/mongodb-org-3.4.repo

 

然后复制下面配置,保存退出

[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

 

 

2、yum安装

yum install -y mongodb-org

 

没有权限就在前面加:   sudo

安装完毕后修改配置文件:

vi /etc/mongod.conf

 

修改配置文件的 bind_ip, 默认是 127.0.0.1 只限于本机连接。所以安装完成后必须把这个修改为 0.0.0.0 ,否则通过别的机器是没法连接的!

3、启动、停止、重启

MongoDB默认将数据文件存储在/var/lib/mongo目录,默认日志文件在/var/log/mongodb中。如果要修改,可以在 /etc/mongod.conf 配置中指定备用日志和数据文件目录。

启动命令:

service mongod start

 

停止命令:

service mongod stop

 

查看mongoDB是否启动成功:

可以通过查看日志文件

cat /var/log/mongodb/mongod.log

 

日志文件应该会出现如下一句说明

[initandlisten] waiting for connections on port <port>

 

<port> 是mongodb运行端口

也可以通过下面命令检查是否启动成功

chkconfig mongod on

 

 4、使用

[root@instance-d0nk2r2c ~]# mongo
 
## 查看数据库
> show dbs;
 
## 查看数据库版本
> db.version();
 
## 常用命令帮助
> db.help();

 权限

和其他所有数据库一样,权限的管理都差不多一样。mongodb存储所有的用户信息在admin 数据库的集合system.users中,保存用户名、密码和数据库信息。mongodb默认不启用授权认证,只要能连接到该服务器,就可连接到mongod。若要启用安全认证,需要更改配置文件参数auth。

想要添加用户密码验证首先需要添加用户,用户存在system.users 表中

> use admin
switched to db admin
 db.createUser({user:'admin',pwd:'admin123',roles:[{ "role" : "userAdminAnyDatabase", "db" : "admin" }]})

刚建立了 userAdminAnyDatabase 角色,用来管理用户,可以通过这个角色来创建、删除用户。

有没有一个超级权限?不仅可以授权,而且也可以对集合进行任意操作?答案是肯定的,只是不建议使用。那就是role角色设置成root

db.createUser({user:'root',pwd:'root',roles:[{ "role" : "root", "db" : "admin" }]})

添加了两个用户可以语句查看:

db.system.users.find()

此时连接仍然是没有验证的,我们需要重启mongodb,并且要在启动时带上auth参数,才会开启验证

/usr/bin/mongod -f /etc/mongod.conf --auth

 

用户角色授权:

#授予角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ])  

db.grantRolesToUser( "admin" , [ { role: "userAdminAnyDatabase", db: "admin" } ])  

#取消角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ])  

db.revokeRolesFromUser( "admin" , [ { role: "userAdminAnyDatabase", db: "admin" } ])  

 

 

roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。role里的角色可以选:

Built-In Roles(内置角色):
1. 数据库用户角色:read、readWrite;
2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 备份恢复角色:backup、restore;
5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超级用户角色:root  
// 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
7. 内部角色:__system

Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

 

推荐阅读