Oracle代理用户(Proxy User)

Oracle 10gR2下,我们可以使用企业用户代理(Enterprise User Proxy),来通过其他用户登录数据库

 

使用的语句格式如下:

 

ALTER USER target_user GRANT CONNECT THROUGH proxy_user;

 

来看一个简单的例子:

 

SQL>conn / as sysdba

Connected.

 

SQL>select * from v$version;

 

BANNER

----------------------------------------------------------------

Oracle Database10gEnterpriseEdition Release10.2.0.3.0 - 64bi

PL/SQL Release10.2.0.3.0 - Production

CORE   10.2.0.3.0     Production

TNS for IBM/AIX RISC System/6000: Version10.2.0.3.0 - Productio

NLSRTL Version10.2.0.3.0 - Production

 

SQL>create user test1 identified by test1;

 

User created.

 

SQL>create user test2 identified by test2;

 

User created.

 

SQL>alter user test2 grant connect through test1;       这里的test1test2的代理用户

 

User altered.

 

SQL>grant connect,resource to test2;

 

Grant succeeded.

 

SQL>conn test2/test2;

Connected.

SQL>create table t2 (num number);

 

Table created.

 

这里创建了2个用户:test1test2

假设我目前不知道test2用户的密码,又想以test2登录数据库,就可以使用test1以代理用户方式登录数据库:

 

SQL>conn test1[test2]/test1       使用代理用户test1登录数据库

Connected.

SQL>show user

USER is "TEST2"

SQL>desc t2

 Name                                     Null?   Type

 ----------------------------------------- -------- ----------------------------

 NUM                                               NUMBER

 

SQL>insert into t2 values(1);

 

1 row created.

 

SQL>commit;

 

Commit complete.

 

SQL>select * from t2;

 

      NUM

----------

        1

 

 

另外,这里即使代理用户test1被锁定,仍然可以代理登录:

 

SQL>conn / as sysdba

Connected.

SQL>alter user test1 account lock;

 

User altered.

 

SQL>conn test1[test2]/test1

Connected.

SQL>select * from t2;

 

      NUM

----------

        1

 

不过如果原用户test2被锁定,那么登录会报失败:

 

SQL>conn / as sysdba

Connected.

SQL>alter user test2 account lock;

 

User altered.

 

SQL>conn test1[test2]/test1

ERROR:

ORA-28000: the account is locked

 

 

Warning: You are no longer connected to ORACLE.

 

 

11.2版本前(除了10.2.0.5),这是个期望行为,因为当使用代理用户登录数据库时,Oracle只关心2点:

 

(1)      被代理用户是否有连接数据库的权限

(2)      代理用户的用户名和密码是否匹配

 

除此之外,Oracle是不会关心代理用户是否有CONNECT权限,是否被锁定等方面问题。

 

11.2.0.110.2.0.5中修复了BUG6900761,使锁定的代理用户不能被使用,但如果用户只是过期,仍然可以被当做代理用户使用。而使用bug 9898461补丁可以使锁定用户和过期用户都不能作为代理用户使用。

posted on 2012-09-03 09:08  一江水  阅读(5942)  评论(0编辑  收藏  举报