惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
J
Java Code Geeks
B
Blog
腾讯CDC
博客园 - 三生石上(FineUI控件)
S
SegmentFault 最新的问题
H
Hackread – Cybersecurity News, Data Breaches, AI and More
博客园 - Franky
罗磊的独立博客
月光博客
月光博客
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
D
Docker
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
G
Google Developers Blog
V
Visual Studio Blog
I
InfoQ
有赞技术团队
有赞技术团队
D
DataBreaches.Net
Microsoft Security Blog
Microsoft Security Blog
WordPress大学
WordPress大学
阮一峰的网络日志
阮一峰的网络日志
宝玉的分享
宝玉的分享
Blog — PlanetScale
Blog — PlanetScale

博客园 - 一江水

什么时候使用绑定变量性能反而更差 模拟登录新浪微博(Python) Oracle ASM 详解 Oracle OS Block Header 物化视图日志没有清除 Oracle如何根据物化视图日志快速刷新物化视图 物化视图注册信息的清除 Oracle RAC 碰到 gc buffer busy Oracle RAC 常用维护工具和命令 RAC Debug开关修改工具 Java连接Sybase ASE数据库的一个简单例子 中文图解Python脚本 解决sybase中文以及大小写问题(服务器端)(utf8 乱码) 如何使Sybase ASE中对象名不区分大小写? 使用 Oracle 数据库 10g内部的 ETL 基础架构 Android系统手机端抓包方法 RAC中如何更改对外网卡和内部互联网卡的IP及VIP ORA-12545: 因目标主机或对象不存在, 连接失败 Oracle数据块损坏恢复总结[转]
Oracle代理用户(Proxy User)
一江水 · 2012-09-03 · via 博客园 - 一江水

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