資訊: Visual Basic 3.0 處理的方式由 Microsoft Access 所設定的安全性

文章翻譯 文章翻譯
文章編號: 105990 - 檢視此文章適用的產品。
本文已封存。本文係以「現狀」提供且不會再更新。
全部展開 | 全部摺疊

在此頁中

結論

Visual Basic 3.0 版包括 Microsoft Access 資料庫引擎。 Visual Basic 會包含以操作 Microsoft Access 資料庫中的,Microsoft Access 可以幾乎每一個方式語法。一個主要的例外狀況是在安全性的區域。只有 Microsoft Access 可以設定或修改 (例如登入 ID 和密碼的系統) 的安全性選項和設定或修改特定的資料庫中的特定物件的權限。

Visual Basic 版本 3.0 不會包含兩個陳述式 (SetDataAccessOption 和 SetDefaultWorkspace),讓 Visual Basic 應用程式,以滿足安全性機制,Microsoft Access] 實作,並使用 Visual Basic 程式碼登入。利用這些陳述式中,您可以取得授與特定使用者之權限。

本文將告訴您,套用到 Visual Basic 3.0 版和 Visual Basic 程式設計人員的 Microsoft Access 安全性機制。Microsoft Access 的整個安全性功能已超出本文的範圍。

Microsoft Access 的安全性功能的完整說明,請參閱下列 「 知識庫 」 文件:
122036WX1051: 安全性精靈] 及 [白色紙張 App.筆記 2.0

其他相關資訊

Microsoft Access 安全性被實作兩個部份:
  • 每個使用者和群組都具有唯一的安全性識別碼 (SID) 程式碼。
  • 該 SID 程式碼會儲存在一起有關聯的權限,該 SID 的資料庫。
接下來兩個區段提供詳細資料。

每個使用者和群組具有唯一的安全性識別碼 (SID)

Microsoft Access 在每個使用者和群組有安全識別碼 (SID)。SID 是唯一識別使用者或群組的二進位字串。當使用者登入是否從登入] 對話方塊,在 Access 中或在 Visual Basic (在本文稍後說明) 中的程式碼時,Microsoft Access 引擎讀取 SYSTEM.MDA 資料庫 MSysAccounts 一覽表。此資料庫建立只能由 Microsoft Access,並且如果刪除原始的複本,將會建立新的 (空白) 的。

注意: 如果不小心刪除原始 SYSTEM.MDA 時所有唯一的 SID 都將遺失。因此,來存取受保護的資料庫的所有能力也都會遺失。因此,最好是在資料庫上設定權限時,備份資料庫和就地 SYSTEM.MDA 檔案。

在登入時使用者會提供 (不區分大小寫) 的使用者名稱和密碼 (區分大小寫)。如果使用者名稱和密碼是否正確,使用者的 SID 是擷取,且儲存引擎的內部結構中。密碼只用於驗證使用者。從這一刻起一旦使用者成為已驗證的使用者密碼將並不會影響安全性。

以下是有關 Visual Basic 行為的重點。根據預設值,Microsoft Access 引擎會嘗試驗證使用者和系統管理員密碼及 「 」 分別。Visual Basic 3.0 版會沒有任何的程式碼傳送此按鍵組合到 Microsoft Access 引擎根據預設值。這表示,甚至不 Visual Basic 與安全性相關陳述式使用,Visual Basic 程式便可取得該資料庫的許可如果使用者系統管理員群組 」 的使用者已從無] 的預設值變更其密碼 ("")。

一旦登入,擷取使用者的 SID。這個 SID 會用於 Microsoft Access 引擎內的所有後續作業。

SID 儲存在資料庫中的 SYSTEM.MDA

SID 儲存在資料庫本身。因此,授與特定使用者或群組的所有使用權限也會儲存在與唯一的 SID 關聯資料庫中。

這會顯示有關 Visual Basic 行為的另一個關鍵點。Visual Basic 程式會取得資料庫的項目,且有完整的權限,seeming 忽略 Microsoft Access 安全性機制,如果下列其中一項為真:
  • Visual Basic 程式設計人員已經在 SYSTEM.MDA 位置列入考量,在程式碼的資料庫。
  • 使用者管理 」 已從預設值是無改變其密碼 ("")。
