<p>IMP-00013错误主因是导入用户虽被授予DBA或IMP_FULL_DATABASE角色,但未设为默认角色;需执行ALTER USER ... DEFAULT ROLE DBA/IMP_FULL_DATABASE,并用SELECT * FROM session_roles验证激活状态。</p>

IMP-00013 错误本质不是“没登录”,而是导入用户缺少特定权限角色,仅靠 CONNECT 或 RESOURCE 不够,必须显式启用 IMP_FULL_DATABASE 或 DBA 角色。
为什么 grant dba to user 还是报 IMP-00013?
常见错觉是“授了 DBA 就万事大吉”,但 Oracle 的角色默认可能未激活。即使用户拥有 DBA 角色,若其 DEFAULT ROLE 里没包含它,imp 工具在会话中就感知不到该权限。
- 检查当前用户的默认角色:
SELECT granted_role, default_role FROM dba_role_privs WHERE grantee = 'YOUR_USER'; - 若
DEFAULT_ROLE列为NO,需执行:ALTER USER YOUR_USER DEFAULT ROLE DBA; - 注意:
GRANT DBA TO YOUR_USER和ALTER USER ... DEFAULT ROLE DBA是两步,缺一不可
更安全的替代方案:用 IMP_FULL_DATABASE 而非 DBA
现场环境通常禁止给业务用户分配 DBA 权限,这时应优先使用最小权限原则——只授予导入所需能力。
-
GRANT IMP_FULL_DATABASE TO YOUR_USER;即可满足绝大多数imp场景 - 该角色不包含删库、改系统参数等高危权限,比
DBA更可控 - 如果导出文件来自
SYSTEM或其他 DBA 用户,IMP_FULL_DATABASE足以绕过 IMP-00013 - 验证是否生效:
SELECT * FROM session_roles;看返回中是否有IMP_FULL_DATABASE
导出端也能提前规避问题
与其总在导入时补权限,不如从源头控制导出用户的权限级别。
- 开发库导出前,确认导出用户没有
DBA角色:REVOKE DBA FROM export_user; - 改用普通权限用户导出(如只含
CONNECT、RESOURCE、SELECT_CATALOG_ROLE) - 这样生成的 dmp 文件不带“DBA 导出”标记,任意有
IMP_FULL_DATABASE的用户都能导入 - 特别适合 CI/CD 流程或自动化脚本——避免每次部署都要手动授权
真正容易被忽略的是角色激活状态和默认角色配置。很多 DBA 执行了 GRANT DBA 就以为完成了,却忘了 DEFAULT ROLE 这个开关。哪怕你用 IMP_FULL_DATABASE,也建议导入前跑一次 SELECT * FROM session_roles; 确认权限已就位——毕竟 imp 不报详细原因,只甩一个 IMP-00013。


















