文章編號: 308312 - 上次校閱: 2007年3月29日 - 版次: 6.2 如何使用與 Access 專案] 和 [SQL Server 2000 桌面版的應用程式角色
進階: 須具備專家編碼、 互通性,與多使用者技能。 本文只適用於 Microsoft Access 專案 (.adp)。 本文章的有 Microsoft Access 2000] 版本請參閱 318816?
(http://support.microsoft.com/kb/318816/
)
。 結論本文件說明功能、 限制以及在 Microsoft Access 專案 (ADP) 中使用 Microsoft SQL Server 應用程式角色的因應措施。 其他相關資訊在 SQL Server 中,您可以建立的資料庫中的使用權限更容易管理的資料庫角色。而非分別將個別權限授予每個使用者,您可以進行相同的一般資料庫角色的成員,然後將使用權限指派給資料庫角色本身群組具有相同的權限需求的使用者。除非特定的使用權限明顯拒絕其他地方,成員的使用者會取得授與該資料庫角色的權限。 雖然一般資料庫角色是非常有用的情況下要讓使用者能夠執行自己的臨機操作查詢或更新資料庫,一律是不適當。有時候,您可能希望使用者只時它們使用特定應用程式,而且不要能夠檢視或修改應用程式之外的資料有某種權限。 通常用於解決這個工作的一個方法是只提供一個 SQL Server 使用者帳戶所需的權限。實際的使用者可能具有權限連線到一個資料庫,但不是檢視或修改任何資料。使用者連線到使用個別的使用者帳戶資料庫之後 [ADP 可能再以程式設計方式使用再次連線沒有權限,使用者帳戶的認證。雖然這可能是有效,它不允許您分辨資料庫中的使用者,或決定哪個使用者執行特定動作。 應用程式角色,被為了解決這種限制。與一般資料庫角色不同的應用程式角色沒有成員本身。而是,使用者登入 SQL Server,並連接到資料庫,使用他們自己的認證。在該點的應用程式角色的安全性內容可以套用以程式設計的方式為現有的連線使用 sp_setapprole 預存程序。在 SQL Server 個別使用者仍以區分,但內特定的連接可供使用的權限受限於應用程式角色的權限。使用者的個別權限、 是否較低或更大,不再視為。 建立應用程式角色Microsoft Access 專案沒有任何視覺化設計工具來建立 SQL Server 安全性物件例如應用程式角色。 Microsoft 建議您使用用戶端工具來建立應用程式角色及指派權限亦包含 SQL Server 或 Microsoft Office XP 程式開發人員的一般版本。但是,您可以仍然建立應用程式角色並授與必要的權限以程式設計方式使用 Transact-SQL (T-SQL) 從一個 ADP。雖然 SQL Server 安全性的完整討論是本文章額外的範圍之外資訊可以在 SQL Server 線上叢書 》 中找到下列的步驟會告訴您如何以程式設計方式建立應用程式角色,並授與新的角色 選取 權限] 資料表上:
實作應用程式角色複雜的主要因素您在 Access 專案中使用應用程式角色時在於 Access 會使用三個連線到 SQL Server,在處理各種工作。在理想的情況下,將應用程式角色套用至整個專案,您必須在所有三個連線的內容中執行 sp_setapprole。每個連線所處理的物件如下所示:
雖然可相當輕鬆地存取連線 # 2 和 # 3,沒有方法可供連線 # 1 的內容中執行預存程序。幸運的是,這個連線是最重要的三個,而且很容易地由建構來處理資料庫物件,而不是依賴內建的 [資料庫] 視窗自己使用者介面 (比方說切換表單型別形式) 解決。 下列步驟使用北風範例 Access 專案來示範如何套用應用程式角色對連線 # 2 和 # 3:
根據設計,Access 只在為其使用者至少選取或執行] 使用權限中的 [資料庫] 視窗中顯示物件。 存取會使用連線 # 1,來判斷哪些物件的使用者具有權限的。之後套用應用程式角色,才能連線 # 2 和 # 3 [資料庫] 視窗仍會顯示同一個物件,即使使用者可能不再有所有物件的權限,或者可能並不會顯示出來的多個物件的權限,先前一樣。當您使用 [資料庫] 視窗,這會導致未預期的行為。 例如當您開啟 tNewTable 資料表,"顯然 」 使用者沒有權限編輯和插入資料錄。啟用 [插入新的記錄] 圖示在表格底部,而且使用者能夠一筆資料錄置於編輯模式。您看不到任何視覺線索,否則表示直到您嘗試認可編輯或插入這會產生錯誤訊息。您有權限,當您實際執行時不會認為存取。 最有效的解決方法是為使用者提供一個自訂介面,並不依賴 [資料庫] 視窗。利用切換表單型別使用者介面中,您可以控制完全哪些使用者有存取權的物件。 其他限制和安全性考量子表單無法運作與不同的是與其他資料庫] 物件 Access 不會永遠使用相同的連線來擷取子表單的資料來源。Access 通常 (但不是一定) 建立新的連線到 SQL Server 只處理子表單資料錄集,或擷取連結連線到主表單的子表單的欄位資料。因為這個新的連線並沒有套用的應用程式角色,如果您沒有資料庫物件的明確權限,可能會產生權限錯誤。不幸的是,這表示是當套用應用程式角色時,請使用結合子表單沒有可靠的方式。只有有效的解決方法是完全有結合子表單,以程式設計的方式處理的資料操作。當使用在 Access 中的應用程式角色時,這會是最嚴重的限制。 報告無法運作 當您有物件 (例如資料表或檢視名稱列為報表或子報表記錄來源時,Access 會檢查查看物件是否已從 SQL Server 擷取任何資料之前列出在 [資料庫] 視窗中。因為 [資料庫] 視窗使用沒有套用的應用程式角色的連接,如果您沒有基礎資料來源的明確權限,就是會產生錯誤。 若要解決這個問題,一律使用 Transact-SQL 陳述式作為記錄來源為表單和報表。例如使用 「 選取 * 從 ViewName"來代替只是 ViewName"或"Exec StoredProcedureName 」 而非只是 「 StoredProcedureName 」。 這種方式存取將 Transact-SQL 陳述式直接傳遞至 SQL Server,並擷取應用程式角色的權限為基礎的資料。 [公用資料庫角色 應用程式角色取得公用資料庫角色的權限。預設中 NorthwindCS 公用角色都具有大部分物件的完整權限。應用程式角色就通常沒有效果。您在 「 建立應用程式角色 」] 區段中建立 tNewTable 資料表時公用角色已無法取得該資料表的權限,您稍後該資料表上看到應用程式角色安全性內容的效果。不過,其他資料表可能不會顯示應用程式角色下的任何差異因為 Public 角色有那些物件的權限。 VBA 安全性 因為應用程式角色密碼內嵌至應用程式就稱為,知識豐富的使用者能夠從來源] 程式碼讀取應用程式角色名稱和密碼,然後使用該資訊到 SQL Server 存取來自另一個應用程式。因此,最好是 [ADP 編譯到 ADE 檔案,如此一來,就無法檢視原始碼。最小,強制執行 VBA 專案上的密碼。 ?考如需有關本文的 Microsoft Access 2000 版本的詳細資訊,按一下下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項: 318816?
(http://support.microsoft.com/kb/318816/EN-US/
)
ACC2000: 如何使用應用程式角色與 Access 專案] 和 [SQL Server 2000 桌面引擎 (MSDE 2000) 更多有關 GRANT,請參閱 SQL Server 線上叢書 》 文件。在 SQL Server 線上叢書 》 是可用在下列 Microsoft 網站:http://www.microsoft.com/sql/techinfo/productdoc/2000/default.asp 這篇文章中的資訊適用於:
機器翻譯重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。 按一下這裡查看此文章的英文版本:308312?
(http://support.microsoft.com/kb/308312/en-us/
)
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。 | 其他資源 其他支援網站社群立即取得協助文章翻譯
|






Windows Live
Facebook
Twitter
Linkedin
Digg it
Yahoo
Delicious
StumbleUpon
Yammer
Reddit
Technorati
FriendFeed
Email


回此頁最上方
