Oracle 查询已存在账号的创建语句、权限信息

set linesize 200
set long 100000
set wrap on
col "Create_User_DDL" for a200 wrapped word
define UserName="'VINCENT'"
-- 修改 UserName,查询其他的已存在账号

select dbms_metadata.get_ddl('USER',&UserName) "Create_User_DDL"
  from dual;
-- 结果 IDENTIFIED BY VALUES 后面的一串乱码就是密码的密值
-- 你可以 alter user XXX identified by 'XXX'; 修改密码搞破坏
-- 然后根据密值 alter user XXX identified by values 'xxxx';
-- 还原密码,神不知那个神不晓
-- 当然你有管理员权限,再去改其他用户的密码,本身就是画蛇添足...
select dbms_metadata.get_granted_ddl('SYSTEM_GRANT',&UserName) "Grant dba_sys_privs DDL" from dual;
-- dba_sys_privs
select dbms_metadata.get_granted_ddl('ROLE_GRANT',&UserName) "Grant dba_sys_privs DDL" from dual;
-- dba_role_privs


-- 通过查询权限表生成授权语句的方法,和get_granted_ddl的方法二选一即可
select 'grant '||PRIVILEGE||' to '||GRANTEE||
  decode(ADMIN_OPTION,'NO',';','YES',' with admin option;')
  "Grant dba_sys_privs DDL"
  from dba_sys_privs where grantee=&UserName;

select 'grant '||GRANTED_ROLE||' to '||GRANTEE||
  decode(ADMIN_OPTION,'NO',';','YES',' with admin option;')
  "Grant dba_sys_privs DDL"
  from dba_role_privs where grantee=&UserName;

-- 如果一个用户只被授予了RESOURCE,CONNECT两个角色
-- 也就是一个基本的业务账号权限
-- 那么它拥有的dba_sys_privs只有一个:'UNLIMITED TABLESPACE'
-- 拥有的 dba_role_privs有两个:'RESOURCE','CONNECT'
-- 并且这仨权限ADMIN_OPTION均为 'NO'

你可能感兴趣的:(Oracle)