讲师中心 微信公众号
AI工具推荐 视频效率加速

SQL如何查询当前用户下的所有表?访问系统元数据

陌雪同学_6632

陌雪同学_6632

发布时间:2026-04-21 23:08:19

|

855人浏览过

|

来源于php中文网

原创

MySQL查当前用户能访问的所有表,应使用SHOW TABLES(最快,仅当前库普通表)或SELECT查询INFORMATION_SCHEMA.TABLES(可区分表/视图、受权限静默过滤)。

sql如何查询当前用户下的所有表?访问系统元数据

MySQL怎么查当前用户能访问的所有表 MySQL里没有“当前用户下所有表”的绝对概念,因为表属于数据库(schema),不是用户。真正要查的是:当前用户有权限访问的、在指定数据库里的所有表。最常用的是查当前默认数据库下的表,用 SHOW TABLES 最直接:

它不依赖权限视图,只要对当前数据库有 SELECT 或 SHOW VIEW 权限就能执行

如果需要跨库或更精确控制权限范围,就得查系统表 information_schema.tables:

SELECT table_name, table_type 
FROM information_schema.tables 
WHERE table_schema = DATABASE() 
  AND table_type = 'BASE TABLE';

注意:DATABASE() 返回当前默认数据库名;如果没选库,DATABASE() 是 NULL,查不出结果——得显式指定 table_schema = 'your_db_name'

常见踩坑:

  • information_schema.tables 对所有用户可见,但只会返回当前用户有权限查看的表,这点很关键
  • 用 TABLE_SCHEMA 而不是 OWNER 字段,MySQL 没有 owner 概念
  • 想包含视图,把 table_type = 'BASE TABLE' 改成 IN ('BASE TABLE', 'VIEW')

PostgreSQL如何列出当前用户可查的所有表 PostgreSQL 表归属更明确:每个表属于一个 schema,而 schema 可以由用户拥有。但“当前用户下的表”仍需拆解为“当前用户有 USAGE 权限的 schema 中、该用户有 SELECT 权限的表”。最稳妥是查 pg_tables 视图:
SELECT schemaname, tablename 
FROM pg_tables 
WHERE schemaname NOT IN ('pg_catalog', 'information_schema');

这个查询默认只显示当前用户有权限访问的表(pg_tables 本身做了权限过滤)

如果想严格限定“当前用户所拥有”的表(即 tableowner = CURRENT_USER),得关联 pg_class 和 pg_namespace:

SELECT n.nspname AS schemaname, c.relname AS tablename
FROM pg_class c
JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE c.relkind = 'r'
  AND n.nspname NOT IN ('pg_catalog', 'information_schema')
  AND c.relowner = (SELECT oid FROM pg_roles WHERE rolname = CURRENT_USER);

注意点:

  • pg_tables 是视图,已过滤掉无权限的 schema;但如果你 GRANT USAGE ON SCHEMA xxx TO user 却没给表级权限,它也不会出现
  • relkind = 'r' 表示普通表,'v' 是视图,'m' 是物化视图
  • 别漏掉 nspname 过滤,否则 pg_catalog 里的系统表会混进来

Oracle中查当前用户有权限访问的表有哪些 Oracle 分两类场景:查自己创建的表(USER_TABLES),或查所有自己能访问的表(ALL_TABLES)。绝大多数情况应该用后者:
SELECT owner, table_name 
FROM ALL_TABLES 
WHERE owner NOT IN ('SYS', 'SYSTEM', 'ORDSYS');

ALL_TABLES 自动只返回当前用户被授予了 SELECT 权限的表,包括别人授权给你的

如果只想看自己创建的(且未被 DROP 的),用 USER_TABLES:

SELECT table_name FROM USER_TABLES;

关键区别:

  • USER_* 视图只显示当前用户的对象,不检查权限,只看属主
  • ALL_* 视图才体现“可访问性”,是真实权限边界
  • DBA_* 需要 DBA 权限,普通用户查不到
  • Oracle 的 owner 字段就是创建者用户名,和 PostgreSQL 的 relowner 类似但语义更重

SQL Server怎么获取当前登录用户能查的表列表 SQL Server 没有统一的“当前用户下所有表”视图,得组合权限检查。最实用的是查 sys.tables 并用 HAS_PERMS_BY_NAME 过滤:
SELECT s.name AS schema_name, t.name AS table_name
FROM sys.tables t
JOIN sys.schemas s ON t.schema_id = s.schema_id
WHERE HAS_PERMS_BY_NAME(QUOTENAME(s.name) + '.' + QUOTENAME(t.name), 'OBJECT', 'SELECT') = 1;

这个写法可靠,但性能略低(每行调一次权限函数),适合交互查询,不适合高频调用

更轻量的方式是查 sys.database_permissions 关联 sys.database_principals,但逻辑复杂,容易漏掉 public 权限或角色继承

注意事项:

  • 不要用 sys.objects 直接筛 type = 'U',它不校验权限
  • QUOTENAME() 必须加,防止 schema 或表名含空格或特殊字符导致语法错误
  • 如果用户是 db_owner 角色成员,上面的 HAS_PERMS_BY_NAME 查询会返回所有用户表——这是预期行为
权限元数据查询不像普通业务 SQL,它天然耦合着数据库的权限模型。不同系统对“当前用户”“可访问”“表”的定义差异很大,直接套用语句很容易查到空结果或越权数据。动手前先确认:你要的是属主视角,还是权限视角?有没有跨 schema 需求?是否要包含视图或临时表?这些细节决定该查哪个系统视图、加什么过滤条件。

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

热门AI工具

更多
VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

音述AI
音述AI Hot

一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

墨刀AI
墨刀AI Hot

一款AI图像与设计工具,主要用于产品经理的专属智能体,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

二狗PPT
二狗PPT Hot

一款AI演示文稿工具,主要用于专为中式职场打造的AI PPT生成工具,适合需要提升相关任务效率的用户。

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

4703

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

971

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

1229

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

6701

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

3443

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

6700

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

9241

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

1250

2024.04.29

Uvicorn 报错与问题解决教程
Uvicorn 报错与问题解决教程

本专题汇总了Uvicorn服务器常见问题与报错解决的教程合集,涵盖启动失败、端口占用、模块导入错误、事件循环冲突及热重载失效等典型故障的排查思路。同时整理了多进程与Worker配置、SSL/HTTPS证书报错、跨域与代理配置等实战解决方案,助你快速定位并解决Uvicorn运行中的各类问题。

0

2026.11.02

热门下载

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

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn