禁用元数据访问需分层防控:MySQL用skip-show-databases+限定库权限;PostgreSQL撤回pg_catalog USAGE及关键视图SELECT;SQL Server撤销VIEW DEFINITION;应用层禁用运行时查元数据。MySQL 中如何禁用 information_schema 查询默认情况下,普通用户也能查 information_schema,这是 SQL 注入后获取表名、列名的主要跳板。不能靠"不拼接 SQL"就高枕无忧,得从权限层堵死。实操上,直接回收对 information_schema 的 SELECT 权限无效(MySQL 8.0+ 允许显式授权但不生效),真正有效的是:限制用户只能访问指定数据库,并关闭元数据访问开关。创建用户时用 CREATE USER 'app'@'%' IDENTIFIED BY 'pwd',**不要**加 WITH GRANT OPTION只授具体库权限:GRANT SELECT, INSERT, UPDATE ON myapp_db.* TO 'app'@'%',**不授** mysql 或 information_schema 任何权限MySQL 8.0.29+ 可设系统变量:SET PERSIST information_schema_stats_expiry = 0(降低统计信息缓存,间接增加探测成本,非根治但有干扰作用)关键一步:在 my.cnf 中加 skip-show-databases ------ 这会让 SHOW DATABASES 对非 super 用户返回空,连库名都看不到PostgreSQL 怎么关掉 pg_catalog 和 information_schemaPostgreSQL 的元数据更开放,默认所有用户都能查 pg_tables、pg_columns 等视图。不像 MySQL 那样能简单禁用,得靠撤销视图权限 + 撤销 schema 使用权。注意:不能删或重命名 pg_catalog,那是核心 schema;也不能直接 REVOKE SELECT ON ALL TABLES IN SCHEMA pg_catalog,因为部分视图依赖 superuser 权限,普通 revoke 会报错。先确保应用用户不是 pg_read_all_data 角色成员(这个角色默认可读所有系统表)逐个撤回关键视图权限:REVOKE SELECT ON pg_tables, pg_views, pg_columns FROM app_user撤回整个 schema 的使用权限:REVOKE USAGE ON SCHEMA pg_catalog FROM app_user(这步让 SELECT * FROM pg_catalog.pg_tables 直接报 permission denied for schema pg_catalog)PostgreSQL 15+ 支持行级安全策略(RLS),可在 pg_tables 上加策略,但实际中极少用------太重,且 RLS 不作用于元数据视图SQL Server 里 sys.tables 查不到的真正原因SQL Server 默认对普通用户隐藏系统视图内容,但只要用户有 VIEW DEFINITION 权限或属于 db_owner,就能看到真实表结构。泄露常发生在误授了这类权限,或者用了 sa 登录的应用连接字符串。 Vozo Vozo是一款强大的AI视频编辑工具,可以帮助用户轻松重写、配音和编辑视频。
相关推荐
ID34610744204 小时前
【课程设计】基于Spring Boot+Vue的游戏账号租赁系统的设计与实现-计算机毕设 附源码50345属于自己的天空4 小时前
不用再手动查表结构了:配好 MCP,Claude Code 自己读数据库生成代码Ticnix4 小时前
我删了 200 行 if-else,把决策逻辑全写进了 System Prompt谢白羽4 小时前
在4×B300用SGLang部署DeepSeek-V4.1 Flash优化实录Y3815326624 小时前
SERP 数据清洗实战:字段标准化、日期解析与去重键苏苏susuus4 小时前
核密度估计(KDE)与高斯核(概念分享)Databend5 小时前
Databend 原生数据血缘:追溯指标来源,检查变更影响镜舟科技5 小时前
Semantic View 技术解析(二):业务口径如何进入数据库执行路径宸津-代码粉碎机5 小时前
微服务线上踩坑复盘:接口超时、负载倾斜隐形问题根治方案(生产级配置)速易达网络5 小时前
Python + Tkinter 实现基于 TCP/IP 的局域网聊天工具