执行DB2未公开存储过程SYSPROC.DB2LK_GENERATE_DDL需哪些最小权限?
执行SYSPROC.DB2LK_GENERATE_DDL提取DB2 DDL所需的最小权限
SYSPROC.DB2LK_GENERATE_DDL是db2look工具依赖的未公开内部存储过程,IBM官方不直接支持调用,但要在非管理员/实例所有者账号下执行它,除了你已尝试的权限,还需要补充以下权限:
1. 补充SYSTOOLS.DB2LOOK_INFO的操作权限
该存储过程会将生成的DDL临时写入SYSTOOLS.DB2LOOK_INFO表,仅授予SELECT权限不够,需要加上INSERT和DELETE权限:
db2 grant insert, delete, select on SYSTOOLS.DB2LOOK_INFO to user devuser
2. 系统编目视图的SELECT权限
存储过程需要读取DB2系统编目来获取对象元数据,必须授予目标账号对核心编目视图的SELECT权限。根据你要提取的对象类型,至少需要以下权限(按需调整):
-- 表、列、索引 db2 grant select on SYSCAT.TABLES to user devuser db2 grant select on SYSCAT.COLUMNS to user devuser db2 grant select on SYSCAT.INDEXES to user devuser -- 视图、存储过程、函数 db2 grant select on SYSCAT.VIEWS to user devuser db2 grant select on SYSCAT.PROCEDURES to user devuser db2 grant select on SYSCAT.FUNCTIONS to user devuser -- 触发器、约束 db2 grant select on SYSCAT.TRIGGERS to user devuser db2 grant select on SYSCAT.TABCONST to user devuser db2 grant select on SYSCAT.CHECKS to user devuser
如果需要提取表空间、缓冲池等数据库级对象,还要加上SYSCAT.TABLESPACES、SYSCAT.BUFFERPOOLS的SELECT权限。
3. 存储过程本身的EXECUTE权限(确认生效)
db2 grant execute on procedure SYSPROC.DB2LK_GENERATE_DDL to user devuser
注意事项
由于SYSPROC.DB2LK_GENERATE_DDL是未公开的内部接口,IBM可能在后续DB2版本中修改其逻辑或权限要求。更稳妥的方式是使用官方支持的ADMIN_GET_DDL函数(DB2 10.5及以上版本可用),它的权限要求更明确,且受官方支持。
内容的提问来源于stack exchange,提问作者Ashish Pancholi
相关产品推荐
相关产品推荐

