国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

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

2024-07-21 02:40:14
字體:
來源:轉載
供稿:網友

---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','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'.

最后注重:假如數據訪問是通過有效私有數據庫來治理的,建立
設置并不能自動限制數據訪問。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 巴塘县| 惠水县| 菏泽市| 额尔古纳市| 京山县| 华坪县| 临桂县| 绵竹市| 松原市| 育儿| 昌图县| 泸州市| 定襄县| 白玉县| 安化县| 宜章县| 阿克苏市| 喜德县| 凉山| 德州市| 红原县| 秦皇岛市| 息烽县| 子洲县| 武安市| 射阳县| 平顶山市| 阿克陶县| 察隅县| 得荣县| 临海市| 长岛县| 石城县| 鸡东县| 晋中市| 敦煌市| 安义县| 菏泽市| 左贡县| 都安| 伊宁县|