這是由於 Microsoft Access 引擎和 Visual Basic 的預設行為。合併的效果是由 Visual Basic 程式碼允許至資料庫,以及其物件的項目。

在 Access 中的物件類型的清單是: 資料表、 查詢、 表單、 報表、 巨集和模組。這些,只有前兩個都可以從 Visual Basic 程式碼存取,所以其他人可以從這項說明省略。

下列兩個章節將說明每兩個 Visual Basic 安全性相關陳述式 (SetDataAccessOption 和 SetDefaultWorkspace)。兩個陳述式設計用來提供選擇 SYSTEM.MDA 檔案並以安全性的一個 Microsoft Access 資料庫的登入項目設定由 Microsoft Access。遵循這些兩個區段是考慮到安全性,Microsoft Access 引擎的兩個行為陳述式與相關聯的區段。

SetDataAccessOption 陳述式--語法和行為

SetDataAccessOption 具有下列參數:
   SetDataAccessOption option, value

   option is a numeric value with only one legal value (1).
				

例如:
   SetDataAccessOption 1, "E:\VBPROJ\MY.INI"
				

提供在 \vb 目錄的根目錄 DATACONS.TXT 檔案中, 常數定義為此值:
   Global Const DB_OPTIONINIPATH = 1
				

SetDataAccessOption 設定名稱和應用程式的初始化 (.INI) 檔案的路徑。只有當使用 SetDataAccessOption 時載入並初始化資料存取功能之前,應用程式的.INI 檔才會生效。一旦初始化資料存取沒有第一個結束應用程式無法變更此設定。值是字串運算式。DB_OPTIONINIPATH] 選項的值引數會包含提供路徑和應用程式的初始化 (.INI) 檔案的名稱為一字串運算式。初始化檔案通常儲存在使用者的 \WINDOWS 目錄,且有相同的名稱,和可執行檔,但副檔名為.INI 檔案。如果應用程式初始化檔案具有不同的名稱,或在 \WINDOWS 目錄以外的目錄,請使用此陳述式。

如果 VB.INI 檔案 \WINDOWS] 目錄中) 中的包含下列各行,在 VB.EXE 環境中執行 Visual Basic 專案時,就不需要 SetDataAccessOption 陳述式:

[選項]
SystemDB=T:\ACCESS\SYSTEM.MDA
UtilityDB=T:\ACCESS\UTILITY.MDA

