GBase 8a
其他
文章
精选

当集群模式设置为readonly时,除了SELECT,是否允许执行SHOW、USE等非数据修改语句?为什么?

发表于2026-03-18 10:24:0214次浏览4个评论

当集群模式设置为 READONLY 时,除了 SELECT 查询,也允许执行 SHOWUSE 等非数据修改语句

一、允许执行的语句类型

READONLY 模式下,允许执行的语句可以概括为:所有不修改用户数据或集群元数据的“只读”或“元数据查询”类语句。具体包括:

  1. 数据查询语句
    • SELECT:这是 READONLY 模式的核心允许操作
  2. 元数据与状态查询语句
    • SHOW 系列:如 SHOW DATABASES;, SHOW TABLES;, SHOW COLUMNS FROM ...;, SHOW CREATE TABLE ...;, SHOW VARIABLES;, SHOW PROCESSLIST; 等。这些语句仅查询系统信息,不修改任何数据
    • DESC / DESCRIBE:查看表结构,等价于 SHOW COLUMNS
    • 查询 INFORMATION_SCHEMAPERFORMANCE_SCHEMA:这些是只读的系统视图。
  3. 会话控制语句
    • USE database_name;:切换当前会话的默认数据库。这只是改变客户端会话的上下文状态,并不修改数据库中的任何持久化数据。

       

    • SET(会话级变量):如 SET NAMES utf8;,仅影响当前连接。
  4. 部分管理语句
    • KILL QUERY:终止当前正在执行的查询,属于连接管理,不修改业务数据。

文档中的直接证据

  1. READONLY 模式的定义(来自多个文档):

    “只能执行SQL查询操作,不能执行DDL/DML/Loader操作。”

     

  2. “只能执行SELECT操作。”

     

    • 关键点:定义中明确禁止的是 DDLDMLLoaderSHOWUSE 不属于这三类中的任何一种。
  3. SHOW 语句的定位
    • SHOW 语句被明确列为查询工具,用于获取信息,与 SELECT 功能类似,但更便捷。
  • “show databases; -- 查看系统中数据库名的语句”

  1. USE 语句的定位
    • USE客户端命令,用于设置当前会话的工作数据库。它在SQL标准中属于数据操纵语言的一个辅助性子句,但本质上不操纵数据。

       

二、为什么允许执行这些语句?

允许 SHOWUSE 等语句,是由 READONLY 模式的设计目的和这些语句的本质属性 共同决定的。

  1. READONLY 模式的核心目的
    • 保证数据静止:在进行集群扩容、节点替换、数据备份等运维操作时,需要确保用户数据(表内容)和元数据(表结构)绝对不被修改,以保证操作的一致性和安全性。
    • 允许业务探查:在维护期间,业务系统或分析师可能仍需要查看数据、检查表结构、分析状态,以支持决策或保持监控。
  2. SHOWUSE 语句的本质
    • 零数据修改风险SHOW 语句是纯粹的查询,只从系统表中读取信息。USE 语句只改变客户端会话内存中的一个指针。它们没有任何能力去创建、删除、修改任何表、列或数据行。
    • 运维和业务必需品
      • SHOW:是DBA和开发者进行故障排查、性能分析、容量规划、权限检查的基础工具。在只读模式下,这些工作仍可能需要进行。
      • USE:是应用程序和脚本连接数据库后的常规第一步操作。禁止它会导致所有连接逻辑出错,而它本身并不构成数据安全威胁。
  3. 技术实现的可行性
    • 这些语句的执行不涉及事务日志、数据文件写入、分布式DDL同步等复杂机制,不会干扰正在进行的后台运维任务(如数据重分布、备份)。

三、明确禁止的语句类型

作为对比,以下语句在 READONLY 模式下是明确禁止的,因为它们会修改数据或结构:

  • DDLCREATE, ALTER, DROP, TRUNCATE
  • DMLINSERT, UPDATE, DELETE
  • LOADLOAD DATA INFILE
  • GRANT/REVOKE:修改权限(属于特殊的DDL)。

四、总结

READONLY 模式下,GBase 8a 的管控策略是 “禁止一切可能改变磁盘上持久化数据的操作”

  • SELECTSHOWUSE 等语句只是 “读取信息”“改变本地会话状态”,完全符合“只读”的语义,因此被允许。
  • 这种设计兼顾了数据安全性与运维/业务的连续性:既保证了后台维护操作不受干扰,又让前端用户和系统可以继续“看”数据,实现了“在线维护”的能力。

所以,答案是肯定的:READONLY 模式下允许执行 SHOWUSE 等非数据修改语句。

评论

登录后才可以发表评论
nodddddd发表于 1个月前
学到了
用户头像
柒柒天晴发表于 1个月前
厉害了
GBase用户47954发表于 1个月前
感谢作者的精彩分享!
流泪猫猫头发表于 12小时前
学习了。