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

首頁 > 開發 > 綜合 > 正文

9i新特性之二安全篇

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

  這篇文章主要講解應用程序客戶端訪問數據庫的新特性。有些地方理解不好
  寫得也不是很好,請大家幫忙指正,謝謝!
  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'.
  
  最后注重:假如數據訪問是通過有效私有數據庫來治理的,建立設置并不能自動限制數據訪問。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 读书| 鄄城县| 西昌市| 佳木斯市| 澜沧| 资溪县| 新巴尔虎左旗| 海阳市| 新竹县| 双城市| 东源县| 溧阳市| 蒲江县| 平利县| 杭锦旗| 黔江区| 微山县| 康平县| 佛坪县| 阳东县| 伊金霍洛旗| 田林县| 木兰县| 平阳县| 新余市| 南宁市| 昭苏县| 柯坪县| 元江| 廉江市| 东乌| 富蕴县| 营山县| 莒南县| 三江| 蚌埠市| 郸城县| 高清| 玉屏| 长宁区| 霍林郭勒市|