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 Database 10g Enterprise Edition Release 10.2.0 .3.0 - 64bi
PL/SQL Release 10.2.0 .3.0 - Production
CORE    10.2.0 .3.0     Production
TNS for IBM/AIX RISC System/6000: Version 10.2.0 .3.0 - Productio
NLSRTL Version 10.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;        这里的test1 test2 的代理用户
 
User altered.
 
SQL>grant connect,resource to test2;
 
Grant succeeded.
 
SQL>conn test2/test2;
Connected.
SQL>create table t2 (num number);
 
Table created.
 
这里创建了 2 个用户: test1 test2
假设我目前不知道 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 .1 10.2.0.5 中修复了 BUG 6900761 ,使锁定的代理用户不能被使用,但如果用户只是过期,仍然可以被当做代理用户使用。而使用 bug 9898461 补丁可以使锁定用户和过期用户都不能作为代理用户使用。

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

你可能感兴趣的:(代理,proxy)