最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何实现Oracle 19c中用户级别的闪回查询权限控制
时间:2026-07-04 10:36:56 编辑:袖梨 来源:一聚教程网
执行 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 语法是两条路径,权限要求不同:
-
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 查询仍失败,且错误提示不会明确指出是权限路径问题。
相关文章
- 高德地图路线规划显示异常怎么办 07-09
- 漫蛙漫画官方版正版ios如何安装 07-09
- 胖东来官网地址-胖东来官方网站入口地址 07-09
- investopedia官网中文版入口-investopedia国内能用的官方网页版入口地址 07-09
- 一点文学txt小说网站入口-一点文学小说官网入口地址2026最新 07-09
- 易校园怎么绑定微信 07-09