选择显示字体大小

oracle n层认证


 
安全性不能建立在匿名用户的基础上。

开发访问数据库web应用程序时,大多数开发人员要设置一个连接池(一批预先打开的由中间层保持的数据库会话期)来提高连接速度。应用程序从连接池获得连接,要比为每一个用户请求创建新的连接快得多。

连接池的缺点是每个用户要作为一个单一的、高级权限数据库账户向数据库注册。尽管web用户通常是用他们唯一的身份向应用程序注册,但只要数据库已经被连接,则所有的系统用户就都是匿名的。

oracle数据库安全性方面有很好的声誉,因而利用它的重要安全性功能来执行你的应用程序安全性政策是非常适宜的。如果已知用户身份,该数据库就能够进行审计并实施基于角色的和细粒度化的访问控制,包括虚拟专用数据库(virtual private database,vpd)。

oracle至少提供两种在所有各层(tiers)保持用户身份的方法:代理认证和应用程序上下文参数client_identifier。

代理认证

代理认证使中间层能够用"普通(generic)"或"应用程序(application)"账户对数据库的访问进行认证,然后即代表真实的用户建立轻便会话。一个代理会话可以通过提交用户的辨认名(distinguished name (dn)),即一个x.509证书,或全局唯一用户名来建立。

例如,为了允许用户kyle通过具有角色admin的中间层(它作为用户webapp保持一个连接池)连接到数据库数据库管理员首先授予如下的权限:alter user kyle grant connect through webapp with role admin;

接着,该应用程序代码(在这里是一个servlet)翻译从web接收到的用户名并建立如下所示的代理会话:

 

string username = request.getremoteuser();

initialcontext initial =
new initialcontext();
oracleociconnectionpool ds =
(oracleociconnectionpool)
initial.lookup("jdbc/oracleocids");
oracle.jdbc.oracleconnection conn = null;

properties p = new properties();
p.setproperty(proxy_user_name, username);
conn = ds.getproxyconnection(
proxytype_user_name, p);

 

代理认证允许使用包括脚色在内的所有数据库安全性功能,但是它要求你设置真实的数据库用户(数据库或企业)。

使用client_identifier

但是,假定你有成百上千的用户,而你不想为每个用户都设立一个oracle数据库或企业用户。那么你也可以通过使用应用程序上下文将用户身份从中间层传递到该数据库

 

应用程序上下文是一组可用于数据库会话的名字/值对。oracle9i有预定义的应用程序上下文名字空间userenv,它含有用户会话信息,包括预定义的属性client_identifier。这一属性通常用作从全局应用程序上下文选取值的会话标识符,但是我们将稍加变更,将它用于保持web用户标识符。

servlet或enterprise javabeans (ejb)会话bean,应用程序代码将从web请求检索用户名,然后调用内部pl/sql过程设置client_identifier:

 

string username = request.getremoteuser();
...(set up the jdbc connection)...
preparedstatement ps = conn.preparecall(
"begin dbms_session.set_identifier(?);
end;");
ps.setstring(1, username);
ps.execute(); 

 

select sys_context('userenv', 'client_identifier') from dual;

 

使用这种方法没有使用代理认证那样安全。因为任何人都能设置这个上下文值,你必须借助额外的安全性措施,如细粒度的访问控制和安全的应用程序角色等。你的应用程序还应在将数据库连接返回给连接池之前清除client_identifier属性。

  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons