如何在Oracle ASM中创建无需SYS权限即可查询指定表的普通用户
Oracle ASM普通用户查询X$类固定表实现说明
首先明确核心结论:Oracle ASM 本身是服务型实例,并非常规的关系型数据库实例,没有存储普通用户信息的独立数据字典与表空间,默认不支持像普通Oracle实例那样创建独立的普通用户,也不能直接对非SYS类用户授予X$内部固定表的查询权限。
前提说明
X$KFFXP 这类ASM底层固定表是SYS归属的内存结构,常规GRANT授权语句无法直接在ASM实例中执行,且ASM实例仅允许持有SYSASM、SYSDBA、SYSOPER权限的用户登录,没有普通用户的权限管理体系。
注意:ASM实例的身份校验仅支持操作系统组验证、密码文件验证两种方式,不存在普通数据库那种将用户信息存储在数据字典中的机制,因此无法直接在ASM实例中创建无SYS类权限的独立用户。
可行替代方案(无需给最终用户SYS类权限)
如果需要让非DBA人员查询ASM固定表信息,可以通过挂载ASM存储的普通数据库实例间接实现,步骤如下:
- 首先在关联ASM的普通数据库实例(业务库、集群CDB均可)中创建普通查询用户:
CREATE USER asm_query_user IDENTIFIED BY "自定义强密码";
- 在该普通数据库实例中,给上述用户授予对应ASM固定表的查询权限,所有操作在普通数据库实例执行,不需要登录ASM实例:
-- 授予X$KFFXP查询权限 GRANT SELECT ON SYS.X$KFFXP TO asm_query_user; -- 其他需要的ASM固定表权限同理添加,例如: GRANT SELECT ON SYS.X$KFDAT TO asm_query_user;
- 后续用户直接登录普通数据库实例即可查询ASM相关固定表的信息,不需要持有SYSASM、SYSDBA权限,也不需要直接登录ASM实例,查询结果和直接在ASM实例中查询一致。
权限收敛建议
如果需要进一步限制用户的查询范围,可以基于X$固定表创建脱敏视图,仅开放需要的字段给用户:
-- 示例:创建仅包含盘组号、磁盘号、AU号字段的ASM extent视图 CREATE OR REPLACE VIEW SYS.ASM_EXTENT_VIEW AS SELECT GROUP_NUMBER, DISK_NUMBER, AU_KFFXP, NUMBER_KFFXP FROM SYS.X$KFFXP; -- 仅给用户开放视图查询权限,不开放底层X$表权限 GRANT SELECT ON SYS.ASM_EXTENT_VIEW TO asm_query_user;
内容的提问来源于stack exchange,提问作者pepicon
相关产品推荐
相关产品推荐

