如何实现Oracle 19c中用户级别的闪回查询权限控制

风静小哥_5716

风静小哥_5716

2026-07-01

336人浏览

原创

执行 select ... as of timestamp 查询其他 schema 表需显式授予 flashback 对象权限,仅 select 权限不足;dbms_flashback.enable_at_time 需 execute 权限且不替代表级 select 或 flashback 权限;flashback 权限不可通过角色间接授予,必须直接授予用户。

用户能执行 select ... as of timestamp 查询其他 schema 的表,不是靠 select 权限本身决定的,而是由显式授予的 flashback 对象权限控制——没这个权限,哪怕有 select,也会报 ora-01031: insufficient privileges。

grant flashback on table 是核心授权动作

闪回查询跨 schema 时,FLASHBACK 权限是独立于 SELECT 的强制要求。只给 SELECT 不够,必须显式加授:

  • GRANT SELECT, FLASHBACK ON scott.emp TO dev_user; —— 这才是完整授权
  • 如果只执行 GRANT SELECT ON scott.emp TO dev_user;,后续执行 SELECT * FROM scott.emp AS OF TIMESTAMP SYSDATE-1/1440 会直接失败
  • FLASHBACK 权限不继承:即使 dev_user 是 scott 的同义词拥有者或有 SELECT ANY TABLE,也不能替代该对象级授权

DBMS_FLASHBACK.ENABLE_AT_TIME 需要 EXECUTE 权限

用 DBMS_FLASHBACK 包切换会话时间点(比如回退 10 分钟),和 AS OF 语法是两条路径,权限要求不同:

Crypto Sniper Oracle
Crypto Sniper Oracle

机构级量化市场预言机,提供订单簿失衡(OBI)、VWAP分析、自动化报告及Telegram预警。

下载
  • EXECUTE 权限针对包本身:GRANT EXECUTE ON sys.DBMS_FLASHBACK TO dev_user;
  • 授权后,用户可在自己会话中执行:EXEC DBMS_FLASHBACK.ENABLE_AT_TIME(SYSDATE - 1/24); SELECT * FROM emp;
  • 注意:这种方式下,emp 必须是当前用户 own 的表,或已单独授予 SELECT —— FLASHBACK 权限在这里不生效,它只管包调用权
  • 误以为授了 EXECUTE 就能查别人表,结果报 ORA-00942: table or view does not exist,其实是缺 SELECT 权限

回收站(Recycle Bin)不影响闪回查询权限

闪回查询(AS OF)读的是 undo 数据,和回收站无关;而 FLASHBACK DROP 才依赖回收站。别混淆这两者:

  • 关闭回收站(ALTER SYSTEM SET RECYCLEBIN = OFF;)对 AS OF 查询完全无影响
  • 但若用户试图用 FLASHBACK TABLE scott.emp TO BEFORE DROP,那才需要 FLASHBACK ANY TABLE 或对象级 FLASHBACK 权限,且回收站必须开启
  • 权限检查发生在语句解析阶段:AS OF 查非本 schema 表 → 检查目标表上的 FLASHBACK 权限;FLASHBACK TABLE ... TO BEFORE DROP → 检查当前用户对目标 schema 的 FLASHBACK 系统权限或对象权限

真正容易被忽略的是:FLASHBACK 权限不能通过角色间接授予(比如把权限先授给角色再授角色给用户),必须直接授予用户。否则 AS OF 查询仍失败,且错误提示不会明确指出是权限路径问题。

相关文章

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

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

下载

相关标签:

oracle

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

相关专题

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

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

2023.10.12

3923

8

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

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

2023.10.27

831

4

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

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

2024.02.23

1029

5

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

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

2024.03.06

5761

10

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

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

2024.03.06

2703

4

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

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

2024.04.07

5740

11

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

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

2024.04.29

7581

6

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

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

2024.04.29

1030

5

sql中删除一列的命令是什么
sql中删除一列的命令是什么

在sql中,使用alter table语句可以删除一列,语法为:alter table table_name drop column column_name。想了解更多sql的相关内容,可以阅读本专题下面的文章。

2024.04.29

912

5

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程