非SYS用户授予AUDSYS.UNIFIED_AUDIT_TRAIL查询权限遇ORA-01720错误求助
问题场景
- 以SYS身份为LOCAL_ADMIN用户授予
AUDSYS.UNIFIED_AUDIT_TRAIL的SELECT权限并附加WITH GRANT OPTION - LOCAL_ADMIN尝试执行授权语句时触发ORA-01720错误:
错误信息:GRANT SELECT ON AUDSYS.UNIFIED_AUDIT_TRAIL TO user_xyz;ORA-01720: Berechtigungsoption für 'SYS.STMT_AUDIT_OPTION_MAP' nicht vorhanden
01720. 00000 - "grant option does not exist for '%s.%s'"
*Cause: A grant was being performed on a view or a view was being replaced
and the grant option was not present for an underlying object.
*Action: Obtain the grant option on all underlying objects of the view or
revoke existing grants on the view. - 即使额外执行以下授权,问题仍未解决:
CONNECT SYS/[密码] AS SYSDBA; GRANT SELECT ON AUDSYS.UNIFIED_AUDIT_TRAIL TO LOCAL_ADMIN WITH GRANT OPTION; GRANT SELECT ON SYS.STMT_AUDIT_OPTION_MAP TO LOCAL_ADMIN WITH GRANT OPTION;
原因分析
AUDSYS.UNIFIED_AUDIT_TRAIL是Oracle的系统级复杂视图,依赖多个SYS模式下的底层对象(如STMT_AUDIT_OPTION_MAP、AUDIT$、OBJ$等)。仅授予单个依赖对象的权限无法满足视图授权的要求,必须对所有底层对象都授予带WITH GRANT OPTION的SELECT权限,而逐个授权所有依赖对象既繁琐又存在安全风险。
解决方案
方案1:由SYS直接授权目标用户(最简方式)
绕开中间用户LOCAL_ADMIN,直接以SYS身份给user_xyz授权:
CONNECT SYS/[密码] AS SYSDBA; GRANT SELECT ON AUDSYS.UNIFIED_AUDIT_TRAIL TO user_xyz;
方案2:创建自定义视图(更安全且可控)
- 以SYS身份创建仅包含所需列的自定义视图,归属LOCAL_ADMIN模式:
CONNECT SYS/[密码] AS SYSDBA; CREATE OR REPLACE VIEW LOCAL_ADMIN.AUDIT_SUMMARY AS SELECT EVENT_TIMESTAMP, DB_USER, OS_USER, ACTION_NAME, OBJECT_NAME FROM AUDSYS.UNIFIED_AUDIT_TRAIL; - 授予LOCAL_ADMIN该自定义视图的SELECT权限并允许转授:
GRANT SELECT ON LOCAL_ADMIN.AUDIT_SUMMARY TO LOCAL_ADMIN WITH GRANT OPTION; - LOCAL_ADMIN即可将自定义视图的权限授予user_xyz:
CONNECT LOCAL_ADMIN/[密码]; GRANT SELECT ON AUDIT_SUMMARY TO user_xyz;
方案3:授予全局字典权限(不推荐,权限过大)
若无需严格权限控制,可授予LOCAL_ADMINSELECT ANY DICTIONARY权限:
CONNECT SYS/[密码] AS SYSDBA; GRANT SELECT ANY DICTIONARY TO LOCAL_ADMIN WITH ADMIN OPTION;
此方式会让LOCAL_ADMIN拥有所有数据字典的访问权限,仅适用于信任度极高的管理员用户。
内容的提问来源于stack exchange,提问作者BerndT

