设为首页 收藏本站
查看: 530|回复: 0

[经验分享] 查看oracle用户所有权限,并获取授权的DDL

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-3-3 09:31:09 | 显示全部楼层 |阅读模式
1. 查看指定用户拥有的所有权限(系统权限、对象权限、角色),分别是通过dba_sys_privs,dba_tab_privs,dba_role_privs三个视图来查看。
脚本:query_user_privs.sql

2. 获得指定用户所赋权限的DDL语句,有两种方式:
1).利用1中query_user_privs.sql脚本,在select 后加入grant  to等关键字,使得查询输出的结果为完整的DDL语句。
脚本:get_ddl_privs_dic.sql
2)使用oracle提供的包:
dbms_metadata.get_ddl('USER','&&uname') 获取创建user的DDL语句
dbms_metadata.get_granted_ddl('SYSTEM_GRANT','&&uname')  获取指定用户赋予系统权限的DDL语句
dbms_metadata.get_granted_ddl('ROLE_GRANT','&&uname‘) 获取指定用户赋予角色的DDL语句
dbms_metadata.get_granted_ddl('OBJECT_GRANT,'&&uname') 获取指定用户赋予对象权限的DDL语句
脚本:get_ddl_privs_pac.sql

3. 脚本
3.1 query_user_privs.sql
set echo off   
set verify off   
set pagesize 999   
set linesize 200   
col type format a20   
SELECT *   
  FROM (SELECT a.username, 'ROLE' AS TYPE,     
               b.granted_role || DECODE (admin_option, 'YES', ' (With Admin Option)', NULL) what_granted   
          FROM sys.dba_users a, sys.dba_role_privs b   
         WHERE a.username = b.grantee   
        UNION   
        SELECT a.username, 'SysPrivs' AS TYPE,     
               b.privilege || DECODE (admin_option, 'YES', ' (With Admin Option)', NULL) what_granted   
          FROM sys.dba_users a, sys.dba_sys_privs b   
         WHERE a.username = b.grantee   
        UNION   
        SELECT a.username,   
               'ObjPrivs' AS TYPE,   
               b.owner || '.' || b.table_name || ' - ' || b.privilege ||   
                DECODE (grantable, 'YES', ' (With Grant Option)', NULL) what_granted   
          FROM sys.dba_users a, sys.dba_tab_privs b   
         WHERE a.username = b.grantee   
        ORDER BY 1)   
WHERE username = upper('&input_username');   
3.2 get_ddl_privs_dic.sql
clear screen   

accept uname prompt 'Enter User Name : '   
accept outfile prompt  ' Output filename : '   

col username noprint   
col lne newline   

set heading off pagesize 0 verify off feedback off linesize 180   

spool &&outfile..gen   

prompt     
SELECT username, 'CREATE USER '||username||' '||   
       DECODE(password, 'EXTERNAL', 'IDENTIFIED EXTERNALLY',   
              'IDENTIFIED BY VALUES '''||password||''' ') lne,   
       'DEFAULT TABLESPACE '||default_tablespace lne,   
       'TEMPORARY TABLESPACE '||temporary_tablespace||';' lne   
  FROM DBA_USERS   
WHERE USERNAME LIKE UPPER('%&&uname%')   
    OR UPPER('&&uname') IS NULL   
ORDER BY USERNAME;   

SELECT username, 'ALTER USER '||username||' QUOTA '||   
       DECODE(MAX_BYTES, -1, 'UNLIMITED', TO_CHAR(ROUND(MAX_BYTES/1024))||'K')   
       ||' ON '||tablespace_name||';' lne   
  FROM DBA_TS_QUOTAS   
WHERE USERNAME LIKE UPPER('%&&uname%')   
    OR UPPER('&&uname') IS NULL   
ORDER BY USERNAME;   

col grantee noprint   

select grantee, granted_role granted_priv,   
       'GRANT '||granted_role||' to '||grantee||   
       DECODE(ADMIN_OPTION, 'Y', ' WITH ADMIN OPTION;', ';')   
  from dba_role_privs   
where grantee like upper('%&&uname%')   
         UNION   
select grantee, privilege granted_priv,   
       'GRANT '||privilege||' to '||grantee||   
       DECODE(ADMIN_OPTION, 'Y', ' WITH ADMIN OPTION;', ';')   
  from dba_sys_privs   
where grantee like upper('%&&uname%')   
order by 1, 2;   

spool off   
3.3 get_ddl_privs_pac.sql
clear screen   

accept uname prompt 'Enter User Name : '   
accept outfile prompt  ' Output filename : '   

spool &&outfile..gen   

SET LONG 2000000 PAGESIZE 0 head off verify off feedback off linesize 180   

SELECT dbms_metadata.get_ddl('USER','&&uname') FROM dual;   
SELECT dbms_metadata.get_granted_ddl('SYSTEM_GRANT','&&uname') from dual;   
SELECT dbms_metadata.get_granted_ddl('ROLE_GRANT','&&uname') from dual;   
SELECT dbms_metadata.get_granted_ddl('OBJECT_GRANT','&&uname') from dual;   

spool off   

ballontt
2014/02/27
---The End---
微博:weibo.com/ballontt
如需转载,请标明出处和链接,谢谢!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-15347-1-1.html 上篇帖子: Oracle 的 INSERT ALL和INSERT FIRST 下篇帖子: Oracle Cursor详解与实例 oracle 用户
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表