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

首頁(yè) > 開(kāi)發(fā) > 綜合 > 正文

了解 Microsoft Access 安全性

2024-07-21 02:09:28
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
  • 本文來(lái)源于網(wǎng)頁(yè)設(shè)計(jì)愛(ài)好者web開(kāi)發(fā)社區(qū)http://www.html.org.cn收集整理,歡迎訪問(wèn)。
  • 簡(jiǎn)介
    在早期版本的 microsoft® access(microsoft access 2000 以前)中,有關(guān)安全性的知識(shí)有時(shí)被認(rèn)為是無(wú)法為任何人所掌握和應(yīng)用的。您需要按順序執(zhí)行很多步驟,一旦遺漏某個(gè)步驟或者顛倒了順序就會(huì)帶來(lái)災(zāi)難性的后果。隨著 microsoft access for microsoft windows® 95 的 security wizard 出現(xiàn),以及 microsoft access 2000 的 security wizard 的不斷改進(jìn),在 access 中實(shí)現(xiàn)安全性已變得非常簡(jiǎn)單。但是,即使有了這些幫助,您也必須清楚自己的安全選項(xiàng),并掌握在數(shù)據(jù)庫(kù)中保護(hù)數(shù)據(jù)和對(duì)象的操作。否則,輕者會(huì)帶來(lái)數(shù)據(jù)安全隱患,重者會(huì)將您鎖在自己的數(shù)據(jù)庫(kù)之外。

    有很多方法可以保護(hù)您的 access 數(shù)據(jù)庫(kù)以及其中包含的數(shù)據(jù)。在本文中,我們將討論用于保護(hù)組成數(shù)據(jù)庫(kù)的各個(gè)對(duì)象(包含數(shù)據(jù))、包含諸如窗體和報(bào)表等元素的對(duì)象以及代碼(可能是數(shù)據(jù)庫(kù)中最有價(jià)值的部分)的方法。本文中討論的安全技巧只適用于 microsoft access 數(shù)據(jù)庫(kù) (.mdb) 文件。
    需要了解的有關(guān)保護(hù)敏感數(shù)據(jù)的知識(shí)
    您應(yīng)該知道,有很多工具和第三方實(shí)用程序可以用于探測(cè)任何類型的數(shù)據(jù)庫(kù)的密碼,以及來(lái)自任何工作組信息文件的用戶名和密碼(本文后面將詳細(xì)介紹工作組信息文件)。如果需要保護(hù)敏感數(shù)據(jù)免受非法訪問(wèn),最好的安全措施就是使用計(jì)算機(jī)操作系統(tǒng)提供的文件級(jí)安全性和文件共享安全性。文件級(jí)安全性涉及在數(shù)據(jù)文件上設(shè)置權(quán)限。文件共享安全性涉及限制對(duì)數(shù)據(jù)文件存儲(chǔ)位置的訪問(wèn)。文件共享安全性的一個(gè)示例是在存儲(chǔ)數(shù)據(jù)文件的文件夾(位于本地計(jì)算機(jī)或網(wǎng)絡(luò)服務(wù)器上)上設(shè)置用戶權(quán)限。為此,可以將數(shù)據(jù)拆分到多個(gè)文件中,在這些文件上設(shè)置用戶權(quán)限,再將這些文件放置到受保護(hù)的文件共享空間中。然后可以從具有安全設(shè)置的 access 數(shù)據(jù)庫(kù)鏈接到這些文件。
    access 安全性概述
    以下各節(jié)介紹了幾種保護(hù) access 數(shù)據(jù)庫(kù)的方法。
    加密或解密數(shù)據(jù)庫(kù)
    最簡(jiǎn)單(也是安全性最低)的保護(hù)方法是對(duì)數(shù)據(jù)庫(kù)進(jìn)行加密。加密數(shù)據(jù)庫(kù)就是將數(shù)據(jù)庫(kù)文件壓縮,從而使某些實(shí)用程序(如字處理器)不能解讀這些文件。加密一個(gè)不具有安全設(shè)置的數(shù)據(jù)庫(kù)并不能保證數(shù)據(jù)庫(kù)的安全,因?yàn)槿魏稳硕伎梢源蜷_(kāi)數(shù)據(jù)庫(kù)并完全訪問(wèn)數(shù)據(jù)庫(kù)中的所有對(duì)象。有關(guān)對(duì)數(shù)據(jù)庫(kù)進(jìn)行安全設(shè)置的詳細(xì)內(nèi)容,請(qǐng)參閱本文后面的使用 security wizard 設(shè)置 access 數(shù)據(jù)庫(kù)的安全性。

    加密可以避免在以電子方式傳輸數(shù)據(jù)庫(kù)或者將其存儲(chǔ)在軟盤、磁帶或光盤上時(shí),其他用戶偶然訪問(wèn)數(shù)據(jù)庫(kù)中的信息。然而 jet(access 使用的數(shù)據(jù)庫(kù)引擎)使用的加密方法非常薄弱,因此絕不能用于保護(hù)敏感數(shù)據(jù)。“加密/解密數(shù)據(jù)庫(kù)”命令位于“工具”菜單的“安全”子菜單中。解密數(shù)據(jù)庫(kù)是對(duì)加密過(guò)程的逆運(yùn)算。
    使用自定義界面
    另一種相對(duì)簡(jiǎn)單的保護(hù)方案是使用自定義界面代替 access 標(biāo)準(zhǔn)界面。與加密一樣,它也不能保護(hù)數(shù)據(jù)庫(kù)中的對(duì)象和敏感數(shù)據(jù)的安全。通過(guò)選擇“工具”菜單中的“啟動(dòng)”選項(xiàng),您可以指定自定義的啟動(dòng)窗體、菜單,甚至自定義的標(biāo)題和圖標(biāo)。還可以選擇取消 database 窗口,從而對(duì)缺乏相應(yīng)技術(shù)的應(yīng)用程序用戶隱藏這些對(duì)象。“啟動(dòng)”對(duì)話框的各項(xiàng)功能也可以通過(guò)編程實(shí)現(xiàn)。有關(guān)如何從“啟動(dòng)”對(duì)話框設(shè)置啟動(dòng)選項(xiàng)的詳細(xì)信息,請(qǐng)參閱 access 幫助中的“關(guān)于啟動(dòng)選項(xiàng)”。有關(guān)如何通過(guò)編程設(shè)置啟動(dòng)選項(xiàng)的詳細(xì)信息,請(qǐng)參閱 access 幫助 microsoft visual basic® 編輯器的“設(shè)置‘啟動(dòng)’選項(xiàng)和編碼中的選項(xiàng)”。
    設(shè)置數(shù)據(jù)庫(kù)密碼
    您可以在數(shù)據(jù)庫(kù)上設(shè)置密碼,從而要求用戶在訪問(wèn)數(shù)據(jù)和數(shù)據(jù)庫(kù)對(duì)象時(shí)輸入密碼。
    注意:使用密碼保護(hù)數(shù)據(jù)庫(kù)或其中的對(duì)象的安全性也稱為共享級(jí)安全性。
    您不能使用此選項(xiàng)為用戶或組分配權(quán)限,因此任何掌握密碼的人都可以無(wú)限制地訪問(wèn)所有 access 數(shù)據(jù)和數(shù)據(jù)庫(kù)對(duì)象。“設(shè)置數(shù)據(jù)庫(kù)密碼”命令位于“工具”菜單的“安全”子菜單中。
    用戶級(jí)安全性
    除共享級(jí)安全性外,您還可以使用用戶級(jí)安全性,它提供了最嚴(yán)格的訪問(wèn)限制,使您能夠最大限度地控制數(shù)據(jù)庫(kù)及其中包含的對(duì)象。這是我們所推薦的數(shù)據(jù)庫(kù)保護(hù)措施的一部分(當(dāng)和操作系統(tǒng)提供的文件級(jí)和共享級(jí)安全性結(jié)合使用時(shí)),因此我們將在本文后面對(duì)用戶級(jí)安全性做詳細(xì)介紹。

    同樣,我們也將討論用于保護(hù)數(shù)據(jù)庫(kù)中包含的 visual basic for applications (vba) 代碼的各種方法。
    警告:用戶級(jí)安全性(在單獨(dú)使用時(shí))主要用于保護(hù)數(shù)據(jù)庫(kù)中的代碼和對(duì)象,以免用戶不小心進(jìn)行了修改或更改。如果不希望用戶非法訪問(wèn)窗體、報(bào)表或模塊中的代碼,則必須將 .mdb 文件轉(zhuǎn)換為 mde 文件(本文后面將詳細(xì)介紹)。要避免用戶修改數(shù)據(jù)庫(kù)中的查詢、宏或數(shù)據(jù)訪問(wèn)頁(yè),唯一的方法就是將數(shù)據(jù)庫(kù)文件放在一個(gè)受保護(hù)的文件共享區(qū)域中。此外,在 access 中不可能既允許用戶修改表中的數(shù)據(jù),同時(shí)又禁止其修改表的設(shè)計(jì)或刪除表。要提供這樣一種功能,需要使用一個(gè)基于服務(wù)器的數(shù)據(jù)庫(kù)產(chǎn)品,例如 microsoft sql server™。設(shè)置模塊密碼
    使用密碼可以保護(hù)所有標(biāo)準(zhǔn)模塊和類模塊(例如窗體和報(bào)表中包含的代碼)以免用戶不小心修改或查看 vba 代碼。設(shè)置密碼后,您只需在每次會(huì)話時(shí)輸入一次密碼,以便在 visual basic 編輯器中查看或修改代碼。除查看和編輯外,在剪切、復(fù)制、粘貼、導(dǎo)出或刪除任何模塊時(shí)也都需要密碼。但應(yīng)該清楚的是,使用這種方法保護(hù)代碼不能防止您或其他用戶運(yùn)行代碼,也不能防止其他用戶使用第三方實(shí)用程序(如 16 進(jìn)制編輯器)來(lái)查看代碼。要完全保護(hù)代碼,必須將 .mdb 文件轉(zhuǎn)換為 mde 文件。

    要為項(xiàng)目中的模塊設(shè)置密碼: 為該項(xiàng)目從 visual basic 編輯器的“工具”菜單中選擇“屬性”命令。 在“項(xiàng)目屬性”對(duì)話框中,單擊“保護(hù)”選項(xiàng)卡。 選中“查看時(shí)鎖定工程”復(fù)選框并鍵入密碼。 在“確認(rèn)密碼”框中,重新鍵入密碼,然后單擊“確定”。 使用 mde 文件
    通過(guò)將數(shù)據(jù)庫(kù)文件轉(zhuǎn)換為 mde 文件,可以完全保護(hù) access 中的代碼免受非法訪問(wèn)。將 .mdb 文件轉(zhuǎn)換為 mde 文件時(shí),access 將編譯所有模塊,刪除所有可編輯的源代碼,然后壓縮目標(biāo)數(shù)據(jù)庫(kù)。原始的 .mdb 文件不會(huì)受到影響。新數(shù)據(jù)庫(kù)中的 vba 代碼仍然能運(yùn)行,但不能查看或編輯。數(shù)據(jù)庫(kù)將繼續(xù)正常工作,您仍然可以升級(jí)數(shù)據(jù)和運(yùn)行報(bào)表。尤其是,將 access 數(shù)據(jù)庫(kù)保存為 mde 文件可以防止以下操作: 在設(shè)計(jì)視圖中查看、修改或創(chuàng)建窗體、報(bào)表或模塊。 添加、刪除或更改對(duì)對(duì)象庫(kù)或數(shù)據(jù)庫(kù)的引用。 使用 access 或 vba 對(duì)象模型的屬性或方法更改代碼 - mde 文件不包含可編輯代碼。 導(dǎo)入或?qū)С龃绑w、報(bào)表或模塊。而表、查詢、數(shù)據(jù)訪問(wèn)頁(yè)和宏可以導(dǎo)入非 mde 數(shù)據(jù)庫(kù),或從中導(dǎo)出。
    要將 .mdb 文件轉(zhuǎn)換為 mde 文件: 關(guān)閉數(shù)據(jù)庫(kù)。 單擊“工具”菜單中的“數(shù)據(jù)庫(kù)實(shí)用工具”。 單擊“生成 mde 文件”。 在“保存數(shù)據(jù)庫(kù)為 mde”對(duì)話框中,找到 .mdb 文件,然后單擊“生成 mde”。 注意:在 access 2002 中創(chuàng)建的數(shù)據(jù)庫(kù)使用默認(rèn)的 access 2000 文件格式。access 2000 文件格式的數(shù)據(jù)庫(kù)只能在 access 2000 中轉(zhuǎn)換為 mde 格式。要在 access 2002 中將以默認(rèn)的 access 2000 格式創(chuàng)建的 .mdb 文件轉(zhuǎn)換為 mde 文件,必須先將文件轉(zhuǎn)換為 access 2002 文件格式。為此,可以首先以獨(dú)占方式打開(kāi)數(shù)據(jù)庫(kù)(要以獨(dú)占方式打開(kāi)數(shù)據(jù)庫(kù),請(qǐng)參閱本文后面的手動(dòng)設(shè)置數(shù)據(jù)庫(kù)密碼一節(jié))。接下來(lái),指向“工具”菜單中的“數(shù)據(jù)庫(kù)實(shí)用工具”,指向“轉(zhuǎn)換數(shù)據(jù)庫(kù)”,然后單擊“轉(zhuǎn)為 access 2002 文件格式”。數(shù)據(jù)庫(kù)即可轉(zhuǎn)換為 mde 文件。
    有關(guān)將 .mdb 文件轉(zhuǎn)換為 mde 文件的更多要求,請(qǐng)參閱 access 幫助中的“保護(hù) access 數(shù)據(jù)庫(kù)中的 visual basic for applications 代碼”。

    下面我們來(lái)看看用戶級(jí)安全性。
    關(guān)于 access 用戶級(jí)安全性
    access 使用 microsoft jet 數(shù)據(jù)庫(kù)引擎來(lái)存儲(chǔ)和檢索數(shù)據(jù)庫(kù)中的對(duì)象。jet 數(shù)據(jù)庫(kù)引擎使用基于工作組的安全模型(也稱為用戶級(jí)安全性)來(lái)判斷誰(shuí)可以打開(kāi)數(shù)據(jù)庫(kù),并保護(hù)數(shù)據(jù)庫(kù)所包含對(duì)象的安全。無(wú)論是否明確設(shè)置了數(shù)據(jù)庫(kù)的安全性,用戶級(jí)安全性對(duì)所有 access 數(shù)據(jù)庫(kù)始終處于打開(kāi)狀態(tài)。您可以通過(guò)操縱用戶和組帳戶的權(quán)限和成員身份來(lái)更改 access 中的默認(rèn)安全級(jí)別。下面將對(duì)此進(jìn)行介紹。

    無(wú)論何時(shí)啟動(dòng) access,jet 數(shù)據(jù)庫(kù)引擎都要查找工作組信息文件(默認(rèn)名稱為 system.mdw,也可以使用擴(kuò)展名 .mdw 任意命名)。工作組信息文件包含組和用戶信息(包括密碼),這些信息決定了誰(shuí)可以打開(kāi)數(shù)據(jù)庫(kù),以及他們對(duì)數(shù)據(jù)庫(kù)中的對(duì)象的權(quán)限。對(duì)單個(gè)對(duì)象的權(quán)限存儲(chǔ)在數(shù)據(jù)庫(kù)中。這樣,例如,就可以賦予一個(gè)組的用戶(而不是其他用戶)使用特定表的權(quán)限,而賦予另一個(gè)組查看報(bào)表的權(quán)限,但不能修改報(bào)表的設(shè)計(jì)。

    工作組信息文件包括內(nèi)置組(admins 和 users)以及一個(gè)通用用戶帳戶 (admin),該帳戶具有管理數(shù)據(jù)庫(kù)及其包含的對(duì)象的權(quán)限(無(wú)限制)。您也可以使用菜單命令(“工具”菜單中的“安全”子菜單)或者通過(guò) vba 代碼添加新的組和用戶。
    注意:安裝 access 時(shí),安裝程序會(huì)自動(dòng)創(chuàng)建工作組信息文件,并使用您指定的名稱和單位信息來(lái)命名。因?yàn)檫@一信息通常很容易被判斷出來(lái),因而未經(jīng)授權(quán)的用戶很可能會(huì)創(chuàng)建另一個(gè)版本的工作組信息文件,從而在由該工作組信息文件定義的工作組中,為自己設(shè)定一個(gè)不可撤消的管理員帳戶(admins 組的成員)權(quán)限。為防止發(fā)生這種情況,應(yīng)創(chuàng)建一個(gè)新的工作組信息文件,并指定唯一的工作組 id (wid)。這樣,只有知道 wid 的用戶才能創(chuàng)建該工作組信息文件的副本。本文后面將討論使用 user-level security wizard 創(chuàng)建新的工作組信息文件。
    admins 組不能被刪除,其成員具有不可撤消的管理權(quán)限。您可以通過(guò)菜單或代碼刪除 admins 組的權(quán)限,但 admins 組的任何成員都可以重新添加權(quán)限。此外,admins 組中必須始終至少有一個(gè)管理數(shù)據(jù)庫(kù)的成員。對(duì)于沒(méi)有進(jìn)行安全設(shè)置的數(shù)據(jù)庫(kù),admins 組始終包含默認(rèn)的 admin 用戶帳戶,它也是所有用戶默認(rèn)登錄的帳戶。

    所有用戶必須屬于默認(rèn)的 users 組,不管他們是否還屬于其他組。您可以在 vba 中創(chuàng)建用戶帳戶,而并不將新的用戶帳戶添加到 admins 組中。然而,如果不同時(shí)將該用戶帳戶添加到 admins 組中,該用戶將無(wú)法成功啟動(dòng) access,因?yàn)?access 內(nèi)部使用的用于管理數(shù)據(jù)庫(kù)的很多表都映射到 users 組的權(quán)限。

    使用以下步驟進(jìn)行 access 數(shù)據(jù)庫(kù)的安全設(shè)置: 將新用戶帳戶添加到 admins 組中。該用戶對(duì)數(shù)據(jù)庫(kù)中的對(duì)象具有管理權(quán)限。 從 admins 組中刪除默認(rèn)的 admin 用戶帳戶。 從 admin 用戶和 users 組中刪除權(quán)限。 為所創(chuàng)建的任何自定義組分配權(quán)限。
    在默認(rèn) admin 用戶帳戶上設(shè)置密碼會(huì)激活登錄對(duì)話框,從而每次啟動(dòng) access 時(shí)都會(huì)提示用戶輸入用戶名和密碼。如果您沒(méi)有在 admin 帳戶上設(shè)置密碼,用戶將自動(dòng)作為 admin 用戶登錄,無(wú)需密碼,也不會(huì)出現(xiàn)登錄對(duì)話框。

    對(duì)數(shù)據(jù)庫(kù)中對(duì)象的權(quán)限可以是顯式的(直接分配給用戶帳戶)或隱式的(從用戶所屬的組繼承),也可以是兩者的結(jié)合。access 在權(quán)限問(wèn)題上使用“最少限制”規(guī)則,即用戶的權(quán)限包括其顯式和隱式權(quán)限的總和。例如,如果用戶 a 的帳戶具有限制權(quán)限,而用戶 a 屬于一個(gè)具有限制權(quán)限的組,同時(shí)也屬于另一個(gè)具有管理(所有)權(quán)限的組,那么用戶 a 將具有管理權(quán)限。有鑒于此,通常最好不要為用戶帳戶分配顯式權(quán)限。而應(yīng)創(chuàng)建具有不同權(quán)限的組,然后將用戶分配給具有適當(dāng)權(quán)限的組,這會(huì)減少數(shù)據(jù)庫(kù)管理方面的麻煩。

    在以下各節(jié)中,我們將展示如何通過(guò)用戶界面和編程手段來(lái)保護(hù)數(shù)據(jù)庫(kù)及其包含的對(duì)象。首先,我們來(lái)看看幾種設(shè)置數(shù)據(jù)庫(kù)密碼的不同方法。
    手動(dòng)設(shè)置數(shù)據(jù)庫(kù)密碼
    您可以為數(shù)據(jù)庫(kù)設(shè)置密碼,從而要求用戶在訪問(wèn)數(shù)據(jù)庫(kù)時(shí)輸入密碼。然而,一旦用戶登錄后,便可以不受限制地訪問(wèn)數(shù)據(jù)庫(kù)中的數(shù)據(jù)和對(duì)象。
    注意:在設(shè)置數(shù)據(jù)庫(kù)密碼之前,建議備份數(shù)據(jù)庫(kù)并將其存儲(chǔ)在一個(gè)安全的位置。
    在設(shè)置數(shù)據(jù)庫(kù)密碼之前,需要以獨(dú)占方式打開(kāi)數(shù)據(jù)庫(kù)。要以獨(dú)占方式打開(kāi)數(shù)據(jù)庫(kù): 如果數(shù)據(jù)庫(kù)處于打開(kāi)狀態(tài),關(guān)閉數(shù)據(jù)庫(kù)。 單擊“文件”菜單中的“打開(kāi)”重新打開(kāi)數(shù)據(jù)庫(kù)。 在“打開(kāi)”對(duì)話框中,找到數(shù)據(jù)庫(kù),單擊“打開(kāi)”按鈕旁邊的箭頭,然后單擊“以獨(dú)占方式打開(kāi)”。
    要手動(dòng)設(shè)置數(shù)據(jù)庫(kù)密碼: 在“工具”菜單中,指向“安全”,然后單擊“設(shè)置數(shù)據(jù)庫(kù)密碼”。 在“密碼”框中,鍵入密碼。 注意:密碼區(qū)分大小寫(xiě)。在“驗(yàn)證”框中,重新鍵入密碼以確認(rèn),然后單擊“確定”。
    現(xiàn)在就設(shè)置了數(shù)據(jù)庫(kù)密碼。下次您或其他用戶打開(kāi)數(shù)據(jù)庫(kù)時(shí),會(huì)出現(xiàn)一個(gè)對(duì)話框要求輸入密碼。下面我們來(lái)看看如何通過(guò)編程設(shè)置數(shù)據(jù)庫(kù)密碼。
    通過(guò)編程設(shè)置數(shù)據(jù)庫(kù)密碼
    按以下語(yǔ)法使用關(guān)鍵字 alter database,您可以編程設(shè)置、修改或刪除數(shù)據(jù)庫(kù)密碼。

    alter database password newpassword oldpassword

    在這個(gè)語(yǔ)句中,密碼由方括號(hào) ([]) 分隔的 string 值表示,但下述情況例外。

    第一次設(shè)置數(shù)據(jù)庫(kù)密碼時(shí),使用 null 關(guān)鍵字作為 alter database 語(yǔ)句中的 oldpassword 參數(shù)。要?jiǎng)h除數(shù)據(jù)庫(kù)密碼,請(qǐng)使用 null 關(guān)鍵字作為 alter database 語(yǔ)句的 newpassword 參數(shù)。在這些情況下,關(guān)鍵字 null 不應(yīng)出現(xiàn)在方框中。

    在使用以下過(guò)程之前,可能需要設(shè)置對(duì) microsoft ado ext 2.5 for ddl and security 庫(kù)的引用(如果尚未設(shè)置): 在 visual basic 編輯器中,指向“工具”菜單中的“引用”。將顯示“引用”對(duì)話框。 選中 microsoft ado ext 2.5 for ddl and security 復(fù)選框。
    請(qǐng)看以下第一次設(shè)置密碼時(shí)的代碼:

    private function createdbpassword(byval password as string, _ byval path as string) as boolean dim objconn as adodb.connection dim stralterpassword as string on error goto createdbpassword_err ' 創(chuàng)建 sql 串以初始化一個(gè)數(shù)據(jù)庫(kù)密碼。 stralterpassword = "alter database password [password] null;" ' 打開(kāi)不具有安全設(shè)置的數(shù)據(jù)庫(kù)。 set objconn = new adodb.connection with objconn .mode = admodeshareexclusive .open "provider=microsoft.jet.oledb.4.0;data " & _ "source=path;" ' 執(zhí)行 sql 語(yǔ)句對(duì)數(shù)據(jù)庫(kù)進(jìn)行安全設(shè)置。 .execute (stralterpassword) end with ' 清除對(duì)象。 objconn.close set objconn = nothing ' 如果成功,返回 true。 createdbpassword = truecreatedbpassword_err: msgbox err.number & ":" & err.description createdbpassword = false end function

    此過(guò)程接受用戶的密碼以及 .mdb 文件的路徑。首先,我們聲明一個(gè)變量,代表對(duì)不具有安全設(shè)置的數(shù)據(jù)庫(kù)的連接,同時(shí)聲明一個(gè) string 變量以包含我們用于更改密碼的 sql 語(yǔ)句。下一步,我們將 stralterpassword 設(shè)置給使用 alter database password 關(guān)鍵字的 jet sql 語(yǔ)句。請(qǐng)注意,因?yàn)槲覀儾皇且鎿Q密碼,因而第二個(gè)參數(shù)被設(shè)置為 null。下一步,我們打開(kāi)一個(gè)到該數(shù)據(jù)庫(kù)的連接。要設(shè)置密碼,必須以獨(dú)占方式打開(kāi)數(shù)據(jù)庫(kù),因此要設(shè)置 mode 屬性。然后執(zhí)行 sql 語(yǔ)句。您通常可以從一個(gè)數(shù)據(jù)庫(kù)運(yùn)行此過(guò)程,以便在一個(gè)單獨(dú)的不具有安全設(shè)置的數(shù)據(jù)庫(kù)中設(shè)置密碼。如果一切正常,函數(shù)返回 true。

    如果要更改具有安全設(shè)置的數(shù)據(jù)庫(kù)的密碼,首先需要使用舊密碼登錄數(shù)據(jù)庫(kù),然后再更改密碼。以下過(guò)程顯示了這一技術(shù)。

    在使用以下過(guò)程之前,可能需要設(shè)置對(duì) microsoft ado ext 2.5 for ddl and security 庫(kù)的引用(如果尚未設(shè)置): 在 visual basic 編輯器中,指向“工具”菜單中的“引用”。將顯示“引用”對(duì)話框。 選中 microsoft ado ext 2.5 for ddl and security 復(fù)選框。
    請(qǐng)看以下過(guò)程:

    private function changedbpassword(byval oldpassword as string, _ byval newpassword as string, byval path as string) as boolean dim objconn as adodb.connection dim stralterpassword as string on error goto changedbpassword_err ' 創(chuàng)建 sql 串以更改數(shù)據(jù)庫(kù)密碼。 stralterpassword = "alter database password [newpassword] [oldpassword];" ' 打開(kāi)具有安全設(shè)置的數(shù)據(jù)庫(kù)。 set objconn = new adodb.connection with objconn .mode = admodeshareexclusive .provider = "microsoft.jet.oledb.4.0" .properties("jet oledb:database password") = "oldpassword" .open "data source=path;" ' 執(zhí)行 sql 語(yǔ)句以更改密碼。 .execute (stralterpassword) end with ' 清除對(duì)象。 objconn.close set objconn = nothing changedbpassword = truechangedbpassword_err: msgbox err.number & ":" & err.description changedbpassword = false end function

    此過(guò)程與前面的子例程類似,只是在登錄具有安全設(shè)置的數(shù)據(jù)庫(kù)時(shí),需要使用更改之前的舊密碼。為此,針對(duì)要更改的數(shù)據(jù)庫(kù),我們?cè)O(shè)置了 connection 對(duì)象的 database password 屬性。這是 connection 對(duì)象的擴(kuò)展屬性之一,所以我們使用了如上所示的特殊語(yǔ)法。要從具有安全設(shè)置的數(shù)據(jù)庫(kù)中刪除密碼,也可以使用此過(guò)程,只需將 alter database 語(yǔ)句的第一個(gè)參數(shù)替換為 null 關(guān)鍵字即可。

    下面我們來(lái)看看如何實(shí)現(xiàn)比在數(shù)據(jù)庫(kù)中設(shè)置密碼更強(qiáng)大的保護(hù)手段。
    使用 security wizard 設(shè)置 access 數(shù)據(jù)庫(kù)的安全性
    可以使用 security wizard 設(shè)置數(shù)據(jù)庫(kù)的安全性。為此,請(qǐng)執(zhí)行以下步驟: 打開(kāi)要設(shè)置安全性的數(shù)據(jù)庫(kù)。 在“工具”菜單中,指向“安全”,然后單擊“設(shè)置安全機(jī)制向?qū)А薄@示“設(shè)置安全機(jī)制向?qū)А睂?duì)話框。 因?yàn)槲覀円獎(jiǎng)?chuàng)建一個(gè)新的工作組信息文件,因此請(qǐng)確保選中此選項(xiàng),然后單擊“下一步”。 在“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第二個(gè)屏幕中(見(jiàn)圖 1),為工作組信息文件鍵入一個(gè)新名稱,或者接受默認(rèn)名稱。鍵入一個(gè)工作組 id (wid)。wid 唯一標(biāo)識(shí)了此工作組文件的 admins 組。下一步,在相應(yīng)的文本框中鍵入您的姓名和單位。雖然這些輸入是可選的,但最好還是填入,因?yàn)橹挥兄肋@些信息的人才能重新創(chuàng)建工作組信息文件。

    圖 1:“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第二個(gè)屏幕
    您也可以選擇是否使用此工作組信息文件作為所有數(shù)據(jù)庫(kù)的默認(rèn)文件,或者只是用于這個(gè)特定的數(shù)據(jù)庫(kù)。單擊“創(chuàng)建快捷方式,打開(kāi)設(shè)置了安全機(jī)制的數(shù)據(jù)庫(kù)”選項(xiàng),然后單擊“下一步”。 在下一個(gè)屏幕中(見(jiàn)圖 2),可以選擇希望向?qū)гO(shè)置其安全機(jī)制的對(duì)象。默認(rèn)情況下,向?qū)樗鞋F(xiàn)有對(duì)象和所有新創(chuàng)建的對(duì)象設(shè)置安全機(jī)制。單擊“下一步”。

    圖 2:“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第三個(gè)屏幕
    在下一個(gè)屏幕中(見(jiàn)圖 3),您可以選擇可選的具有特定權(quán)限的安全組。我們強(qiáng)烈建議您使用組來(lái)管理用戶的訪問(wèn)權(quán)限,而不是賦予每個(gè)用戶特定的權(quán)限。選擇任何其他組帳戶,然后單擊“下一步”。

    圖 3:“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第四個(gè)屏幕
    在此屏幕中(見(jiàn)圖 4),您可以為 users 組設(shè)置特定的權(quán)限。因?yàn)樗杏脩舳甲詣?dòng)成為 users 組的成員,在此選擇的任何權(quán)限都會(huì)應(yīng)用于所有用戶,所以最好限制該組的權(quán)限,或者保留默認(rèn)設(shè)置 - 沒(méi)有任何權(quán)限。單擊“下一步”。

    圖 4:“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第五個(gè)屏幕
    在下一個(gè)屏幕中(見(jiàn)圖 5),您可以向工作組信息文件中添加用戶。還可以為每個(gè)用戶選擇密碼和個(gè)人 id (pid)。access 使用 pid 和帳戶名為工作組標(biāo)識(shí)唯一的用戶。添加用戶并單擊“下一步”。 注意:個(gè)人標(biāo)識(shí)符 (pid) 不是密碼。它被加密并與名稱一起創(chuàng)建了一個(gè)唯一的系統(tǒng)標(biāo)識(shí)符 (sid),用于標(biāo)識(shí)用戶。

    圖 5:“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第六個(gè)屏幕
    在此屏幕中(見(jiàn)圖 6),您可以向工作組信息文件中的組添加用戶。進(jìn)行您的選擇后單擊“下一步”。

    圖 6:“設(shè)置安全機(jī)制向?qū)А睂?duì)話框的第七個(gè)屏幕
    在最后一個(gè)屏幕中,為不具有安全設(shè)置的數(shù)據(jù)庫(kù)的備份選擇一個(gè)名稱。保護(hù)好此原始數(shù)據(jù)庫(kù)的備份是很有必要的,以防萬(wàn)一丟失或損壞了具有安全設(shè)置的數(shù)據(jù)庫(kù)。單擊“完成”。原始數(shù)據(jù)庫(kù)將用 .bak 擴(kuò)展名保存。 警告:當(dāng)創(chuàng)建工作組信息文件后,security wizard 將創(chuàng)建一個(gè)報(bào)表,其中包含重新創(chuàng)建工作組信息文件所需的所有信息。您必須保存好此信息,以便在原始文件丟失或損壞時(shí)重新創(chuàng)建文件。單擊“完成”后,security wizard 將加密數(shù)據(jù)庫(kù),然后要求您使用新的工作組信息文件重新打開(kāi)進(jìn)行了安全設(shè)置的數(shù)據(jù)庫(kù)。
    下面我們來(lái)看看幾種編程使用用戶和組的方法。
    通過(guò)編程添加和刪除用戶和組
    為數(shù)據(jù)庫(kù)設(shè)置了安全性后,您可能需要使用用戶和組。以下各節(jié)展示了其中的一些技巧。

    在使用以下各節(jié)介紹的過(guò)程之前,可能需要設(shè)置對(duì) microsoft ado ext 2.5 for ddl and security 庫(kù)的引用(如果尚未設(shè)置): 在 visual basic 編輯器中,指向“工具”菜單中的“引用”。將顯示“引用”對(duì)話框。 選中 microsoft ado ext 2.5 for ddl and security 復(fù)選框。 添加和刪除用戶
    以下過(guò)程將創(chuàng)建一個(gè)新的用戶帳戶,然后將其追加到用于當(dāng)前數(shù)據(jù)庫(kù)的工作組信息文件中的默認(rèn) users 組。
    注意:要在 access 中使用下面的示例,您需要作為 admins 組的成員登錄并打開(kāi)一個(gè)數(shù)據(jù)庫(kù)。在下面的過(guò)程中,您要確保工作組信息文件不包含在 struser 中指定了其名稱的用戶。例如,您可以先調(diào)用 deleteuser 子例程來(lái)確保這一點(diǎn)。
    請(qǐng)看以下代碼:

    private function adduser(byval struser as string, _ byval strpid as string, _ optional byval strpwd as string) as boolean dim catdb as adox.catalog on error goto adduser_err ' 實(shí)例化 catalog 對(duì)象。 set catdb = new adox.catalog with catdb ' 使用到當(dāng)前數(shù)據(jù)庫(kù)的連接打開(kāi) ' catalog 對(duì)象。 .activeconnection = currentproject.connection ' 創(chuàng)建新的用戶帳戶。 .users.append struser, strpwd, strpid ' 向默認(rèn) users 組追加新的用戶帳戶。 .groups("users").users.append struser end with ' 關(guān)閉 catalog 對(duì)象。 set catdb = nothing adduser = trueadduser_err: msgbox err.number & ":" & err.description adduser = false end function

    該過(guò)程首先為 catalog 對(duì)象聲明一個(gè)變量,然后實(shí)例化該對(duì)象。
    注意:catalog 對(duì)象是 access 數(shù)據(jù)庫(kù)文件中所有對(duì)象的容器。
    然后,該過(guò)程打開(kāi)到當(dāng)前數(shù)據(jù)庫(kù)的連接,并使用來(lái)自調(diào)用過(guò)程的參數(shù),將新用戶追加到 catalog 對(duì)象的 users 集合中。然后新用戶被追加到默認(rèn)的 users 組。users 集合包含了在工作組信息文件中定義的數(shù)據(jù)庫(kù)的所有用戶。

    要?jiǎng)h除現(xiàn)有用戶,可以使用以下過(guò)程:

    private function deleteuser(byval struser as string) as boolean dim catdb as adox.catalog on error goto deleteuser ' 實(shí)例化 catalog 對(duì)象。 set catdb = new adox.catalog with catdb ' 在當(dāng)前數(shù)據(jù)庫(kù)中打開(kāi) catalog 對(duì)象。 .activeconnection = currentproject.connection ' 刪除 struser。 .users.delete struser end with ' 關(guān)閉 catalog 對(duì)象。 set catdb = nothing deleteuser = truedeleteuser_err: msgbox err.number & ":" & err.description deleteuser = falseend function

    此過(guò)程與前面的過(guò)程類似,只是使用了 catalog 對(duì)象的 delete 方法刪除了在 struser string 參數(shù)中指定的用戶。
    添加和刪除組
    添加組的過(guò)程與添加用戶的過(guò)程類似。

    private function addgroup(byval strgroup as string, _ byval strpid as string) as boolean dim catdb as adox.catalog on error goto addgroup_err set catdb = new adox.catalog with catdb ' 在當(dāng)前數(shù)據(jù)庫(kù)中打開(kāi) catalog 對(duì)象。 .activeconnection = currentproject.connection ' 創(chuàng)建新的組。 .groups.append strgroup, strpid end with ' 關(guān)閉 catalog 對(duì)象。 set catdb = nothing addgroup = trueaddgroup_err: msgbox err.number & ":" & err.description addgroup = falseend function

    此過(guò)程首先實(shí)例化 catalog 對(duì)象,然后打開(kāi)一個(gè)到當(dāng)前數(shù)據(jù)庫(kù)的連接。接下來(lái),通過(guò)使用來(lái)自調(diào)用過(guò)程的參數(shù),將新組追加到 catalog 對(duì)象的 groups 集合。

    要?jiǎng)h除現(xiàn)有組,可以使用以下過(guò)程:

    private function deletegroup(byval strgroup as string) as boolean dim catdb as adox.catalog on error goto deletegroup_err set catdb = new adox.catalog with catdb ' 在當(dāng)前數(shù)據(jù)庫(kù)中打開(kāi) catalog 對(duì)象。 .activeconnection = currentproject.connection ' 刪除 strgroup。 .groups.delete strgroup end with ' 關(guān)閉 catalog 對(duì)象。 set catdb = nothing deletegroup = truedeletegroup_err: msgbox err.number & ":" & err.description deletegroup = falseend function

    此過(guò)程與前面的過(guò)程類似,只是使用了 catalog 對(duì)象的 delete 方法刪除了在 strgroup string 參數(shù)中指定的組。

    下面我們來(lái)看看如何通過(guò)編程設(shè)置對(duì)數(shù)據(jù)庫(kù)對(duì)象的權(quán)限。
    通過(guò)編程設(shè)置權(quán)限
    要對(duì)數(shù)據(jù)庫(kù)中的各種對(duì)象設(shè)置權(quán)限,可以使用 group 或 user 對(duì)象的 setpermissions 方法。在下面的過(guò)程中,我們首先撤消組的所有權(quán)限,然后再賦予組特定的權(quán)限。這樣可以確保該組只具有我們指定的權(quán)限:

    private function setgrouppermissions(byval strgroup as string, _ byval strtable as string, byval strobjecttype as string, _ byval straction as string, _ byval strrevokeenum as string) as boolean dim catdb as adox.catalog on error goto setgrouppermissions_err set catdb = new adox.catalog with catdb ' 在當(dāng)前數(shù)據(jù)庫(kù)中打開(kāi) catalog 對(duì)象。 .activeconnection = currentproject.connection ' 撤消組的所有權(quán)限。 .groups(strgroup).setpermissions tbltable, _ strobjecttype, straction, strrevokeenum ' 賦予組特定的權(quán)限。 .groups(strgroup).setpermissions tbltable, _ strobjecttype, straction, _ adrightread or adrightinsert or adrightupdate end with ' 關(guān)閉 catalog 對(duì)象。 set catdb = nothing setgrouppermissions = truesetgrouppermissions_err: msgbox err.number & ":" & err.description setgrouppermissions = false end function

    在當(dāng)前數(shù)據(jù)庫(kù)中打開(kāi)一個(gè) catalog 對(duì)象后,我們使用了 groups 集合的 setpermissions 方法,撤消了該組對(duì) employees 表的所有權(quán)限。第一個(gè)參數(shù)是表的名稱,第二個(gè)參數(shù)顯示了對(duì)象的類型,這里是表。第三個(gè)參數(shù)指定了在設(shè)置權(quán)限時(shí)要執(zhí)行的操作的類型,第四個(gè)參數(shù)是一個(gè)權(quán)限常數(shù),指定了該組沒(méi)有任何權(quán)限。我們已經(jīng)撤消了該組對(duì) employees 表的所有權(quán)限,現(xiàn)在可以賦予其所希望的權(quán)限。

    下一個(gè)語(yǔ)句的前三個(gè)參數(shù)與前一個(gè)語(yǔ)句中的相同。第四個(gè)參數(shù)是通過(guò)使用 or 運(yùn)算符,組合不同的權(quán)限常數(shù)所創(chuàng)建的一個(gè)值。這里,我們賦予了讀取、插入和更新該表的權(quán)限。

    要對(duì)指定類型(例如上述示例中的表)的所有新對(duì)象設(shè)置權(quán)限,請(qǐng)將用于賦予權(quán)限的語(yǔ)句中的第一個(gè)參數(shù)更改為 null 關(guān)鍵字。例如:

    ...catdb.groups(strgroup).setpermissions null, adpermobjtable...


    小結(jié)
    在本文中,我們討論了實(shí)現(xiàn) access 數(shù)據(jù)庫(kù)不同保護(hù)級(jí)別的各種方法,介紹了共享級(jí)和用戶級(jí)安全性。同時(shí)還介紹了如何使用 access security wizard 以及如何通過(guò)編程來(lái)實(shí)現(xiàn)安全設(shè)置。
    發(fā)表評(píng)論 共有條評(píng)論
    用戶名: 密碼:
    驗(yàn)證碼: 匿名發(fā)表
    主站蜘蛛池模板: 恭城| 历史| 桓台县| 江山市| 施甸县| 襄樊市| 青州市| 米林县| 娱乐| 丰县| 寿光市| 东安县| 华宁县| 资源县| 贡嘎县| 巫山县| 虞城县| 阿城市| 神木县| 通辽市| 丽江市| 滨海县| 大悟县| 新巴尔虎右旗| 上思县| 高邑县| 建平县| 许昌县| 洛南县| 红河县| 年辖:市辖区| 自治县| 榆林市| 蒙自县| 来安县| 左云县| 汝阳县| 琼海市| 托克托县| 古浪县| 临颍县|