注意: [SYSTEM.MDA 的實際位置並不重要提供 Microsoft Access 和 Visual Basic 有指向的 SYSTEM.MDA 它們會共用項目。如果應用程式.EXE 檔中 [\WINDOWS 自己.INI 檔,而且.EXE 及.INI 檔案共用相同的名稱,就不需要 SetDataAccessOption 陳述式。

SetDefaultWorkspace 陳述式--語法和行為

SetDefaultWorkspace 具有下列參數:
   SetDefaultWorkspace username, password
				

如果此陳述式遺漏了,Visual Basic 會將相當於下面這一行傳送到隨附於 Visual Basic,Microsoft Access 資料庫引擎:
   SetDefaultWorkspace "Admin" , ""
				

此陳述式的效果取得有效的 SID 和爭取到資料庫中的所有資料表和查詢物件的項目。

Visual Basic 與 Microsoft Access 安全性之間的關聯性

若要瞭解 Visual Basic 與 Microsoft Access 安全性關係,您必須瞭解 Microsoft Access 安全性機制。 以下是詳細的說明 Visual Basic 程式設計人員沒有廣泛使用 Microsoft Access 的利益。沒有 Microsoft Access 中的權限的階層架構。在頂部層級有群組。包含在特定群組是使用者。授與權限選擇性地以特定的使用者,所有使用權限必須先取消選取或從 [使用者] 群組中移除。然後,並只再,可以使用權限授與或撤銷的個別使用者。

所列出的個別使用者的權限稱為 「 明確的權限 」。 設定包含 「 使用者 」 帳戶群組的權限稱為隱含的權限。隱含的權限會將優先順序高於明確的權限。

若要設定權限在 Microsoft Access,開啟一個資料庫,並在使用者登之後,您可以使用 [安全性] 功能表。在 [安全性] 功能表中,選擇指派權限,這在 Visual Basic 中表示資料表和查詢物件資料庫中每個物件上的權限。

比方說如果有一個群組在 Microsoft Access 資料庫名為分析師之包含使用者鮑伯和 Sue,且您要來只限制王俊元讀取資料,並授與 Sue 完整權限請依照下列步驟執行:
  1. 登入到以 「 使用者系統管理員群組 」 中的 Microsoft Access。比方說輸入系統管理員或 Fred。
  2. 在 [安全性] 功能表,選擇 [權限 (ALT S P)]。
  3. 資料表物件都是預設型別。選取您想要設定的權限的資料表名稱。比方說選取 TestTbl。
  4. 設定使用者/群組框架中的選項,為群組。然後按一下向下的下拉式方塊清單,再按一下以選取該群組的分析師。
  5. 清除所有的核取方塊,以撤銷整個群組的所有權限。
  6. 將 [清單] 選項按鈕變更回使用者,然後選取鮑伯。清除所有 Bob 的權限核取方塊。
  7. 從清單選取 Sue,並核取 [完整權限] 核取方塊。
  8. 按一下將變更套用到資料表的 [指派] 按鈕。
這個時候假設您有包含下列的程式碼,在表單載入事件的 Visual Basic 程式:
Sub Form_Load ()
   Dim db As database
   Dim ds As dynaset
   Dim scenario as integer

   scenario = 'insert a value between 1 and 4 here

   select case scenario
      case 1:
         ' Do nothing

      case 2:
         SetDefaultWorkspace "bob", "leftout"

      case 3:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory

      case 4:
         SetDataAccessOption 1, "E:\VB.INI"    ' not in \WINDOWS directory
         SetDefaultWorkspace "bob", "leftout"
   end select

   Set db = OpenDatabase("E:\DATACON\BASES\ACCESS11\ASAMPLE.MDB") ' point 1
   Set ds = db.CreateDynaset("TestTbl")                           ' point 2

   autoredraw = True   ' to make Print  statement persist on the form
   Print ds(0), ds(1)

End Sub
				

以下是幾個案例來說明 Visual Basic 與 Microsoft Access 安全性關係:

在這種情況下劇情 ONE: 有是沒有參考 SYSTEM.MDA 檔案的位置。Windows 和 Microsoft Access 引擎是無法找到與本文先前所列的 [選項] 區段的.INI 檔。 因此,[SYSTEM.MDA 會被忽略,Visual Basic 會預設為其預設使用者和密碼組合 (「 管理員 」"")。不過,先前,使用者管理的預設密碼已變更為項目以外的其他""。在另外的所有權限已撤銷群組管理員 」 與 「 使用者 」 管理 「 系統管理員群組中。因此,在點 2 發生下列的 Visual Basic 錯誤:
Couldn't read; no read permission for table or query 'f)) '

您已關閉後門 Visual Basic,並嘗試略過登入 SYSTEM.MDA 檔案中的任何 Visual Basic 應用程式。

劇情 TWO: 在這種情況下,因為您叫用 (Invoke) SetDefaultWorkspace 陳述式而不需要任何指標 SYSTEM.MDA 檔案,Visual Basic Microsoft Access 引擎 hunts SYSTEM.MDA 檔案並且,不尋找它,在程式碼中的點 0 提供下列的錯誤:
找不到檔案 'SYSTEM.MDA'

注意: 一和二個是相同的如會發生在如果已移動 SYSTEM.MDA 檔案,這兩個案例中發生的錯誤重新命名,或刪除。

劇情三: 在此情況下您告訴 Visual Basic Microsoft Access 引擎 SYSTEM.MDA 檔案所在但並未提供使用者和密碼的組合。因此,再次,Visual Basic 提供它知道 「 唯一使用者和密碼組合 (「 管理員 」""),它不再有效的組合,因為您新增到 [管理使用者 」 帳戶的密碼。如此一來 Visual Basic 提供下列的錯誤在程式碼中點 1:
不正確的帳戶或密碼。

劇情個: 在此情況下您提供這兩個參數正確。 因此,因為您給鮑伯 」 的 「 讀取資料 」 權限,以及允許 Visual Basic Microsoft Access 的 「 讀取定義"發動機讀取,Visual Basic 應用程式列印名為 TestTbl 資料表的第一筆資料錄中前兩個欄位。

如果您重複執行四個案例與使用者 Sue,所有會相同。不過,Sue,可以進一步移,修改資料表結構和資料以及。請記住,您先選取群組分析師並撤銷所有使用權限。然後您新增回所有使用權限給 Sue,但只讀取資料 」 及 「 讀取定義已加回至鮑伯。

注意: 的系統管理員 」 群組都有特殊的意義,考慮到安全性。 這適用於該群組中的任何使用者。系統管理員群組的 SID 會儲存在 [SYSTEM.MDA 中建立資料庫時。如此一來系統管理員 」 群組會永遠具有變更該資料庫中的所有物件上的權限的權限。無法離開執行這個使用權限的任何人。此權限仍然即使所有使用權限已撤銷從 「 系統管理員] 群組,它也不會顯示在 [權限] 對話方塊中。這是保留一個備份和追蹤的其中 SYSTEM.MDA 已在使用中資料庫建立時的另一個原因。

使用 SQL 查詢中的 OwnerAccess 選項


最後一點的可能混淆 revolves 周圍下列文句 SQL 查詢中使用:
   ... With OwnerAccess Option
				

比方說看看這段程式碼:
   Sub Form_Load ()
      Dim db As Database
      Dim qd As querydef

      Set db = OpenDatabase("C:\ACCESS\DB1.MDB")

      ' Enter the following two lines of code as one, single line:

      Set qd = db.CreateQueryDef("myQD", "select * from [TableDetails]
         with owneraccess option ;")
      db.Close
   End Sub
				

這個程式碼會產生這個錯誤:
無效的資料庫識別碼。

這是因為 OwnerAccess 指的是資料庫的擁有者。擁有者是資料庫的建立者。亦即 OwnerAccess 是指擁有者的使用者和密碼組合 (唯一的 SID) 儲存在資料庫 (在本例中 BD1.MDB) 中。不過,程式碼不會包含指向 SYSTEM.MDA 檔案的保全資料庫所需的兩個陳述式。實際上,在這種情況下 SetDefaultWorkspace 陳述式是不可或缺 \WINDOWS 目錄正在編譯的.EXE 檔案.INI 檔案包含有效的 [選項] 區段的。

程式碼會使用此後門。它不具有這樣引擎不會知道預設名稱和密碼組合提供資料庫擁有者對引擎的唯一的 SID (管理,"") 的使用者是資料庫擁有者。 即使其實使用者管理是資料庫擁有的而不需讀取 SYSTEM.MDA] 檔案引擎無法驗證該事實,所以它提供錯誤。

Microsoft Access 版本 2.0 使用者的附註

使用最近發行的 Microsoft Jet 2.0/Visual 基本 3.0 版的相容性層,Visual Basic 可以存取 Microsoft Access 版本 2.0 資料庫。以下是一些注意事項,幫助您將安全版本 1.1 資料庫轉換為 Microsoft Access 版本 2.0 格式。

如果保護版本 1.x 資料庫它會維持安全是否您使用 Microsoft Access 版本 1.x 或 2.0 開啟。不過,Microsoft Access 版本 2.0 無法使用變更或新增權限在資料庫中甚至系統管理員直到資料庫轉換至 2.0 版本。

您在安裝 Microsoft Access 版本 2.0 時它會建立自己的工作群組檔案 (SYSTEM.MDA)。如果已安裝 Microsoft Access 版本 2.0 則 1.x 版相同的目錄中,版本 1.x SYSTEM.MDA 檔案將會被重新命名 SYSTEM1X.MDA。

若要變更的轉換的資料庫安全性,您必須使用版本 2.0 SYSTEM.MDA 原始 SYSTEM.MDA 有相同的群組及使用者 (和相同 PID)。

注意: 在 Microsoft Access 版本 2.0 的 PID (個人識別碼) 是 1.x 版中的 PIN 碼 (個人識別碼數字) 相當

若要建立安全的工作群組:
  1. 使用 2.0 的工作群組管理員] 工具來建立新的工作群組。 這是版本 2.0 SYSTEM.MDA 檔案。
  2. 重新建立所有使用者和群組帳戶使用相同的名稱及 PID 在 Microsoft Access 1.x 版中所使用的數字。
若要將安全 1.x 資料庫轉換為 2.0 的格式:

注意: 在安全工作群組僅具有物件的所有修改設計權限的使用者可以將轉換版本 1.x 格式為 2.0 版格式。 而且,您必須將修改設計權限指派給版本 1.x 資料庫在 Microsoft Access 版本 1.x 使用版本 1.x 工作群組中。
  1. 請確定沒有人會使用版本 1.x 資料庫。
  2. 系統管理員群組的成員不 Admin 使用者是登入 Microsoft Access 2.0。
  3. 從 [檔案] 功能表中,選擇 [轉換資料庫] 指令。
  4. 選取您想要轉換的版本 1.x 資料庫。系統會提示您的版本 2.0 的資料庫名稱。

    注意: 此轉換資料庫] 指令會強制您選擇的資料庫新名稱。這可讓您為保留的版本 1.x 資料庫備份複本,一旦您已從版本 1.x 轉換一個資料庫為版本 2.0 您無法將它轉換回成 1.x 版。
  5. 擁有您藉由使用 [工作群組管理員] 工具連接新的 2.0 版工作群組 (SYSTEM.MDA) 的使用者。

    注意: 您可以也完成藉由修改 MSACC20.INI 檔案 Windows 目錄中。在檔案的在 [選項]] 區段中變更 SystemDB 項目,以指向版本 2.0 SYSTEM.MDA 檔案。檔案的 [選項] 區段會類似下面的範例:
          [Options]
          SystemDB=<microsoft access path>\SYSTEM.MDA
    
    						

