impdp默认不导入任何系统权限、角色或grant语句,必须导出时显式指定content=all或include=grant,并提前在目标库创建用户、角色及表空间,否则权限将静默跳过。

直接用 impdp 导入用户,哪怕加了 SCHEMAS=scott,默认也不会带任何系统权限或角色——连 CONNECT 和 RESOURCE 都会静默跳过。
impdp 默认不导入 GRANT、ROLE、SYSTEM PRIVILEGE
日志里只有一行 ORA-39112: Dependent object type GRANT:"HR" skipped,不报错、不中断,但目标库查不到权限。根本原因不是导出没包含,而是 impdp 的 GRANTS=YES(默认值)仅在目标库已存在对应用户、角色、对象的前提下才生效;一旦 hr 用户不存在,所有 GRANT my_app_role TO hr 或 GRANT CREATE TABLE TO hr 全部跳过,毫无提示。
- 导出端必须显式加
CONTENT=ALL(最稳妥)或INCLUDE=GRANT,否则expdp根本不会把授权语句写进 dump 文件 -
INCLUDE=GRANT只导“被授予方”视角的授权(如GRANT SELECT ON scott.emp TO hr),不导WITH GRANT OPTION链路,也不记录谁授的权 -
CONTENT=ALL会导出表、索引、约束、视图、同义词、触发器 + 所有GRANT语句,但依然依赖目标库已有用户和角色
目标库必须提前建好用户、角色、表空间
impdp 不执行 CREATE USER、CREATE ROLE 或 CREATE TABLESPACE。如果目标库没有 hr 用户,那所有授给 hr 的权限都会跳过;如果用了自定义角色 my_app_role,而目标库没建,GRANT my_app_role TO hr 同样失效。
- 先查源库密码哈希:
SELECT username, password FROM dba_users WHERE username = 'HR' - 在目标库执行:
CREATE USER hr IDENTIFIED BY VALUES 'xxx' DEFAULT TABLESPACE users(用查到的password值) - 如有自定义角色,提前运行:
CREATE ROLE my_app_role,并至少赋予CONNECT和RESOURCE - 确保目标库存在对应表空间,且用户有配额:
ALTER USER hr QUOTA UNLIMITED ON users
用 DBMS_METADATA 手动生成 GRANT 语句更可控
当需要精确克隆“OLD_USER 显式拥有的权限”,而不是依赖 impdp 自动还原时,应绕过数据泵,直接从数据字典生成可执行语句。这能避开无效依赖、隐式继承权限、大小写/引号错误等问题。
- 查系统权限:
DBA_SYS_PRIVS,注意过滤ADMIN_OPTION(影响后续转授能力)和COMMON字段(多租户环境需区分 CDB/PDB) - 查角色:
DBA_ROLE_PRIVS,跳过DEFAULT_ROLE = 'NO'的条目(这类角色不会自动生效) - 查对象权限:
DBA_TAB_PRIVS,限定GRANTEE = 'OLD_USER'且GRANTABLE = 'NO',避免重复授权 - 对象名必须用
DBMS_ASSERT.ENQUOTE_NAME处理,否则带双引号创建的表(如"MyTable")会导致GRANT SELECT ON MyTable TO NEW_USER报ORA-00942
REMAP_SCHEMA 不改 GRANT 里的 schema 名
加 REMAP_SCHEMA=scott:hr 只影响表、索引等对象的属主,不影响 GRANT 语句中硬编码的 schema 名。比如导出语句是 GRANT SELECT ON scott.emp TO hr,导入时仍按 scott.emp 解析——如果目标库没 scott 用户,或该表不在 scott 下,权限就挂了。
- 要么在导出前确保源库
scott.emp存在且可访问(用于权限校验) - 要么导出时用
SCHEMAS=scott+CONTENT=ALL,导入时用REMAP_SCHEMA=scott:hr,同时确保目标库已建好hr用户和对应表空间 - 不要指望
REMAP_SCHEMA自动重写GRANT中的对象引用;它对权限语句完全透明
真正容易被忽略的是:权限是否“显式授予”与“继承获得”的边界。DBA 往往只关注 DBA_TAB_PRIVS,却忘了 DBA_SYS_PRIVS 里可能有 SELECT ANY TABLE 这种全局权限,它不会出现在对象级视图里,但会彻底改变新用户的实际能力。迁移前务必组合查三张视图,并人工确认每一条权限的真实来源和作用范围。











