加密或解密数据库
最简单(也是安全性最低)的保护方法是对数据库进行加密。加密数据库就是将数据库文件压缩,从而使某些实用程序(如字处理器)不能解读这些文件。加密一个不具有安全设置的数据库并不能保证数据库的安全,因为任何人都可以打开数据库并完全访问数据库中的所有对象。有关对数据库进行安全设置的详细内容,请参阅本文后面的使用 Security Wizard 设置 Access 数据库的安全性。
另一种相对简单的保护方案是使用自定义界面代替 Access 标准界面。与加密一样,它也不能保护数据库中的对象和敏感数据的安全。通过选择“工具”菜单中的“启动”选项,您可以指定自定义的启动窗体、菜单,甚至自定义的标题和图标。还可以选择取消 Database 窗口,从而对缺乏相应技术的应用程序用户隐藏这些对象。“启动”对话框的各项功能也可以通过编程实现。有关如何从“启动”对话框设置启动选项的详细信息,请参阅 Access 帮助中的“关于启动选项”。有关如何通过编程设置启动选项的详细信息,请参阅 Access 帮助 Microsoft Visual Basic® 编辑器的“设置‘启动’选项和编码中的选项”。 您可以在数据库上设置密码,从而要求用户在访问数据和数据库对象时输入密码。 注意:使用密码保护数据库或其中的对象的安全性也称为共享级安全性。 您不能使用此选项为用户或组分配权限,因此任何掌握密码的人都可以无限制地访问所有 Access 数据和数据库对象。“设置数据库密码”命令位于“工具”菜单的“安全”子菜单中。 按以下语法使用关键字 ALTER DATABASE,您可以编程设置、修改或删除数据库密码。 ALTER DATABASE PASSWORD NewPassword OldPassword 在这个语句中,密码由方括号 ([]) 分隔的 String 值表示,但下述情况例外。 第一次设置数据库密码时,使用 NULL 关键字作为 ALTER DATABASE 语句中的 OldPassword 参数。要删除数据库密码,请使用 NULL 关键字作为 ALTER DATABASE 语句的 NewPassword 参数。在这些情况下,关键字 NULL 不应出现在方框中。 在使用以下过程之前,可能需要设置对 Microsoft ADO Ext 2.5 for DDL and Security 库的引用(如果尚未设置): 2.选中 Microsoft ADO Ext 2.5 for DDL and Security 复选框。 请看以下第一次设置密码时的代码: 此过程接受用户的密码以及 .mdb 文件的路径。首先,我们声明一个变量,代表对不具有安全设置的数据库的连接,同时声明一个 String 变量以包含我们用于更改密码的 SQL 语句。下一步,我们将 strAlterPassword 设置给使用 ALTER DATABASE PASSWORD 关键字的 Jet SQL 语句。请注意,因为我们不是要替换密码,因而第二个参数被设置为 NULL。下一步,我们打开一个到该数据库的连接。要设置密码,必须以独占方式打开数据库,因此要设置 Mode 属性。然后执行 SQL 语句。您通常可以从一个数据库运行此过程,以便在一个单独的不具有安全设置的数据库中设置密码。如果一切正常,函数返回 True。 如果要更改具有安全设置的数据库的密码,首先需要使用旧密码登录数据库,然后再更改密码。以下过程显示了这一技术。 2.选中 Microsoft ADO Ext 2.5 for DDL and Security 复选框。 请看以下过程: 此过程与前面的子例程类似,只是在登录具有安全设置的数据库时,需要使用更改之前的旧密码。为此,针对要更改的数据库,我们设置了 Connection 对象的 Database Password 属性。这是 Connection 对象的扩展属性之一,所以我们使用了如上所示的特殊语法。要从具有安全设置的数据库中删除密码,也可以使用此过程,只需将 ALTER DATABASE 语句的第一个参数替换为 NULL 关键字即可。 下面我们来看看如何实现比在数据库中设置密码更强大的保护手段。 使用 Security Wizard 设置 Access 数据库的安全性 可以使用 Security Wizard 设置数据库的安全性。为此,请执行以下步骤: 1.打开要设置安全性的数据库。 2.在“工具”菜单中,指向“安全”,然后单击“设置安全机制向导”。将显示“设置安全机制向导”对话框。 3.因为我们要创建一个新的工作组信息文件,因此请确保选中此选项,然后单击“下一步”。 4.在“设置安全机制向导”对话框的第二个屏幕中,为工作组信息文件键入一个新名称,或者接受默认名称。键入一个工作组 ID (WID)。WID 唯一标识了此工作组文件的 Admins 组。下一步,在相应的文本框中键入您的姓名和单位。虽然这些输入是可选的,但最好还是填入,因为只有知道这些信息的人才能重新创建工作组信息文件。 6.在下一个屏幕中,可以选择希望向导设置其安全机制的对象。默认情况下,向导将为所有现有对象和所有新创建的对象设置安全机制。单击“下一步”。 注意:个人标识符 (PID) 不是密码。它被加密并与名称一起创建了一个唯一的系统标识符 (SID),用于标识用户。 警告:当创建工作组信息文件后,Security Wizard 将创建一个报表,其中包含重新创建工作组信息文件所需的所有信息。您必须保存好此信息,以便在原始文件丢失或损坏时重新创建文件。 12.单击“完成”后,Security Wizard 将加密数据库,然后要求您使用新的工作组信息文件重新打开进行了安全设置的数据库。 除共享级安全性外,您还可以使用用户级安全性,它提供了最严格的访问限制,使您能够最大限度地控制数据库及其中包含的对象。这是我们所推荐的数据库保护措施的一部分(当和操作系统提供的文件级和共享级安全性结合使用时),因此我们将在本文后面对用户级安全性做详细介绍。
责任编辑:it415.com
加密可以避免在以电子方式传输数据库或者将其存储在软盘、磁带或光盘上时,其他用户偶然访问数据库中的信息。然而 Jet(Access 使用的数据库引擎)使用的加密方法非常薄弱,因此绝不能用于保护敏感数据。“加密/解密数据库”命令位于“工具”菜单的“安全”子菜单中。解密数据库是对加密过程的逆运算。
使用自定义界面
设置数据库密码
通过编程设置数据库密码
1.在 Visual Basic 编辑器中,指向“工具”菜单中的“引用”。将显示“引用”对话框。
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
' 创建 SQL 串以初始化一个数据库密码。
strAlterPassword = "ALTER DATABASE PASSWORD [Password] NULL;"
' 打开不具有安全设置的数据库。
Set objConn = New ADODB.Connection
With objConn
.Mode = adModeShareExclusive
.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data " & _
"Source=Path;"
' 执行 SQL 语句对数据库进行安全设置。
.Execute (strAlterPassword)
End With
' 清除对象。
objConn.Close
Set objConn = Nothing
' 如果成功,返回 true。
CreateDBPassword = True
CreateDBPassword_Err:
Msgbox Err.Number & ":" & Err.Description
CreateDBPassword = False
End Function
在使用以下过程之前,可能需要设置对 Microsoft ADO Ext 2.5 for DDL and Security 库的引用(如果尚未设置):
1.在 Visual Basic 编辑器中,指向“工具”菜单中的“引用”。将显示“引用”对话框。
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
' 创建 SQL 串以更改数据库密码。
strAlterPassword = "ALTER DATABASE PASSWORD [NewPassword] [OldPassword];"
' 打开具有安全设置的数据库。
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;"
' 执行 SQL 语句以更改密码。
.Execute (strAlterPassword)
End With
' 清除对象。
objConn.Close
Set objConn = Nothing
ChangeDBPassword = True
ChangeDBPassword_Err:
Msgbox Err.Number & ":" & Err.Description
ChangeDBPassword = False
End Function
5.您也可以选择是否使用此工作组信息文件作为所有数据库的默认文件,或者只是用于这个特定的数据库。单击“创建快捷方式,打开设置了安全机制的数据库”选项,然后单击“下一步”。
7.在下一个屏幕中,您可以选择可选的具有特定权限的安全组。我们强烈建议您使用组来管理用户的访问权限,而不是赋予每个用户特定的权限。选择任何其他组帐户,然后单击“下一步”。
8.在此屏幕中,您可以为 Users 组设置特定的权限。因为所有用户都自动成为 Users 组的成员,在此选择的任何权限都会应用于所有用户,所以最好限制该组的权限,或者保留默认设置 - 没有任何权限。单击“下一步”。
9.在下一个屏幕中,您可以向工作组信息文件中添加用户。还可以为每个用户选择密码和个人 ID (PID)。Access 使用 PID 和帐户名为工作组标识唯一的用户。添加用户并单击“下一步”。
10.在此屏幕中,您可以向工作组信息文件中的组添加用户。进行您的选择后单击“下一步”。
11.在最后一个屏幕中,为不具有安全设置的数据库的备份选择一个名称。保护好此原始数据库的备份是很有必要的,以防万一丢失或损坏了具有安全设置的数据库。单击“完成”。原始数据库将用 .bak 扩展名保存。
用户级安全性
