【问题标题】:How to export users in Oracle with its roles and system privileges using expdp?如何使用 expdp 导出 Oracle 中的用户及其角色和系统权限?
【发布时间】:2020-01-19 08:03:17
【问题描述】:

我正在尝试在 Oracle 中导出架构/用户及其角色和系统权限。我不想导出任何数据或任何表格。我尝试使用以下命令导出用户。

expdp system/system@gisdblocal include=user DIRECTORY = TestBack  
logfile=test12.log DUMPFILE=test12.dmp SCHEMAS=test_replication

当我将其导入其他数据库或具有不同名称的同一数据库中时,即

impdp system/system@gisdblocal DIRECTORY = TestBack  DUMPFILE = test12.dmp   
SCHEMAS = test_replication REMAP_SCHEMA = 
test_replication:test_replication_copy 

用户或架构已创建,但尚未被授予任何角色或系统权限。

我这样做是因为我使用没有所需权限 DATAPUMP_IMP_FULL_DATABASEDATAPUMP_EXP_FULL_DATABASE 的用户创建了架构的备份。当我在另一个数据库中恢复该备份时,它说用户不存在。因此,我想先创建一个具有相同权限的用户,然后再恢复备份。

【问题讨论】:

  • 用户创建和权限授予确实应该编写脚本并存储在源代码控制存储库中。
  • 当我将整个架构从一个数据库刷新到另一个数据库时,我所做的是在导入之前删除所有目标架构对象,但不删除用户。

标签: oracle impdp expdp oracle-dump


【解决方案1】:

使用 SQL...

SELECT dbms_metadata.get_ddl('USER', :name)
  FROM dual
UNION ALL
SELECT dbms_metadata.get_granted_ddl('ROLE_GRANT', grantee)
  FROM dba_role_privs
 WHERE grantee = :name
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('DEFAULT_ROLE', grantee)
  FROM dba_role_privs
 WHERE grantee = :name
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('SYSTEM_GRANT', grantee)
  FROM dba_sys_privs          sp,
       system_privilege_map   spm
 WHERE sp.grantee = :name
   AND sp.privilege = spm.name
   AND spm.property <> 1
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('OBJECT_GRANT', grantee)
  FROM dba_tab_privs
 WHERE grantee = :name
   AND ROWNUM = 1
UNION ALL
SELECT dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', username)
  FROM dba_ts_quotas
 WHERE username = :name
   AND ROWNUM = 1

:namebeing...您要重新创建的 USER 的绑定变量。

【讨论】:

  • 自数据库第 5 版(1980 年代中期)以来,我一直是 Oracle DBA。这是我见过的从数据库到数据库中获取用户信息的最聪明的方法。哇。不错的工作。感谢分享。
  • 这是我们在 DBA > 安全面板中使用 SQL Developer 管理用户时在幕后使用的 SQL
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-29
  • 2016-11-28
  • 2011-02-19
  • 1970-01-01
  • 1970-01-01
  • 2011-02-19
  • 2021-07-24
相关资源
最近更新 更多