问题:
SQL> select dbms_metadata.get_ddl('CONSTRAINT','C1','TEST');
select dbms_metadata.get_ddl('CONSTRAINT','C1','TEST');
[-5669]:权限不足
-5669: DBMS_METADATA.GET_DDL line 2395 .
版本:
行号 BANNER
1 DM Database Server 64 V8
2 8.4
3 企业版
4 DB Version: 0x7000c
5 03134284194-20240827-240746-20108
6 Msg Version: 14
7 Gsu level(5) cnt: 0
已经给过的权限:
grant execute on sys.dbms_metadata to test2;
grant select on test.t1 to test2;
grant all on test.t1 to test2;
grant select any table to test2;
grant public,resource,soi,vti to test2;
grant EXECUTE ANY PACKAGE to test2;
其他版本甚至不需要授权就可以用dbms_metadata查询其他用户对象的ddl,似乎只有这个版本不可以,此版本官方文档《系统包使用手册中》提示“用户只能看到自己被授权的对象定义。拥有 DBA/OBJECT_ADMIN 权限可看到其他用户的对象定义。”;授予dba权限后可以正常执行,OBJECT_ADMIN 似乎只有安全版才有,如果不能授予dba权限是否有其他解决方法
给用户对应的的查询对象权限,或者直接使用syddba用户去执行
1、新版本有一个角色SELECT_CATALOG_ROLE
grant SELECT_CATALOG_ROLE to 用户;
基本可以解决

参考链接:
https://eco.dameng.com/document/dm/zh-cn/pm/sql-appendix
SP_UPGRADE_SELECT_CATALOG_ROLE();
V8.1.4.149 版本之前的库在使用最新执行码并且绕过自动升级的情况下,可手动调用此过程增加 SELECT_CATALOG_ROLE 角色。
sysdba登录:
GRANT SELECT_CATALOG_ROLE TO TEST;
test登录:
GRANT SELECT_CATALOG_ROLE TO sysdba;