ITPub博客

首页 > Linux操作系统 > Linux操作系统 > DATABASE VAULT授权的安全隐患

DATABASE VAULT授权的安全隐患

原创 Linux操作系统 作者:yangtingkun 时间:2009-01-01 23:55:06 0 删除 编辑

在前面一篇文章中讨论DATABASE VAULT和授权之间的关系,随后想到了一点安全隐患。

DATABASE VAULT对权限的影响:http://yangtingkun.itpub.net/post/468/476369

 

 

还是利用上一篇文章的例子:

SQL> SELECT * FROM V$OPTION
  2  WHERE PARAMETER = 'Oracle Database Vault';

PARAMETER                                VALUE
---------------------------------------- ------------------------------
Oracle Database Vault                    TRUE

SQL> SELECT * FROM V$VERSION;

BANNER
-------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
PL/SQL Release 11.1.0.6.0 - Production
CORE    11.1.0.6.0      Production
TNS for 32-bit Windows: Version 11.1.0.6.0 - Production
NLSRTL Version 11.1.0.6.0 - Production

创建3个用户:

SQL> SHOW USER
USER
"DVSYS"
SQL> GRANT CONNECT TO U1 IDENTIFIED BY U1;

授权成功。

SQL> GRANT CONNECT TO U2 IDENTIFIED BY U2;

授权成功。

SQL> GRANT CONNECT TO U3 IDENTIFIED BY U3;

授权成功。

SQL> CONN SYS@YTK111 AS SYSDBA
输入口令: ****
已连接。
SQL> GRANT RESOURCE TO U1;

授权成功。

SQL> GRANT SELECT ANY TABLE TO U3;

授权成功。

SQL> CONN U1/U1@YTK111
已连接。
SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> GRANT SELECT ON T TO U2;

授权成功。

在默认情况下U2U3都可以访问U1的表,以为U2U1直接授权访问T表,而U3具有SELECT ANY TABLE系统权限:

SQL> CONN U2/U2@YTK111
已连接。
SQL> SELECT * FROM U1.T;

未选定行

SQL> CONN U3/U3@YTK111
已连接。
SQL> SELECT * FROM U1.T;

未选定行

下面将U1放到REALM中:

SQL> CONN DVSYS@YTK111
输入口令: ****
已连接。
SQL> EXEC DBMS_MACADM.CREATE_REALM('R_U1', 'REALM FOR U1', 'Y', 0)

PL/SQL 过程已成功完成。

SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM('R_U1', 'U1', '%', '%')

PL/SQL 过程已成功完成。

再次通过U2U3访问U1T表:

SQL> CONN U2/U2@YTK111
已连接。
SQL> SELECT * FROM U1.T;

未选定行

SQL> CONN U3/U3@YTK111
已连接。
SQL> SELECT * FROM U1.T;
SELECT * FROM U1.T
                 *
1 行出现错误:
ORA-01031:
权限不足

REALM已经禁止了SELECT ANY TABLE权限,而直接授权仍然可以访问。

SQL> CONN SYS@YTK111 AS SYSDBA
输入口令: ****
已连接。
SQL> GRANT SELECT ON U1.T TO U3;
GRANT SELECT ON U1.T TO U3
                   *
1 行出现错误:
ORA-00604:
递归 SQL 级别 1 出现错误
ORA-47401: grant object privilege (
U1.T ) 的领域违规
ORA-06512:
"DVSYS.AUTHORIZE_EVENT", line 55
ORA-06512:
line 31

可以看到,利用SYS来直接授权是被REALM所禁止的。

到目前而止都是重复上一篇文章的例子,而且目前看来数据也是安全的,SYS也好,U3也好都不能通过SELECT ANY TABLE来直接获取REALM所包含的U1用户下的T表。而且SYS也没有权限来将U1T表的查询权限直接授权给其他用户,那么U1用户下的对象确实是很安全的。

问题不是出在这里,问题在于SYS可以对其他没有被REALM保护的对象授予直接访问的权限:

SQL> GRANT RESOURCE TO U2;

授权成功。

SQL> CONN U2/U2@YTK111
已连接。
SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> CONN SYS@YTK111 AS SYSDBA
输入口令: ****
已连接。
SQL> GRANT SELECT ON U2.T TO U3;

授权成功。

下面将U2用户使用REALM保护起来:

SQL> CONN DVSYS@YTK111
输入口令: ****
已连接。
SQL> EXEC DBMS_MACADM.ADD_OBJECT_TO_REALM('R_U1', 'U2', '%', '%')

PL/SQL 过程已成功完成。

SQL> CONN U3/U3@YTK111
已连接。
SQL> SELECT * FROM U2.T;

未选定行

SQL> SELECT * FROM U1.T;
SELECT * FROM U1.T
                 *
1 行出现错误:
ORA-01031:
权限不足

可以看到,同样是被REALM所保护的U1U2,由于U2的表在被REALM保护之前,被DBA用户直接授权给其他用户,使得REALM保护后,U2的表仍然可以被其他用户所访问。这种直接授权并不会被取消,Oracle不会判断,这个直接授权是用户自己进行的授权,还是其他权限用户执行的授权。所以这里存在着安全隐患。DBA虽然无法通过ANY权限进行访问,但是可以通过提前显式授权的方式,留下一个后门。

因此用户或对象被REALM保护后,并非一定是安全的,应该在REALM保护发生后,彻底检查所有的授权,确保当前所有的显式授权都是合法的,否则就会留下安全的隐患。

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-524926/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1954
  • 访问量
    10875600