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

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

技術(shù)進修:JDBC從入門到精通專題講座三

2019-11-18 12:37:09
字體:
供稿:網(wǎng)友

  5. 安全性考慮
  
  作為網(wǎng)絡(luò)上的語言java必須十分注安全性的考慮?;谏厦娴挠懻?,JDBC的兩種主要使用場合里面,我們必須考慮安全性問題:
  
  * 在Java applications的場合里面Java代碼是本地的,所以也是"trusted"
  
  * 沒有驗證的Java applet代碼不可以存取本地的以及其他網(wǎng)絡(luò)的數(shù)據(jù)。
  
  5. 1. JDBC 和未驗證的applet
  
  JDBC首先必須符合JAVA的一般安全規(guī)則。另外:
  
  * JDBC 必須認(rèn)為沒有驗證的applets是不可靠的。
  
  * JDBC 不可以讓不可靠的applets存取本地數(shù)據(jù)庫。
  
  * 一個已經(jīng)向JDBC DriverManager注冊的是JDBC Driver只能存取它所來的數(shù)據(jù)源。
  
  * 一個applet也只能向它所Download來的服務(wù)器來存取數(shù)據(jù)。
  
  假如JDBC驅(qū)動層假如完全確信對一個數(shù)據(jù)庫服務(wù)器打開連接不會引起認(rèn)證或者權(quán)限問題(可能由網(wǎng)上隨機主機上運行的程序引起),那么它就答應(yīng)applet打開這樣的連接。
  
  數(shù)據(jù)庫服務(wù)器不通過ip地址來限制存取是相當(dāng)少的,主要是為了舉例。(當(dāng)心,這一段話我可能翻譯反了?。。〈蠹铱纯丛?。)這些限制是相當(dāng)煩瑣的。不過他們與對一般applet的限制是一致的我們沒有必要放開這些限制。
  
  5. 2. JDBC 和Java應(yīng)用程序
  
  對于一個普通的Java應(yīng)用程序(例如全部用Java代碼而不是不可靠的applet )JDBC將從本地的類路徑里面獲得驅(qū)動,并且答應(yīng)應(yīng)用程序自由存取文件,遠程服務(wù)器等等。
  
  但是和applet一樣,假如由于某些原因一個沒有驗證的sun.sql.Driver類從遠程的來源里面獲得,那么這個驅(qū)動只能和相同地方來的代碼配合。
  
  5. 3. Driver的安全責(zé)任
  
  JDBC driver可能在各種情況下使用,所以驅(qū)動的編制者遵循一定的簡單的安全規(guī)則,從而避免applet做非法的數(shù)據(jù)庫連接。
  
  假如所有的驅(qū)動都象applet一樣從網(wǎng)上下載,那么這些原則將是不必要的,因為普通的安全規(guī)則已經(jīng)對它做了限制。
  
  但是驅(qū)動的編寫者必須記住一旦他們的驅(qū)動獲得成功,用戶將在本地磁盤安裝這些驅(qū)動,那么驅(qū)動將成為Java環(huán)境中一個被信任的部分,所以必須確信它不會被來訪的applet所濫用。所以我們鼓勵所有的驅(qū)動編寫者必須遵循一定安全原則。
  
  所有這些原則都是在連接打開的時候使用。這正式驅(qū)動和虛擬機器檢查當(dāng)前調(diào)用者是否真的可以與指定的數(shù)據(jù)庫連接的時刻。一旦連接建立就不必做更多的檢查了。
  
  5. 3. 1. 分享TCP/IP連接的時候必須謹(jǐn)慎
  
  假如一個JDBC驅(qū)動試圖打開一個 TCP 連接,那么這個打開會被Java 安全治理機制自動檢查。這個機構(gòu)會檢查當(dāng)前調(diào)用棧里面有沒有applet,假如有那么就限定它可以訪問的機器集合。所以一般地JDBC驅(qū)動可以把TCP建立檢查留給Java虛擬機。
  
  但是假如一個JDBC驅(qū)動試圖在多個數(shù)據(jù)庫連接之間共享一個TCP連接,那么驅(qū)動就必須自己負(fù)責(zé)檢查每個調(diào)用者是否真的被答應(yīng)與目標(biāo)數(shù)據(jù)庫聯(lián)系。
  
  例如假如我們?yōu)閍pplet A打開了一個通往機器foobah 的TCP連接,這并不意味著applet B被自動答應(yīng)來共享這個連接。
  
  applet B可能沒有任何訪問機器foobah的權(quán)力。所以在答應(yīng)某個程序重用一個現(xiàn)成的TCP連接之前,JDBC 驅(qū)動必須通過安全機構(gòu)來檢查當(dāng)前的的調(diào)用者是否可以訪問這個連接。通過下面的代碼可是實現(xiàn)這個功能。
  
  SecurityManager security = System.getSecurityManager();
  
  if (security != null)
  
  {
  
  security.checkConnect(hostName, portNumber);
  
  }
  
  假如連接是不答應(yīng)的,那么Security.checkConnect方法將產(chǎn)生一個java.lang.SecurityException。
  
  5. 3. 2. 檢查所有的本地文件訪問。
  
  假如一個JDBC取得需要訪問本地機器上的數(shù)據(jù),那么他必須確信調(diào)用者是被答應(yīng)打開這個文件的。例如:
  
  SecurityManager security = System.getSecurityManager();
  
  if (security != null)
  
  {
  
  security.checkRead(fileName);
  
  }
  
  假如對特定文件的訪問是不答應(yīng)的,那么Security.checkRead方法將產(chǎn)生一個java.lang.SecurityException。
  
  5. 3. 3. 作好最壞的預(yù)備
  
  一些驅(qū)動可能使用本地的方法來橋接底層數(shù)據(jù)庫程序。則這些情況里面判定那些本地文件將被底層函數(shù)所訪問是困難的。
  
  在這些環(huán)境里面用戶必須作好最壞的打算,并且否決所有下載applet所發(fā)出的數(shù)據(jù)庫存取,除非驅(qū)動可能完全確信將要做存取是沒有問題的。
  
  例如一個JDBC-ODBC橋接器必須檢查ODBC數(shù)據(jù)源的的名稱,確保applet只可以訪問它的"生源地"。假如對有的名字中不能判定出數(shù)據(jù)源的主機名,那么只能否決這個訪問。
  
  為了決定一個當(dāng)前的調(diào)用者是可以信賴的應(yīng)用還是一個applet,JDBC驅(qū)動必須能夠檢查這個調(diào)用者是否可以寫一個隨機的文件:
  
  SecurityManager security = System.getSecurityManager();
  
  if (security != null)
  
  {
  
  security.checkWrite("foobaz");
  
  I. }

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 高雄县| 郯城县| 阜城县| 天津市| 彩票| 封丘县| 读书| 大名县| 扶沟县| 垫江县| 福清市| 微山县| 嘉善县| 江华| 称多县| 大埔县| 康平县| 尉犁县| 云安县| 平塘县| 湘西| 和田县| 比如县| 元江| 民和| 白河县| 韩城市| 射洪县| 修文县| 嘉禾县| 株洲县| 车险| 抚松县| 德化县| 景东| 咸丰县| 仁寿县| 汝州市| 鱼台县| 上蔡县| 二连浩特市|