正德厚生,臻于至善

SELECT_CATALOG_ROLE

SELECT_CATALOG_ROLE 是 Oracle 预定义的系统角色,核心作用是授予普通用户查询数据字典(Catalog)的 SELECT 权限,也是 Oracle 推荐的、安全的 “字典查询权限”(替代直接授予 SELECT ANY DICTIONARY 或对 SYS 基表的直接 SELECT 权限)。以下是其具体权限的详细拆解:

一、核心定位

  • 归属:由 SYS 用户拥有,仅包含 SELECT 权限(无 DML/DDL/EXECUTE 等修改 / 执行权限);
  • 目标:覆盖 Oracle 核心数据字典视图 / 表的查询权限,让普通用户能访问 DBA_*V$GV$ 等高级字典,而非仅能查 USER_*/ALL_* 视图。

二、具体权限范围(按功能分类)

SELECT_CATALOG_ROLE 授予的是对 SYS 模式下核心字典对象的 SELECT 权限,具体涵盖以下类别:

1. 数据库对象元数据(最核心)

可查询所有模式下的对象定义、结构信息,包括:

字典对象类型典型视图 / 表用途说明
表 / 视图 / 同义词DBA_TABLES、DBA_VIEWS、DBA_SYNONYMS查询所有模式的表 / 视图 / 同义词定义
索引 / 约束DBA_INDEXES、DBA_CONSTRAINTS查询索引、主键 / 外键 / 唯一约束等
存储过程 / 包 / 函数DBA_PROCEDURES、DBA_PACKAGES查询存储过程 / 包的元数据(无执行权限)
序列 / 触发器DBA_SEQUENCES、DBA_TRIGGERS查询序列定义、触发器元数据
列 / 注释DBA_TAB_COLUMNS、DBA_COL_COMMENTS查询表列结构、字段注释

2. 用户 / 角色 / 权限管理

可查询系统中所有用户、角色、权限的分配信息:

字典对象用途说明
DBA_USERS查询所有数据库用户(密码哈希、状态、默认表空间等)
DBA_ROLES查询所有角色定义
DBA_SYS_PRIVS查询用户 / 角色的系统权限分配
DBA_ROLE_PRIVS查询角色的继承关系(如角色授予给用户 / 其他角色)
DBA_TAB_PRIVS查询对象级权限(如用户对表的 SELECT/UPDATE 权限)
DBA_COL_PRIVS查询列级权限(如用户对表某列的 UPDATE 权限)

3. 存储与表空间

可查询数据库存储资源的分配、使用情况:

字典对象用途说明
DBA_TABLESPACES查询所有表空间定义
DBA_DATA_FILES查询数据文件与表空间的关联
DBA_SEGMENTS查询段(表 / 索引)的存储分配
DBA_EXTENTS查询段的扩展区信息
DBA_FREE_SPACE查询表空间的空闲空间
DBA_TEMP_FILES查询临时文件信息

4. 会话 / 性能 / 系统状态

可查询数据库运行时的会话、SQL、锁、性能等信息:

字典对象用途说明
VSESSION/GVSESSION查询当前会话(RAC 用 GV$)
V$PROCESS查询会话对应的操作系统进程
VSQL/VSQLAREA查询执行过的 SQL 语句
V$LOCK查询数据库锁(阻塞 / 等待)
V$TRANSACTION查询事务信息
V$INSTANCE查询实例状态(启动时间、版本等)
V$DATABASE查询数据库基本信息(名称、字符集、归档模式等)

5. 备份 / 恢复

可查询备份、归档、恢复相关的元数据:

字典对象用途说明
V$BACKUP查询数据文件的备份状态
V$ARCHIVED_LOG查询归档日志信息
V$RECOVERY_FILE_DEST查询闪回恢复区(FRA)信息
V$BACKUP_SET查询 RMAN 备份集信息

6. SYS 基表(底层)

间接授予对 SYS 模式下底层字典基表的 SELECT 权限(普通用户极少直接查询,但角色包含此权限):

  • 如 TAB$(表的底层存储)、COL$(列的底层存储)、OBJ$(对象的底层存储)、USER$(用户的底层存储)等。

三、版本差异(关键)

Oracle 不同版本中,SELECT_CATALOG_ROLE 的权限范围略有调整:

版本差异点
11g 及之前包含所有 V$/GV$ 视图的 SELECT 权限,是字典查询的核心角色;
12c+/18c+/19c/21c1. 部分新增的字典视图权限拆分到 SELECT ANY DICTIONARY 角色;2. V$ 视图的权限仍包含,但部分云原生 / CDB 相关字典(如 CDB_*)需补充权限;3. PDB 环境中,该角色仅能查询当前 PDB 的字典,跨 PDB 需额外授权。

四、重要特点

  1. 仅读权限:无任何 INSERT/UPDATE/DELETE/ALTER/DROP 等修改类权限,也无 EXECUTE 权限(仅能查存储过程元数据,不能执行);
  2. 安全替代方案:避免直接授予 SELECT ANY DICTIONARY(更宽泛的系统权限),降低普通用户的权限风险;
  3. DBA_ 视图访问*:普通用户默认只能查 USER_*(自己的对象)、ALL_*(有权限的对象),授予该角色后可查 DBA_*(所有对象);
  4. 无管理权限:无法执行 CREATE USERGRANTALTER SYSTEM 等管理操作。

五、如何验证该角色的具体权限

可通过以下 SQL 查询 SELECT_CATALOG_ROLE 被授予的所有具体权限:

-- 1. 查询该角色的对象级权限(对SYS字典表/视图的SELECT权限)
SELECT 
  tp.owner,
  tp.table_name,
  tp.privilege,
  tp.grantable
FROM dba_tab_privs tp
WHERE tp.grantee = 'SELECT_CATALOG_ROLE'
ORDER BY tp.table_name;

-- 2. 查询该角色的系统权限(极少,主要是对象级权限)
SELECT 
  sp.privilege,
  sp.admin_option
FROM dba_sys_privs sp
WHERE sp.grantee = 'SELECT_CATALOG_ROLE';

-- 3. 简化版:统计该角色可访问的字典对象数量
SELECT COUNT(*) AS total_catalog_objects
FROM dba_tab_privs
WHERE grantee = 'SELECT_CATALOG_ROLE'
  AND privilege = 'SELECT';

总结

SELECT_CATALOG_ROLE 是 Oracle 为 “安全查询数据字典” 设计的最小权限角色,涵盖了所有核心字典视图 / 表的 SELECT 权限,满足普通用户(如开发、运维)查询数据库元数据、性能、权限、存储等信息的需求,且无修改类权限,是生产环境中授予字典查询权限的首选。

赞(0) 打赏
未经允许不得转载:徐万新之路 » SELECT_CATALOG_ROLE

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫

微信扫一扫

登录

找回密码

注册