php数据库怎么进只读权限的mysql_php连只读mysql法【步骤】
发布时间 - 2026-01-31 00:00:00 点击率:次PHP连接只读MySQL的核心前提是使用仅授予SELECT权限的数据库用户,而非PHP端控制;需在MySQL中创建用户并精确授权指定库的SELECT权限,禁用所有写权限,PHP通过该用户连接后任何写操作均由MySQL服务端拒绝。
PHP 连接只读 MySQL 的核心前提
MySQL 只读权限不是 PHP 侧控制的,而是由数据库用户权限决定。PHP 本身没有“只读连接”开关,mysqli 或 PDO 都会忠实地执行你发的任何 SQL —— 即使是 UPDATE 或 DROP。真正起作用的是你用哪个数据库账号连接:这个账号必须在 MySQL 里被显式授予 SELECT 权限,且**不授予** INSERT、UPDATE、DELETE、CREATE 等写权限。
创建只读数据库用户的正确步骤
在 MySQL 中(用 root 或高权限账号执行):
- 先创建用户:
CREATE USER 'app_reader'@'%' IDENTIFIED BY 'strong_password';
- 只授权查询:
GRANT SELECT ON `mydb`.* TO 'app_reader'@'%';
- 刷新权限:
FLUSH PRIVILEGES;
⚠️ 注意:GRANT SELECT ON *.* 是全局只读,风险高;生产环境应限定到具体库(如 `mydb`.*)。如果用 localhost 连接,记得把 '%' 换成 'localhost',否则可能连不上。
PHP 中使用该只读用户连接(PDO 示例)$dsn = 'mysql:host=127.0.0.1;dbname=mydb;charset=utf8mb4';
$pdo = new PDO($dsn, 'app_reader', 'strong_password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
- 先创建用户:
CREATE USER 'app_reader'@'%' IDENTIFIED BY 'strong_password'; - 只授权查询:
GRANT SELECT ON `mydb`.* TO 'app_reader'@'%'; - 刷新权限:
FLUSH PRIVILEGES;
GRANT SELECT ON *.* 是全局只读,风险高;生产环境应限定到具体库(如 `mydb`.*)。如果用 localhost 连接,记得把 '%' 换成 'localhost',否则可能连不上。
PHP 中使用该只读用户连接(PDO 示例)$dsn = 'mysql:host=127.0.0.1;dbname=mydb;charset=utf8mb4';
$pdo = new PDO($dsn, 'app_reader', 'strong_password', [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
]);
连接成功后,任何写操作都会立刻报错:SQLSTATE[42000]: Syntax error or access rule violation: 1142 INSERT command denied to user...。这不是 PHP 拦截的,是 MySQL 服务端拒绝执行。
为什么不能靠 PHP 层“模拟只读”?
有人试图在代码里封装一个“只读 DB 类”,禁用 executeUpdate() 方法 —— 这毫无安全意义。只要底层连接用的是有写权限的账号,攻击者或误操作仍可通过原生 $pdo->exec('UPDATE ...') 绕过。真正的只读必须从 MySQL 用户权限源头卡死。另外,某些 ORM(如 Laravel 的 DB::statement())或原始 mysqli_query() 调用,完全不受上层封装约束。
只读权限的可靠性,取决于 MySQL 用户配置是否干净、最小化。哪怕漏授了一个 TRI 或 
ALTER 权限,都可能成为意外写入的入口。
# mysql
# php
# word
# laravel
# app
# access
# 为什么
# sql
# 封装
# select
# Error
# mysqli
# pdo
# delete
# 数据库
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
中山网站推广排名,中山信息港登录入口?
品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?
Laravel安装步骤详细教程_Laravel环境搭建指南
Win11怎么修改DNS服务器 Win11设置DNS加速网络【指南】
详解jQuery停止动画——stop()方法的使用
中山网站制作网页,中山新生登记系统登记流程?
Python面向对象测试方法_mock解析【教程】
HTML透明颜色代码怎么让图片透明_给img元素加透明色的技巧【方法】
EditPlus中的正则表达式实战(5)
Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)
如何用AI一键生成爆款短视频文案?小红书AI文案写作指令【教程】
php做exe能调用系统命令吗_执行cmd指令实现方式【详解】
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
Laravel怎么生成URL_Laravel路由命名与URL生成函数详解
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
历史网站制作软件,华为如何找回被删除的网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
Laravel如何正确地在控制器和模型之间分配逻辑_Laravel代码职责分离与架构建议
Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置
七夕网站制作视频,七夕大促活动怎么报名?
如何在阿里云高效完成企业建站全流程?
javascript基于原型链的继承及call和apply函数用法分析
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Python文本处理实践_日志清洗解析【指导】
Laravel的HTTP客户端怎么用_Laravel HTTP Client发起API请求教程
EditPlus中的正则表达式 实战(1)
jimdo怎样用html5做选项卡_jimdo选项卡html5实现与切换效果【指南】
如何在Windows 2008云服务器安全搭建网站?
Laravel如何创建自定义Facades?(详细步骤)
电商网站制作多少钱一个,电子商务公司的网站制作费用计入什么科目?
ChatGPT回答中断怎么办 引导AI继续输出完整内容的方法
如何做网站制作流程,*游戏网站怎么搭建?
Laravel怎么实现前端Toast弹窗提示_Laravel Session闪存数据Flash传递给前端【方法】
Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制
Laravel如何配置和使用缓存?(Redis代码示例)
如何快速完成中国万网建站详细流程?
Laravel怎么实现观察者模式Observer_Laravel模型事件监听与解耦开发【指南】
黑客如何通过漏洞一步步攻陷网站服务器?
Laravel如何使用withoutEvents方法临时禁用模型事件
Laravel怎么解决跨域问题_Laravel配置CORS跨域访问
个人网站制作流程图片大全,个人网站如何注销?
Laravel如何配置Horizon来管理队列?(安装和使用)
*服务器网站为何频现安全漏洞?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
开心动漫网站制作软件下载,十分开心动画为何停播?
百度浏览器ai对话怎么关 百度浏览器ai聊天窗口隐藏
如何在建站之星绑定自定义域名?
如何在阿里云完成域名注册与建站?
北京网页设计制作网站有哪些,继续教育自动播放怎么设置?

