正文

了解 Microsoft Access 安全性(2)2005-09-18 14:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/4909.html

分享到:

了解 Microsoft Access 安全性

下面我们来看看如何实现比在数据库中设置密码更强大的保护手段。

使用 Security Wizard 设置 Access 数据库的安全性
可以使用 Security Wizard 设置数据库的安全性。为此,请执行以下步骤:

打开要设置安全性的数据库。
在“工具”菜单中,指向“安全”,然后单击“设置安全机制向导”。将显示“设置安全机制向导”对话框。
因为我们要创建一个新的工作组信息文件,因此请确保选中此选项,然后单击“下一步”。
在“设置安全机制向导”对话框的第二个屏幕中(见图 1),为工作组信息文件键入一个新名称,或者接受默认名称。键入一个工作组 ID (WID)。WID 唯一标识了此工作组文件的 Admins 组。下一步,在相应的文本框中键入您的姓名和单位。虽然这些输入是可选的,但最好还是填入,因为只有知道这些信息的人才能重新创建工作组信息文件。

请添加描述


您也可以选择是否使用此工作组信息文件作为所有数据库的默认文件,或者只是用于这个特定的数据库。单击“创建快捷方式,打开设置了安全机制的数据库”选项,然后单击“下一步”。
在下一个屏幕中(见图 2),可以选择希望向导设置其安全机制的对象。默认情况下,向导将为所有现有对象和所有新创建的对象设置安全机制。单击“下一步”。

请添加描述


在下一个屏幕中(见图 3),您可以选择可选的具有特定权限的安全组。我们强烈建议您使用组来管理用户的访问权限,而不是赋予每个用户特定的权限。选择任何其他组帐户,然后单击“下一步”。

请添加描述


在此屏幕中(见图 4),您可以为 Users 组设置特定的权限。因为所有用户都自动成为 Users 组的成员,在此选择的任何权限都会应用于所有用户,所以最好限制该组的权限,或者保留默认设置 - 没有任何权限。单击“下一步”。

请添加描述


在下一个屏幕中(见图 5),您可以向工作组信息文件中添加用户。还可以为每个用户选择密码和个人 ID (PID)。Access 使用 PID 和帐户名为工作组标识唯一的用户。添加用户并单击“下一步”。
注意:个人标识符 (PID) 不是密码。它被加密并与名称一起创建了一个唯一的系统标识符 (SID),用于标识用户。

请添加描述


在此屏幕中,您可以向工作组信息文件中的组添加用户。进行您的选择后单击“下一步”。

请添加描述


在最后一个屏幕中,为不具有安全设置的数据库的
备份选择一个名称。保护好此原始数据库的备份是很有必要的,以防万一丢失或损坏了具有安全设置的数据库。单击“完成”。原始数据库将用 .bak 扩展名保存。
警告:当创建工作组信息文件后,Security Wizard 将创建一个报表,其中包含重新创建工作组信息文件所需的所有信息。您必须保存好此信息,以便在原始文件丢失或损坏时重新创建文件。
单击“完成”后,Security Wizard 将加密数据库,然后要求您使用新的工作组信息文件重新打开进行了安全设置的数据库。
下面我们来看看几种编程使用用户和组的方法。

通过编程添加和删除用户和组
为数据库设置了安全性后,您可能需要使用用户和组。以下各节展示了其中的一些技巧。

在使用以下各节介绍的过程之前,可能需要设置对 Microsoft ADO Ext 2.5 for DDL and Security 库的引用(如果尚未设置):

在 Visual Basic 编辑器中,指向“工具”菜单中的“引用”。将显示“引用”对话框。
选中 Microsoft ADO Ext 2.5 for DDL and Security 复选框。
添加和删除用户
以下过程将创建一个新的用户帐户,然后将其追加到用于当前数据库的工作组信息文件中的默认 Users 组。

注意:要在 Access 中使用下面的示例,您需要作为 Admins 组的成员登录并打开一个数据库。在下面的过程中,您要确保工作组信息文件不包含在 strUser 中指定了其名称的用户。例如,您可以先调用 DeleteUser 子例程来确保这一点。
请看以下代码:

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

' 实例化 Catalog 对象。
Set catDB = New ADOX.Catalog
With catDB
' 使用到当前数据库的连接打开
' Catalog 对象。
.ActiveConnection = CurrentProject.Connection
' 创建新的用户帐户。
.Users.Append strUser, strPwd, strPID
' 向默认 Users 组追加新的用户帐户。
.Groups("Users").Users.Append strUser
End With

