重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 126|回复: 0
打印 上一主题 下一主题

[Oracle] 用户权限收集

[复制链接]
跳转到指定楼层
楼主
发表于 2024-10-12 15:13:07 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
SQL> drop table t_tmp_user_lhr;
SQL> drop sequence s_t_tmp_user_lhr;
SQL> create table t_tmp_user_lhr(id number,username varchar2(50),
exec_sql varchar2(4000),
create_type varchar2(20));
SQL> create sequence s_t_tmp_user_lhr;
SQL> begin
for cur in (select d.username,
              d.default_tablespace,
              d.account_status,
              'create user ' || d.username || ' identified by ' ||
              d.username || ' default tablespace ' ||
              d.default_tablespace || ' TEMPORARY TABLESPACE ' ||
              d.temporary_tablespace || ';' create_user,
              replace(to_char(DBMS_METADATA.GET_DDL('USER',d.username)),
                     chr(10), '') create_user1
        from dba_users d
where d.username in ('业务用户')) loop
   insert into t_tmp_user_lhr
     (id,username,exec_sql,create_type)
   values
     (s_t_tmp_user_lhr.nextval,cur.username,cur.create_user,'USER');
   insert into t_tmp_user_lhr
     (id,username,exec_sql,create_type)
     select s_t_tmp_user_lhr.nextval,
          cur.username,
          case
            when d.admin_option = 'YES' then
              'GRANT ' || d.privilege || ' TO ' || d.grantee ||
              ' WITH GRANT OPTION ;'
            else
              'GRANT ' || d.privilege || ' TO ' || d.grantee|| ';'
            end priv,'DBA_SYS_PRIVS'
       from dba_sys_privs d
      where d.grantee=cur.username;
       insert into t_tmp_user_lhr
         (id,username,exec_sql,create_type)
         select s_t_tmp_user_lhr.nextval,
cur.username,
case
  when d.admin_option='YES' THEN
    'GRANT ' || d.granted_role || ' TO ' || d.GRANTEE ||
    ' WITH GRANT OPTION;'
  else
    'GRANT ' || d.granted_role || ' TO ' || d.GRANTEE || ';'
end priv,'DBA_ROLE_PRIVS'
         from DBA_ROLE_PRIVS d
        where d.grantee=cur.username;
       insert into t_tmp_user_lhr
         (id,username,exec_sql,create_type)
         select s_t_tmp_user_lhr.nextval,
cur.username,
case
                when d.grantable='YES' THEN
                  'GRANT ' || d.privilege || ' ON ' || d.owner || '.' ||
                  d.table_name || ' TO ' ||d.grantee ||
                  ' WITH GRANT OPTION ;'
                else
                  'GRANT ' || d.privilege || ' ON ' || d.owner || '.' ||
                  d.table_name || ' TO ' ||d.grantee || ';'
              end priv,'DBA_TAB_PRIVS'
         from DBA_TAB_PRIVS d
        where d.grantee=cur.username;
     end loop;
     commit;
  end;
  /
SQL> select * from t_tmp_user_lhr;
SQL> select id,username,create_type,exec_sql from t_tmp_user_lhr where create_type not in ('USER');

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

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

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-10-23 06:20 , Processed in 0.088597 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

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