Ubuntu MongoDB 设置用户认证
MongoDB安装
更新软件包列表
sudo apt update
运行命令安装 mongodb
sudo apt install -y mongodb
查看 monggodb 版本:
mongo -version
开启认证
进入服务器的 etc 目录
cd /etc
编辑 mongodb.conf 文件
sudo vim mongodb.conf
将 bindip 改为 0.0.0.0,将 port=27017 取消注释
把 auth 改为 true
auth = true
重启 mongo
sudo service mongodb restart
关闭 / 启动
sudo service mongodb stop
sudo service mongodb start
登陆
mongo
mongodb 中的角色
分类 | role(角色) | 简要说明 |
---|---|---|
数据库用户角色(DB User Roles) | read 、readWrite | 拥有读写权限 |
数据库管理员角色(DB Admin Roles) | dbAdmin 、dbOwner 、userAdmin | 拥有创建数据库、创建用户的权限 |
集群管理角色(Culster Administration Roles) | clusterAdmin 、clusterManager 、clusterMonitor 、hostManager | 管理员组, 拥有系统管理权限 |
备份还原角色(Backup and Restoration Roles) | backup 、restore | 拥有备份数据库、还原数据库权限 |
所有数据库角色(All-Database Roles) | readAnyDatabase 、readWriteAnyDatabase 、userAdminAnyDatabase 、dbAdminAnyDatabase | 拥有操作 admin 数据库的权限 |
Superuser Roles(超级管理员) | root | 拥有至高无上的权力 |
创建用户
首先, 切换到 admin 数据库, 给 admin 创建一个认证的用户,然后创建一个 root 超级管理用户
切换到 admin 数据库
use admin
创建一个 admin 用户,用于对 admin 数据库进行授权
db.createUser({
user:'admin', pwd:'qwe123', roles:[
{role:'dbAdmin', db:'admin'},
{role:'dbOwner', db:'admin'},
{role:'userAdmin', db:'admin'}
]
})
使用 db.auth('用户名','密码')
进行授权认证,只有认证之后才能对 admin 数据库进行增删改查,否则没有权限
db.auth('admin','qwe123')
完成授权之后, 创建 root 超级管理用户, 可以用该用户登录和管理数据库
db.createUser({user:'root', pwd:'717216', roles:['root']})
认证
db.auth('root','717216')
展示所有数据库
show dbs
输出结果:
admin 0.000GB
config 0.000GB
local 0.000GB
stock 0.000GB
切换数据库
use stock
切换数据库之后, 为 stock 创建一个用户,用于登录认证 stock 数据库
db.createUser({
user: 'test', pwd: 'test', roles: [
{role: 'readWrite', db: 'stock'}
]
})
输出一下内容则创建成功
Successfully added user: {
"user" : "test",
"roles" : [
{
"role" : "readWrite",
"db" : "stock"
}
]
}
问题:为什么要切换到 stock 数据库上创建用户呢?
答:因为只有在 stock 数据库中创建的用户才是这个数据库的用户, 才能在此数据库中完成授权, 但是刚刚创建的用户的信息存放在 admin 数据库中
查看用户信息
切换到 admin 库, 看一下我们创建的用户,
use admin
db.system.users.find({user:'test'})
输出信息:
{
"_id": "stock.test",
"user": "test",
"db": "stock",
"credentials": {
"SCRAM-SHA-1": {
"iterationCount": 10000,
"salt": "CW0nvUZjVvlEqQPVbUAKpw==",
"storedKey": "zAPux5oBIOCb3PSZdMPDmFl1WkE=",
"serverKey": "aRFnK5cD1FQAkQeTU8eYvaZ0lQE="
}
},
"roles": [{"role": "readWrite", "db": "stock"}]
}
数据读写
为了避免之前授权 root 用户的影响, 我们先退出客户端 ,再登陆授权
use stock
test 用户登录授权
db.auth('test','test')
输出信息:
2021-12-08T00:12:10.572+0800 I ACCESS [conn3] Successfully authenticated as principal test on stock
1
插入数据
db.Hello.insert({name:'World'})
输出信息:
WriteResult({ "nInserted" : 1 })
查找数据
db.Hello.find()
输出信息:
{"_id": ObjectId("58beda12ff72a6c747135225"), "name": "World"}
修改用户密码
创建用户或更新用户,需要 user
、pwd
、roles
三个属性
db.updateUser('test', {user: 'test', pwd: 'admin', roles:[{role: 'read', db: 'testDB'}]})
删除用户
> use stock
switched to db stock
> db.dropUser('test')
true