' 关闭 Catalog 对象。
Set catDB = Nothing

AddUser = True

AddUser_Err:
Msgbox Err.Number & ":" & Err.Description
AddUser = False
End Function

该过程首先为 Catalog 对象声明一个变量,然后实例化该对象。

注意:Catalog 对象是 Access 数据库文件中所有对象的容器。
然后,该过程打开到当前数据库的连接,并使用来自调用过程的参数,将新用户追加到 Catalog 对象的 Users 集合中。然后新用户被追加到默认的 Users 组。Users 集合包含了在工作组信息文件中定义的数据库的所有用户。

要删除现有用户,可以使用以下过程:

Private Function DeleteUser(ByVal strUser As String) As Boolean
Dim catDB As ADOX.Catalog

On Error GoTo DeleteUser
' 实例化 Catalog 对象。
Set catDB = New ADOX.Catalog
With catDB
' 在当前数据库中打开 Catalog 对象。
.ActiveConnection = CurrentProject.Connection
' 删除 strUser。
.Users.Delete strUser
End With

' 关闭 Catalog 对象。
Set catDB = Nothing

DeleteUser = True

DeleteUser_Err:
Msgbox Err.Number & ":" & Err.Description
DeleteUser = False
End Function

此过程与前面的过程类似,只是使用了 Catalog 对象的 Delete 方法删除了在 strUser String 参数中指定的用户。

添加和删除组
添加组的过程与添加用户的过程类似。

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
' 在当前数据库中打开 Catalog 对象。
.ActiveConnection = CurrentProject.Connection
' 创建新的组。
.Groups.Append strGroup, strPID
End With

' 关闭 Catalog 对象。
Set catDB = Nothing

AddGroup = True

AddGroup_Err:
Msgbox Err.Number & ":" & Err.Description
AddGroup = False
End Function

此过程首先实例化 Catalog 对象,然后打开一个到当前数据库的连接。接下来,通过使用来自调用过程的参数,将新组追加到 Catalog 对象的 Groups 集合。

要删除现有组,可以使用以下过程:

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
' 在当前数据库中打开 Catalog 对象。
.ActiveConnection = CurrentProject.Connection
' 删除 strGroup。
.Groups.Delete strGroup
End With

' 关闭 Catalog 对象。
Set catDB = Nothing

DeleteGroup = True

DeleteGroup_Err:
Msgbox Err.Number & ":" & Err.Description
DeleteGroup = False
End Function

此过程与前面的过程类似,只是使用了 Catalog 对象的 Delete 方法删除了在 strGroup String 参数中指定的组。

下面我们来看看如何通过编程设置对数据库对象的权限。

通过编程设置权限
要对数据库中的各种对象设置权限,可以使用 Group 或 User 对象的 SetPermissions 方法。在下面的过程中,我们首先撤消组的所有权限,然后再赋予组特定的权限。这样可以确保该组只具有我们指定的权限:

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
' 在当前数据库中打开 Catalog 对象。
.ActiveConnection = CurrentProject.Connection
' 撤消组的所有权限。
.Groups(strGroup).SetPermissions tblTable, _
strObjectType, strAction, strRevokeEnum

' 赋予组特定的权限。
.Groups(strGroup).SetPermissions tblTable, _
strObjectType, strAction, _
adRightRead Or adRightInsert Or adRightUpdate
End With

' 关闭 Catalog 对象。
Set catDB = Nothing

SetGroupPermissions = True

SetGroupPermissions_Err:
Msgbox Err.Number & ":" & Err.Description
SetGroupPermissions = False
End Function

在当前数据库中打开一个 Catalog 对象后,我们使用了 Groups 集合的 SetPermissions 方法,撤消了该组对 Employees 表的所有权限。第一个参数是表的名称,第二个参数显示了对象的类型,这里是表。第三个参数指定了在设置权限时要执行的操作的类型,第四个参数是一个权限常数,指定了该组没有任何权限。我们已经撤消了该组对 Employees 表的所有权限,现在可以赋予其所希望的权限。

下一个语句的前三个参数与前一个语句中的相同。第四个参数是通过使用 Or 运算符,组合不同的权限常数所创建的一个值。这里,我们赋予了读取、插入和更新该表的权限。

要对指定类型(例如上述示例中的表)的所有新对象设置权限,请将用于赋予权限的语句中的第一个参数更改为 NULL 关键字。例如:
...
catDB.Groups(strGroup).SetPermissions NULL, adPermObjTable

阅读(1649) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册