怎么将某台服务器的连接设为只读模式_防篡改的生产环境保护

风丽小哥_6837

风丽小哥_6837

2026-04-15

758人浏览

原创

MySQL连接级只读需满足InnoDB引擎、5.6+版本及非READ UNCOMMITTED隔离级别;PostgreSQL依赖用户权限与pg_hba.conf组合控制,临时表权限需单独限制。

MySQL 连接设为只读:SET SESSION TRANSACTION READ ONLY 有效但有前提

直接执行 set session transaction read only 确实能让当前连接拒绝写操作,但仅对 innodb 表生效,且要求 mysql 5.6+、事务隔离级别不是 read uncommitted。myisam 表完全不认这个指令,insert into myisam_table 依然能成功。

常见错误现象:ERROR 1792 (HY000): Cannot execute statement in a READ ONLY transaction 看似生效了,但一查发现只是部分表被拦住;或者压根没报错,因为连在 MyISAM 库上。

  • 先确认引擎:SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'your_db';
  • 确保会话已开启事务(否则该 SET 语句无效):BEGIN; 后再执行 SET SESSION TRANSACTION READ ONLY;
  • 避免用 SET GLOBAL read_only = ON 代替——那是全局只读,影响所有用户,且需要 SUPER 权限,不是单连接防护手段

PostgreSQL 的 pg_hba.conf + 用户权限组合才是可靠方案

PostgreSQL 没有“连接级只读”开关,靠 pg_hba.conf 控制连接来源 + 数据库用户权限控制行为。想让某台服务器的连接只读,本质是限制它所用数据库用户的写权限。

使用场景:应用服务器 A 固定用 app_ro 用户连接,你不想它误删数据,也不希望它因 bug 写脏数据。

  • 撤销写权限:REVOKE INSERT, UPDATE, DELETE, TRUNCATE, REFERENCES ON ALL TABLES IN SCHEMA public FROM app_ro;
  • 禁用 DDL:REVOKE CREATE ON SCHEMA public FROM app_ro;
  • 在 pg_hba.conf 中明确限定该用户只能从指定 IP 连接:host yourdb app_ro 192.168.10.5/32 md5
  • 注意:权限变更后需 SELECT pg_reload_conf(); 或重启服务才能对新连接生效

SSH 隧道或代理层做只读拦截?别依赖 shell 权限控制

有人试图通过给连接用户分配 rbash 或限制 ~/.ssh/authorized_keys 中的 command= 来防 SSH 登录后乱跑,但这对数据库连接毫无意义——数据库访问走的是网络协议,不是 shell 命令行。

容易踩的坑:以为禁掉 rm、vi 就安全了,结果应用仍可通过 JDBC/ODBC 直连数据库并执行 DROP TABLE。

  • 真正要拦的是数据库协议层的写请求,不是操作系统命令
  • 如果必须走 SSH 隧道,应在隧道终点(即数据库服务器)严格配置数据库用户权限,而非在跳板机上做手脚
  • 某些 DB 代理(如 ProxySQL、PgBouncer)支持查询重写或拦截,但需额外部署和维护,不是开箱即用方案

应用层连接字符串加 readonly 参数?多数驱动不解析

像 JDBC 的 ?readOnly=true 或 SQLAlchemy 的 connect_args={"readonly": True},只是提示驱动“我打算只读”,不强制数据库执行只读逻辑。PostgreSQL 驱动会忽略它;MySQL Connector/J 5.1+ 会尝试发 SET SESSION TRANSACTION READ ONLY,但如前所述,有引擎和事务前提。

性能影响很小,但别把它当防护手段——它不改变权限模型,也不触发数据库级拦截。

  • JDBC 示例:jdbc:mysql://host/db?readOnly=true&useSSL=false —— 仅建议,非保障
  • Python psycopg2 不支持该参数;若硬加,会被静默丢弃
  • 真正起作用的永远是数据库用户权限 + 引擎行为,不是连接串里的 flag

最易被忽略的一点:只读设置对 TEMPORARY TABLE、CREATE TEMP TABLE 通常无效,而这类操作可能泄露敏感数据或耗尽磁盘。生产环境若允许建临时表,得单独 REVOKE CREATE ON DATABASE 或限制 temp_tablespaces。

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
服务器是什么
服务器是什么

服务器是一种计算机硬件设备或软件程序,它具有强大的计算和存储能力,用请求、存储数据和提供服务。它在互联网中着关重要的作用,为用户提供各种服务和资源。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.15

437

5

连接apple id服务器时出错
连接apple id服务器时出错

连接apple id服务器时出错的原因包括网络连接问题、服务器问题、Apple ID账户问题、设备问题、防火墙或安全软件问题、时间和日期设置问题、Apple服务器维护等。本专题为大家提供apple id相关的文章、下载、课程内容,供大家免费下载体验。

2023.09.08

920

5

搭建互联网服务器
搭建互联网服务器

搭建互联网服务器需要:1、选择合适的硬件和操作系统,第一步是选择合适的硬件和操作系统;2、安装和配置操作系统,是搭建互联网服务器的关键步骤;3、安装和配置服务器软件,是搭建互联网服务器的下一步,常见的服务器软件包括Apache、Nginx、Tomcat等;4、配置防火墙和安全性,是搭建互联网服务器的重要步骤;5、域名解析和配置,是搭建互联网服务器的最后一步。

2023.09.19

2872

5

如何查看服务器状态
如何查看服务器状态

查看服务器状态的方法有使用命令行工具、图形界面工具、监控工具、日志文件和远程管理工具等。本专题为大家提供服务器状态相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.09

956

5

服务器域名转接慢怎么解决
服务器域名转接慢怎么解决

服务器域名转接慢的解决办法有DNS优化、服务器优化、CDN加速、前端优化和网络优化等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.17

849

5

服务器评测软件
服务器评测软件

服务器评测软件有PassMark Software、CPU-Z、GPU-Z、CrystalDiskMark、IOmeter、JMeter、LoadRunner、Apache Bench等等。详细介绍:1、PassMark Software是一款综合性的服务器性能测试软件,可以评估服务器在各种负载条件下的性能;2、CPU-Z是一款可以提供服务器CPU详细信息的软件等等。

2023.10.17

434

3

如何开启TFTP服务器
如何开启TFTP服务器

开启TFTP服务器的步骤包括选择TFTP服务器软件、下载和安装软件、配置TFTP服务器以及启动和测试服务器等。本专题为大家提供服务器相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.18

2596

4

服务器负载不兼容怎么解决
服务器负载不兼容怎么解决

解决方法:1、增加服务器资源;2、负载均衡;3、优化应用程序;4、增加缓存机制;5、分布式架构;6、限流和熔断;7、自动化扩容。想知道更详细服务器负载不兼容的解决方法,可以访问本专题下面的文章。

2023.10.20

4832

4

宽带如何接入服务器
宽带如何接入服务器

宽带接入服务器的方法有ADSL宽带接入服务器、光纤接入服务器、无线接入服务器和以太网接入服务器等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.20

767

5

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习