首页 » PHP教程 » PHPmongodb权限技巧_database一文轻松搞定 MongoDB 权限设置

PHPmongodb权限技巧_database一文轻松搞定 MongoDB 权限设置

访客 2024-11-24 0

扫一扫用手机浏览

文章目录 [+]

MongoDB 的用户名和密码是基于特天命据库的,而不是基于全体系统的,以是每个数据库 都须要设置密码,并且每个数据库都有一个 user 表来支撑这种机制。

这便是说 MongoDB 可以为每个数据库都建立权限认证,即可以指定某个用户可以访问到哪个数据库。

PHPmongodb权限技巧_database一文轻松搞定 MongoDB 权限设置

1. 开启权限认证

Mongo DB 默认是没有开启任何权限掌握的,我们可以通过命令参数 --auth,或者通过配置文件 mongod.conf 中 security: authorization: enabled 来开启。

PHPmongodb权限技巧_database一文轻松搞定 MongoDB 权限设置
(图片来自网络侵删)

# /etc/mongod.conf# 其它配置,见上一篇文章:# https://www.toutiao.com/article/7206237090173207080/?log_from=1bcd70521abfb_1677891079401security: #开启账号密码登录验证办法 authorization: enabled

在开启 authorization 之前,要先创建干系用户并授予权限(至少要创建一个管理用户的账号,这样就可以在开启后用它来创建用户),不然在开启认证之后,连接上做事会创造一个数据库也访问不了。

2. 创建超级管理员 root

在 MongoDB 中 admin 数据库是一个非常特殊的数据库,这个数据库的用户可以访问 MongoDB 中的所有数据库。

现在为 MongoDB 的 admin 数据库添加一个用户:root 超级管理员,角色:root,密码:root。
该 root 用户,用于关闭数据库的操作。

创建 root 用户的步骤如下。

创建超级管理员

2.1 连接

mongosh mongodb://192.168.1.193:270172.2 查看所有数据库

# 可以看到有 admin 数据库show dbs2.3 进入 admin 数据库,创建 root 用户

use admindb.createUser({user:"root", pwd: "root", roles:[{role: "root", db: "admin"}]})2.4 查看是否创建成功

show users # 或 db.getUsers()

3. 创建所有数据库的管理员

再创建一个用于管理账号的用户:admin,该用户的 role 是 userAdminAnyDatabase。
admin 用户用于管理账号,不能进行关闭数据库等操作。

创建所有数据库的管理员

use admindb.createUser({user:"admin", pwd: "admin", roles:[{role: "userAdminAnyDatabase", db: "admin"}]})# 查看是否创建成功show users

4. 创建单个数据库的管理员

除了可以设置数据库的超级管理员以外,还可以给每个数据库设置单独的管理员,它只有操作单独数据库的权限。

各个不同的数据库之间,可以创建有一个或多个账户;各数据库之间的账户、密码都是独立的,不能相互访问。

4.1 创建一个数据库

先创建一个数据库,用于演示如何为该数据库创建单独的管理员。

创建 DB

# 在没有插入数据前 show dbs 不会显示该 mydbuse mydb创建 collection(相称于 mysql 的表)

# 创建后再用 show dbs 就可以看到 mydb 了db.createCollection("product")查看凑集(相称于查看 mysql 数据库中的表)

# 这时 mydb 数据库中还没有任何表/凑集show collections插入文档(对应在 mysql 的表中插入行)

db.product.insertOne({code: 1, name: "足球", price: 99.8, num: 60})db.product.insertMany([ {code: 2, name: "笔", price: 9.8, num: 50}, {code: 3, name: "鞋", price: 199, num: 40}])查看插入的数据

db.product.find()4.2 为 mydb 创建管理员

接下来为 MongoDB 的 mydb 数据库添加一个用户:dbAdmin 管理员,角色 role: "dbOwner",代表数据库所有者的角色,拥有该数据库最高权限,密码也设为 dbAdmin。

用该账号可以为自己的数据库创建用户等统统行为。

特殊把稳,一定要切换到所在数据库上去创建该用户,不然创建到 admin 数据库,就达不到效果了。

查看 mydb 数据库上的用户

# 切换到该数据库use mydb# 创建前,查看当前 DB上的 usershow users创建 owner 账号

# 创建 owner 账号db.createUser({user:"dbAdmin", pwd: "dbAdmin", roles:[{role: "dbOwner", db: "mydb"}]})# 查看 mydb 上的用户show users

创建单一数据库的管理员

5. 重启 MongoDB 开启认证

确保配置文件中 authorization 设置为 enabled。

# /etc/mongod.confsecurity: #开启账号密码登录验证办法 authorization: enabled

关闭 mongodb,重新开启

mongod --shutdown --dbpath /data/mongo/dbmongod --config /etc/mongod.conf --fork

不用账号直接登录的结果:报须要权限认证

开启后未登录无法查看

用 dbAdmin 登录 mydb 的结果:只可以访问 mydb,看不到 admin 等其它无权限的数据库

可以访问 mydb

小结

本文我们按权限从大到小,创建了

超级管理员 root(root 角色),管理所有数据库的数据库管理员 admin(userAdminAnyDatabase 角色),以及单个数据库的超级管理员 dbAdmin(dbOwner 角色),

实在 MongoDB 还内置了很多其它的角色,可以让我们做到更细的权限掌握,比如只读、读写等,但做法都和上面的一样,相信大家只要理解了本文分享的方法就一定能轻松搞定的。

相关文章

执业药师试卷代码解码药师职业发展之路

执业药师在药品质量管理、用药安全等方面发挥着越来越重要的作用。而执业药师考试,作为进入药师行业的重要门槛,其试卷代码更是成为了药师...

PHP教程 2025-02-18 阅读1 评论0

心灵代码主题曲唤醒灵魂深处的共鸣

音乐,作为一种独特的艺术形式,自古以来就承载着人类情感的表达与传递。心灵代码主题曲,以其独特的旋律和歌词,唤醒了无数人的灵魂深处,...

PHP教程 2025-02-18 阅读1 评论0

探寻福建各市车牌代码背后的文化内涵

福建省,地处我国东南沿海,拥有悠久的历史和丰富的文化底蕴。在这片充满魅力的土地上,诞生了许多具有代表性的城市,每个城市都有自己独特...

PHP教程 2025-02-18 阅读1 评论0

探寻河北唐山历史与现代交融的城市之光

河北省唐山市,一座地处渤海之滨,拥有悠久历史和独特文化的城市。这里既是古丝绸之路的起点,也是中国近代工业的发源地。如今,唐山正以崭...

PHP教程 2025-02-18 阅读1 评论0