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补丁可以使锁定用户和过期用户都不能作为代理用户使用。

回收权限
alter user scott revoke connect through sudo;