cyberfan's blog

正其谊不谋其利,明其道不计其功

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  15 随笔 :: 489 文章 :: 44 评论 :: 0 Trackbacks
为数据库设置了安全性后,可能需要使用用户和组。以下展示了其中的一些技巧。
在使用以下各节介绍的过程之前,可能需要设置对 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
' 创建新的组。
&160; .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
...
posted on 2005-08-12 12:53 cyberfan 阅读(276) 评论(0)  编辑 收藏 引用 所属分类: oa
只有注册用户登录后才能发表评论。