您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

获取用户和权限SQL语句

2025/8/27 6:15:19发布12次查看
在日常维护工作中,会遇到需要将一个库的用户迁移到别的库当中去,在此过程中需要在目标库当中创建相同的用户和相关权限,如果在
在日常维护工作中,会遇到需要将一个库的用户迁移到别的库当中去,在此过程中需要在目标库当中创建相同的用户和相关权限,如果在一个开发文档规范的项目组中,相关的用户和权限信息可以轻易的获取到,但是万一相关的信息没有被记录文档,,这个时候就需要从数据库中获取相关的语句了。
以下语句可以获取到相关的所需的创建语句。
-- 获取创建用户
set pagesize 100;
set linesize 150;
set serveroutput on size 1000000;
undefine user_name;
declare
  v_sql      varchar2(1000);
  v_username varchar2(100):='&&user_name';
begin
  v_username:=upper(v_username);
  for x in (select username,
                   password,
                   default_tablespace,
                   temporary_tablespace,
                   profile,
                   account_status
              from sys.dba_users
             where username =v_username
             order by username) loop
    v_username := x.username;
    v_sql      := 'create user ' || x.username ||
                  ' identified by values ''' || x.password || '''' ||
                  ' default tablespace ' || x.default_tablespace ||
                  ' temporary tablespace ' || x.temporary_tablespace ||
                  ' profile ' || x.profile || ';';
    dbms_output.put_line(v_sql);
for x in (select granted_role, grantee
                from dba_role_privs
               where grantee = upper(v_username)) loop
      v_sql := 'grant ' || x.granted_role || ' to ' || x.grantee || ';';
      dbms_output.put_line(v_sql);
    end loop;
    for x in (select privilege, grantee
                from dba_sys_privs
               where grantee = upper(v_username)) loop
      v_sql := 'grant ' || x.privilege || ' to ' || x.grantee || ';';
      dbms_output.put_line(v_sql);
    end loop;
    for x in (select privilege, owner, table_name, grantee
                from dba_tab_privs
               where grantee = upper(v_username) order by owner) loop
      if x.owner !='sys' then
        dbms_output.put_line('--注意使用其他用户登录执行授权');
      end if; 
      v_sql := 'grant ' || x.privilege || ' on ' || x.owner || '.' ||
               x.table_name || ' to ' || x.grantee || ';';
      dbms_output.put_line(v_sql);
    end loop;
    for x in (select user_name, ts_name, maxblocks, blocksize
                from ku$_tsquota_view
               where user_name = upper(v_username)) loop
      v_sql := 'alter user ' || x.user_name || ' quota ' ||
               x.maxblocks * x.blocksize || ' on ' || x.ts_name || ';';
      dbms_output.put_line(v_sql);
    end loop;
  end loop;
end;
/
执行示例如下:
sql> @1
enter value for user_name: test
old   3:   v_username varchar2(100):='&&user_name';
new   3:   v_username varchar2(100):='test';
create user test identified by values '7a0f2b316c212d67' default tablespace users temporary tablespace temp profile default;
grant resource to test;
grant dba to test;
grant connect to test;
grant unlimited tablespace to test;
grant write on sys.impdp_dir to test;
grant read on sys.impdp_dir to test;
--注意使用其他用户登录执行授权
grant select on test2.sms_vote_web to test;
-the end-
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product