参考:博客、官网、阿里云服务部署的参考、mongo 登陆_MongoDB设置用户名密码登录、MongoDB - 设置数据库的用户名和密码(开启登录密码认证)
下载mongoodb
在mongodb官网下载所需的操作系统的指定mongo压缩包(可以自己选择版本、包格式以及对应操作系统)
选择 tgz 下载,下载完安装包,并解压tgz(在/usr/local下面操作)
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz # 下载
tar -zxvf mongodb-linux-x86_64-ubuntu1604-4.2.8.tgz # 解压
全局使用配置
配置系统文件profile
vi /etc/profile #进入配置文件
插入mongodb的配置
export MONGODB_HOME=/usr/local/mongodb
export PATH=$PATH:$MONGODB_HOME/bin
注意保存后要重启系统配置:
source /etc/profile
创建用于存放数据和日志文件的文件夹,并修改其权限增加读写权限
db:存放数据
logs:存放日志
cd /usr/local/mongodb
mkdir -p data/db
chmod -r 777 data/db # 赋予读写权限
mkdir logs
cd logs
touch mongodb.log # 新建文件
mongodb启动配置
进入到bin目录,增加一个配置文件:
cd /usr/local/mongodb/bin
vi mongodb.conf #写文件
插入下列内容:
#数据存放目录
dbpath = /usr/local/mongodb/data/db
#日志存放目录
logpath = /usr/local/mongodb/logs/mongodb.log
#以追加的方式记录日志
logappend = true
#端口号
port = 27017
#开启用户认证
auth=true
#以后台方式运行进程
fork = true #以守护程序的方式启用,即在后台运行
#启用日志文件
journal=true
# bind_ip=0.0.0.0 #可外网访问
启动mongod数据库服务,以配置文件的方式启动
cd /usr/local/mongodb/bin
#无密码登录,指定路径和配置
mongod --dbpath=/usr/local/mongodb/mongodbserver/data logpath=/usr/local/mongodb/mongodbserver/log/mongo.log --logappend --port=27017 --fork
#使用指定配置文件登录
./mongod -f mongodb.conf
# 或者使用下面的
./mongod --config mongodb.conf
设置开机自启动
将mongodb启动项目追加入rc.local保证mongodb在服务器开机时启动
echo "/usr/local/mongodb/bin/mongod --dbpath=/usr/local/mongodb/data –logpath=/usr/local/mongodb/logs –logappend --auth -–port=27017" >> /etc/rc.local
连接mongodb数据库
./mongo
关闭mongodb数据库
#进入mongodb目录下的bin文件夹
cd /usr/local/src/mongodb/bin
#正常关闭mongod服务
./mongod -shutdown -dbpath=/usr/local/src/mongodb/data/db
#强制关闭mongodb,(不推荐这么做,会导致数据丢失与损坏)
pkill mongod
# 退出实例,执行如下命令查看mongodb进程:
ps aux |grep mongodb
# 然后根据PID杀死对应的进程:
kill -15 22671
数据库操作
创建数据库
创建数据库
#若存在该数据库,则切换到该数据库中,否则直接创建一个
use dbname
查看所有数据库
#此时看不到我们刚创建的数据库,需要先向其中插入数据
show dbs
插入数据
#此处创建一个集合的名字,直接在当前数据库下创建一个新的集合
db.colname.insert({data})
插入数据后再次查看,就可以看到刚创建的数据库了。
创建用户
- 进入 mongo shell(进入mongo的bin文件夹下再使用./mongo命令)
使用 admin 数据库
use admin
创建一个新用户 ```javascript
设置用户管理员
db.createUser({ user: “admin”, pwd: “123456”, customData:{name:”admin”}, roles:[ { role: “userAdminAnyDatabase”,db: “admin” } ] })
设置超级管理员
db.createUser({ user: ‘root’, // 用户名
pwd: ‘123456’, // 密码
customData:{name:"admin"}, // 设置用户信息
roles:[{ role: ‘root’, // 角色
db: 'admin' // 数据库
}]
})
- 查看是否创建成功使用
```javascript
show users
使用该用户权限登录
db.auth('test','1234')
开启密码登录验证
打开配置文件vim /etc/mongo.conf ,添加以下参数:
dbpath=/usr/local/mongodb/data/db #数据文件存放目录
logpath=/usr/local/mongodb/data/log/mongodb.log #日志文件存放目录
logappend=true #开启日志追加添加日志
port=24017 #端口,默认27017,可以自定义
bind_ip=0.0.0.0 #本地监听IP,0.0.0.0表示允许所有IP
fork=true #以守护程序的方式启用,即在后台运行
auth=true #权限验证
重启MongoDB
- 登录数据库
这时再次登录数据库会显示登陆成功,但是输入其他命令的时候却无效,提示没有权限。
登录数据库方式:
# 方式一(在mongo/bin文件夹下执行下面的命令)
./mongo
use admin
db.auth('admin', '123456')
# 方式二(在mongo/bin文件夹下执行下面的命令)
./mongo admin -u admin -p 123456
通过这种用户密码认证的方式登录数据库之后就可以正常使用数据库了。
- 添加每个数据库用户
除了可以给MongoDB设置超级管理员用户以外,我们还可以给每个数据库设置单独的管理员,其只有每个单独数据库的一定权限。
# // 跳转到需要添加用户的数据库
use test
# 创建test数据库的用户权限
db.createUser({
user: 'fooadmin', // 用户名
pwd: '123456', // 密码
roles:[{
role: 'readWrite', // 角色
db: 'test' // 数据库名
}]
})
# 下面命令创建一个用户名为 tester 的普通用户,该用户可以读写数据库 test, 只读数据库 reporting。
use admin
db.createUser(
{
user: "tester",
pwd: "123",
roles: [ { role: "readWrite", db: "test" },
{ role: "read", db: "reporting" } ]
}
)
删除用户
db.dropUser(‘testadmin’)
修改用户密码
db.updateUser(‘admin’, {pwd: ‘654321’})
密码认证(如果结果返回 1 则说明正确连接:)
db.auth(‘admin’, ‘654321’)
数据库角色
MongoDB 中内置角色说明:
read:提供读取所有非系统的集合(数据库) readWrite:提供读写所有非系统的集合(数据库)和读取所有角色的所有权限 dbAdmin:提供执行管理任务的功能,例如与架构相关的任务,索引编制,收集统计信息。此角色不授予用户和角色管理权限。 dbOwner:提供对数据库执行任何管理操作的功能。此角色组合了readWrite,dbAdmin 和 userAdmin 角色授予的权限。 userAdmin :提供在当前数据库上创建和修改角色和用户的功能。由于 userAdmin 角色允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供对数据库的超级用户访问权限,或者,如果作用于管理数据库,则提供对群集的访问权限。 clusterAdmin :提供最佳的集群管理访问。此角色组合了 clusterManager,clusterMonitor 和 hostManager 角色授予的权限。此外,该角色还提供了 dropDatabase 操作。 readAnyDatabase :仅在 admin 数据库中使用,提供所有数据库的读权限。 readWriteAnyDatabase :仅在 admin 数据库中使用,提供所有数据库的读写权限 userAdminAnyDatabase :仅在 admin 数据库中使用,提供与 userAdmin 相同的用户管理操作访问权限,允许用户向任何用户(包括他们自己)授予任何权限,因此该角色还间接提供超级用户访问权限。 dbAdminAnyDatabase :仅在 admin 数据库中使用,提供与 dbAdmin 相同的数据库管理操作访问权限,该角色还在整个群集上提供 listDatabases 操作。 root:仅在 admin 数据库中使用,提供超级权限
MongoDB 数据库默认角色
数据库用户角色:read、readWrite
数据库管理角色:dbAdmin、dbOwner、userAdmin
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager
备份恢复角色:backup、restore
所有数据库角色: readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root
数据库
远程连接
- 创建好数据库及用户后,可以从本机远程连接服务器的 mongodb
- 由于本人使用的是阿里云服务器,因此需要首先进入【阿里云服务器管理控制台】,添加端口号访问白名单
- 如图所示,点击右上角蓝色按钮【添加安全组规则】,弹出如下弹窗
- 前几个参数都不需要修改
- 将端口范围设置为要开启的 27017/27017 (格式固定,使用左斜杠分隔)
- 授权对象根据自己的需要设置,如果允许任何 IP 访问,则可以设置为 0.0.0.0/0
- 设置好端口和授权对象后,点击【确定】,完成端口的开放
- 之后使用可视化mongodb的管理软件,进行连接