要記住的重點

  1. 只有 Microsoft Access 可以建立和修改 SYSTEM.MDA 檔案。
  2. SYSTEM.MDA 檔案包含唯一的 SID 在具有權限的資料庫中用來排序出誰是誰對於 Microsoft Access 發動機強制執行這些權限。SID 藉由提供具有有效的使用者和密碼組合的 Microsoft Access 引擎,從取得取得唯一的 SID,其中,引擎會儲存在記憶體來強制執行於開啟的資料庫上的安全性。
  3. Microsoft Access 和 Visual Basic 需要所指到關閉 SYSTEM.MDA 檔案位置,以取得項目,以具有安全性和實作的權限的資料庫。
  4. 沒有一個後門可用 Visual Basic 應用程式如果系統管理員 」 群組 (稱為管理) 的使用者不是的預設的密碼變更預設值 [無 ("")。
  5. 如果在 CreateQueryDef、 CreateDynaset 或 CreateSnapshot 方法的 SQL 查詢中使用片語 「 方式 OwnerAccess 選項 」,必須存在 SYSTEM.MDA 檔案的指標。即使您使用 「 後門 (系統管理的預設使用者和密碼組合和"") 和 SQL 查詢中使用 「 方式 OwnerAccess 選項 」 時需要 [SYSTEM.MDA 看上去不,引擎必須請參閱 SYSTEM.MDA 檔案,以符合要登入使用者資料庫的擁有者 (建立者) 的 SID。
  6. 有效的登入的使用者和密碼組合儲存在 SYSTEM.MDA 檔案,但是儲存在資料庫中的權限 (.MDB 檔) 本身。唯一識別碼 (SID) 是從 [SYSTEM.MDA 擷取出來,藉由使用有效的使用者和密碼組合登入] 對話方塊,在 Access 中或在 Visual Basic 程式碼提供給 Microsoft Access 引擎。

屬性

文章編號: 105990 - 上次校閱: 2013年10月21日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 3.0 Professional Edition
  • Microsoft Visual Basic 3.0 Professional Edition
關鍵字:?
kbnosurvey kbarchive kbmt kbinfo KB105990 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:105990
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com