很多人图省事,直接拿 dbms_metadata 导出用户权限脚本,结果要么连不上库,要么权限缺胳膊少腿。其实这里有四个硬性要求:必须分四类调用、用户名全大写、SET LONG 至少设到 100000——漏掉任意一项,导出的脚本八成就是废纸一堆。 为什么只跑一次 GET_GRANTED_DDL('O
很多人图省事,直接拿 dbms_metadata 导出用户权限脚本,结果要么连不上库,要么权限缺胳膊少腿。其实这里有四个硬性要求:必须分四类调用、用户名全大写、SET LONG 至少设到 100000——漏掉任意一项,导出的脚本八成就是废纸一堆。

长期稳定更新的攒劲资源: >>>点此立即查看<<<
GET_GRANTED_DDL('OBJECT_GRANT', 'U1') 不行对象权限?那只是用户能力的冰山一角。一个能登录、能查表、能建对象的用户,至少依赖四类元信息才能正常干活:
SYSTEM_GRANT:比如 CREATE SESSION,缺了这个连数据库都登不上去。ROLE_GRANT:典型场景 GRANT CONNECT TO "U1",但不会帮你展开角色内部的细粒度权限。DEFAULT_ROLE:决定连接后哪些角色自动生效,一句 ALTER USER "U1" DEFAULT ROLE "CONNECT" 就能影响用户的实际可用权限。OBJECT_GRANT:表、视图、序列上的 SELECT、INSERT 等,连列级授权(例如 GRANT UPDATE (name) ON emp TO u1)也在里面。如果只取了 OBJECT_GRANT,新用户可能拿到了表的 SELECT 权限,结果因为没有 CREATE SESSION 或默认角色没设对,连一条查询都跑不起来——这种坑踩一次就够难受的。
SET LONG 和输出控制参数必须显式设置DBMS_METADATA.GET_GRANTED_DDL 吐出来的是 CLOB,但 SQL*Plus 默认 LONG 值只有 80 个字符,根本塞不下多条 GRANT 语句。脚本一旦被截断,执行时立刻报 ORA-00922: missing or invalid option,逼着你回头排查。
必须在执行前一次性搞定环境设置:
SET LONG 100000 SET PAGESIZE 0 SET FEEDBACK OFF SET TRIMSPOOL ON SET LINESIZE 32767
忘了设 PAGESIZE 0?输出里会掺进页眉页脚;没关 FEEDBACK?中间冒出个 1 row selected 直接污染脚本;LINESIZE 太小?单行语句被换行截断,又得报错。这些小细节一个都不能省。
GET_GRANTED_DDL 不覆盖表空间配额和 PROFILE,但这两项直接影响用户能不能建表、密码会不会过期:
DBMS_METADATA.GET_GRANTED_DDL('TABLESPACE_QUOTA', 'U1') 获取,但注意它只返回第一条配额(rownum = 1 是经典陷阱)。如果用户在多个表空间有配额,得额外查 DBA_TS_QUOTAS 手动补全。DBMS_METADATA.GET_DDL('PROFILE', (SELECT profile FROM dba_users WHERE username = 'U1')) 获取,但只对非 DEFAULT profile 有效。如果用户用的是 DEFAULT,得确认目标库的 DEFAULT 定义是否一致,否则密码策略可能对不上。另外,CREATE USER 语句本身也要单独抓:DBMS_METADATA.GET_DDL('USER', 'U1'),这里面包含密码哈希、默认/临时表空间、账户状态等关键信息,缺了它用户都建不出来。
ORA-00942GET_GRANTED_DDL('OBJECT_GRANT', 'U1') 遇到通过同义词授予的权限(比如 GRANT SELECT ON my_emp TO u1,而 my_emp 是 scott.emp 的同义词),它会原样输出同义词名,不会自动解析成实际对象。脚本执行时如果同义词还没建,或者指向的对象不存在,立刻报 ORA-00942: table or view does not exist。
更隐蔽的是系统对象授权,例如 SYS.DUAL:函数不校验目标是否存在,直接生成 GRANT SELECT ON SYS.DUAL TO "U1"。如果目标库启用了 RESTRICTED SESSION 或者权限模型有差异,这条语句要么失败要么被忽略,导致结果不一致。
真正完整的克隆流程,不是导出完就万事大吉,而必须按顺序执行:建用户 → 设 profile → 配表空间配额 → 授系统权限 → 授角色 → 设默认角色 → 授对象权限。任何一步缺失或者顺序错乱,最终得到的用户行为都可能跟原版南辕北辙。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述