选择显示字体大小

[基础]9i新特性之二安全篇


---txfy
9i新特性之二安全
这篇文章主要讲解应用程序客户端访问数据库的新特性。有些地方理解不好
写得也不是很好,请大家帮忙指正,谢谢!
9i安全认证拥有
..解决了阻止未经认证的用户通过其他客户端访问数据的问题.
..在隐藏密码的实现方面有了比以前更好的机制.
..角色的有效性是通过一个包来检测而不是一个口令
..应用设置的概念在8i中已经作了介绍,8i中细粒度访问控制能够达到
  制作有效的私有数据库,而在9i中应用设置已经可以用一个角色来实
  现,因此提高了私有数据库的可用性.
---------------------------------------------------------------
为了确认一个角色是否有效,必须调用关联的存储过程,这个存储过
程可以通过使用sys_context('userenv',nnn)来制定一系列的额外
检查.nnn可以是ip_address,proxy_account等.
(举例,我们可以在存储过程和触发器里调用select sys_context
('userenv',ip_address) from dual得到客户端的ip,然后根据
这个资料进行判断.sys_context的具体用法如下:
select 
        sys_context('userenv','terminal') terminal, 
        sys_context('userenv','language') language, 
        sys_context('userenv','sessionid') sessionid, 
        sys_context('userenv','instance') instance, 
        sys_context('userenv','entryid') entryid, 
        sys_context('userenv','isdba') isdba, 
        sys_context('userenv','nls_territory') nls_territory, 
        sys_context('userenv','nls_currency') nls_currency, 
        sys_context('userenv','nls_calendar') nls_calendar, 
        sys_context('userenv','nls_date_format') nls_date_format, 
        sys_context('userenv','nls_date_language') nls_date_language, 
        sys_context('userenv','nls_sort') nls_sort, 
        sys_context('userenv','current_user') current_user, 
        sys_context('userenv','current_userid') current_userid, 
        sys_context('userenv','session_user') session_user, 
        sys_context('userenv','session_userid') session_userid, 
        sys_context('userenv','proxy_user') proxy_user, 
        sys_context('userenv','proxy_userid') proxy_userid, 
        sys_context('userenv','db_domain') db_domain, 
        sys_context('userenv','db_name') db_name, 
        sys_context('userenv','host') host, 
        sys_context('userenv','os_user') os_user, 
        sys_context('userenv','external_name') external_name, 
        sys_context('userenv','ip_address') ip_address, 
        sys_context('userenv',27.network_protocol') .network_protocol, 
        sys_context('userenv','bg_job_id') bg_job_id, 
        sys_context('userenv','fg_job_id') fg_job_id, 
        sys_context('userenv','authentication_type') authentication_type, 
        sys_context('userenv','authentication_data') authentication_data 
from dual 
------------------------------------------------------------------------
9i以前的版本,认证角色是通过password的方法,将用户名,口令写入应用程序来进行连接.
这样的缺点是,如果口令在客户端被解析出来,任何应用程序都能够访问你的数据.
下面我们看一个9i认证角色的例子.
create role salesuser
identified using sh.sales_chk;

create or replace procedure sales_chk
authid current_user is
ipchk string(30);
begin /* only certain ip addresses allowed */
select sys_context(’userenv’,’ip_address’)
into ipchk from dual;
if substr(ipchk,1,4) != ’192.’
then return; end if; /* fail silently */
dbms_session.set_role(’salesuser’); /* enable */
end;
/
这个过程做到,如果不在192网段,这个角色失效.
---------------------------------------------------------------------
全局应用设置
一个设置现在能够被全局化和共享.
全局化应用设置就是:
    ..比每个进程一个设置更节省资源.
    ..利用有效私有数据库能够更好的适应基于web的应用.
    ..仍然可以通过identifier验证访问权限.
    ..更适应多路连接.
   oracle9i的有效私有数据库特性提供了连接池以允许多重会话使用一个
或多个全局应用设置,而不需要为每个用户建立一个应用设置.全局应用
设置为基于web的应用提供了额外的灵活的设置.在多重会话中重复利用
普通应用设置大大提高了性能。
    在ebusiness应用中,应用用户代理认证可以使用公用应用设置来提高适
应性和性能。通过公用应用设置的一次设立代替为每个会话独立设置初
始化应用设置这种方式进行会话级重用提高了性能。
    为了决定当前会话的运行环境以符合细粒度访问控制,中间件必须为
每一个应用设定应用设置。全局设置允许中间件把各种应用设置存储在
实例里并且在会话建立时为一个用户会话指派设置。这个设置也就成为
了会话的运行设置。这将大大减小用户会话在应用连接池环境中的建立
时间。
---------------------------------------------------------------
管理全局应用设置。
一些接口已经被加到dbms_session包里来管理客户端会话的应用设置。
包括
   ..set_context
   ..clear_context
   ..set_identifier
   ..clear_identifier
  为了支持通过中间件应用管理的会话连接池,对于dbms_session接口的
管理应用设置也为每一个应用设置增加了一个客户端认证。在这种方式
下,我们可以全局管理应用设置而客户端仅仅看到为他们设置的应用设
置。
  中间件应用器服务能够使用set_context来为一个制定的客户id设置应用
设置.那么,当分配数据库连接来处理客户端需求,应用服务器需要执行
set_identifier来表示这个应用会话的id.那么,每次客户端调用
sys_context,仅仅被指派给这个验证用户的设置被返回。
--------------------------------------------------------------
全局应用设置函数。(举例)
管理员通过以下指令建立全局设置。
sql> create context webhr using hr.init accessed globally;
应用服务器启动将为hr用户建立多重连接。
当用户john连接到应用服务器后,john不是一个数据库用户。应
服务器将在应用里鉴别john,并且为这个连接0设置一个临时的会
话id,4523,基于唯一应用会话属性,这个会话id作为cookie或者
应用服务器的维护的一部分返回用户john的浏览器。
  应用服务器为这个客户端初始应用设置称为hr.init包,它执行
dbms_session.set_context(’webhr’,’id’, ’john’, ’hr’,4523);
dbms_session.set_context(’webhr’,’dep’,’sales’,’hr’,4523);
例子:
create context webhr using hr.init accessed globally;
dbms_session.set_context(’webhr’,’id’,’john’,’hr’,4523);
dbms_session.set_identifier(4523);

sys_context calls are in john’s context

dbms_session.clear_identifier(4523);
当用户john用应用服务器访问数据,应用服务器找到所有登陆的
会话,并执行dbms_session.set_identifier(4523);所有的这个
会话的sys_context将只返回属于这个客户端的应用程序设置,
例如sys_context('webhr','id') 将只返回'john'.

最后注意:如果数据访问是通过有效私有数据库来管理的,建立
设置并不能自动限制数据访问。


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

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