找回密码
 立即注册
首页 业界区 安全 Oracle如何生成导出账号的DDL脚本

Oracle如何生成导出账号的DDL脚本

齐娅晶 5 小时前
之前我写了一篇博客ORACLE如何用一个脚本找出一个用户的授权信息?,有些场景,这个脚本够用了,但是有些场景,例如,你需要将一个账号的权限从开发环境平移到UAT环境时,我想通过一个脚本生成账户(test)的ddl脚本,自己写了一个脚本,后面发现网上有一个脚本更好/更全面,分享于此:
  1. set long 20000
  2. set longchunksize 20000
  3. set pagesize 0
  4. set linesize 1000
  5. set trimspool on
  6. set feedback off
  7. set verify off
  8. column ddl format a1000
  9. --Add a semicolon at the end of each statement
  10. execute DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'SQLTERMINATOR',true);
  11. --Generate the DDL for User you enter
  12. select dbms_metadata.get_ddl('USER', u.username) AS ddl
  13. from dba_users u
  14. where u.username = upper(trim('&&v_username'))
  15. union all
  16. select dbms_metadata.get_granted_ddl('TABLESPACE_QUOTA', tq.username) AS ddl
  17. from dba_ts_quotas tq
  18. where tq.username = upper(trim('&&v_username')) and rownum = 1
  19. union all
  20. select dbms_metadata.get_granted_ddl('ROLE_GRANT', rp.grantee) AS ddl
  21. from dba_role_privs rp
  22. where rp.grantee = upper(trim('&&v_username'))
  23. and rownum = 1
  24. union all
  25. select dbms_metadata.get_granted_ddl('SYSTEM_GRANT', sp.grantee) AS ddl
  26. from dba_sys_privs sp
  27. where sp.grantee = upper(trim('&&v_username'))
  28. and rownum = 1
  29. union all
  30. select dbms_metadata.get_granted_ddl('OBJECT_GRANT', tp.grantee) AS ddl
  31. from dba_tab_privs tp
  32. where tp.grantee = upper(trim('&&v_username'))
  33. and rownum = 1
  34. union all
  35. select dbms_metadata.get_granted_ddl('DEFAULT_ROLE', rp.grantee) AS ddl
  36. from dba_role_privs rp
  37. where rp.grantee = upper(trim('&&v_username'))
  38. and rp.default_role = 'YES'
  39. and rownum = 1
  40. union all
  41. select to_clob('/* Start profile creation script in case they are missing') AS ddl
  42. from dba_users u
  43. where u.username = upper(trim('&&v_username'))
  44. and u.profile='DEFAULT'
  45. and rownum = 1
  46. union all
  47. select dbms_metadata.get_ddl('PROFILE', u.profile) AS ddl
  48. from dba_users u
  49. where u.username = upper(trim('&&v_username'))
  50. and u.profile='DEFAULT'
  51. union all
  52. select to_clob('End profile creation script */') AS ddl
  53. from dba_users u
  54. where u.username = upper(trim('&&v_username'))
  55. and u.profile='DEFAULT'
  56. and rownum = 1
  57. /
复制代码
此脚本不是原始脚本,原始脚本请见下文链接.  此脚本做了些许变化, 对输入变量v_username进行了去除空格与转换大写处理,让脚本更健壮一点.
测试如下所示, 生成用户test的ddl脚本,如下所示
  1. SQL> @gen_user_create_script.sql
  2. Enter value for v_username: test
  3.    CREATE USER "TEST" IDENTIFIED BY VALUES 'T:3F0DD3EE56D86868D4C97E562247BFFFD8EC4D8C60BDE2D720D406B46A4BE300C0BCD1BFF90EFD40D8843D872698FCFC62FF64F589E6B6102350CD3C762E22B955F52FF0E0EC64BF96F3B60799FFAE5B'
  4.       DEFAULT TABLESPACE "USERS"
  5.       TEMPORARY TABLESPACE "TEMP";
  6.    GRANT "CONNECT" TO "TEST";
  7.   GRANT CREATE TABLE TO "TEST";
  8.   GRANT CREATE VIEW TO "TEST";
  9.    ALTER USER "TEST" DEFAULT ROLE ALL;
  10. /* Start profile creation script in case they are missing
  11.    ALTER PROFILE "DEFAULT"
  12.     LIMIT
  13.          COMPOSITE_LIMIT UNLIMITED
  14.          SESSIONS_PER_USER UNLIMITED
  15.          CPU_PER_SESSION UNLIMITED
  16.          CPU_PER_CALL UNLIMITED
  17.          LOGICAL_READS_PER_SESSION UNLIMITED
  18.          LOGICAL_READS_PER_CALL UNLIMITED
  19.          IDLE_TIME UNLIMITED
  20.          CONNECT_TIME UNLIMITED
  21.          PRIVATE_SGA UNLIMITED
  22.          FAILED_LOGIN_ATTEMPTS 10
  23.          PASSWORD_LIFE_TIME 15552000/86400
  24.          PASSWORD_REUSE_TIME UNLIMITED
  25.          PASSWORD_REUSE_MAX UNLIMITED
  26.          PASSWORD_VERIFY_FUNCTION NULL
  27.          PASSWORD_LOCK_TIME 86400/86400
  28.          PASSWORD_GRACE_TIME 604800/86400
  29.          INACTIVE_ACCOUNT_TIME UNLIMITED
  30.          PASSWORD_ROLLOVER_TIME -1/86400 ;
  31. End profile creation script */
复制代码
1.png

2.png

参考资料

https://smarttechways.com/2021/02/04/generate-ddl-for-the-user-including-grants-in-oracle/
扫描上面二维码关注我如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册