是否可以查询和/或更改存储在Microsoft Access *.mdw
安全文件中的权限?
我真的厌倦了使用UI列出每个用户的权限并将它们全部写下来看看它们是什么......我查看了MSys*
表的标题和我不要在那里看到任何看起来像用户或权限表的内容(至少在我与文件连接的数据库中......我的猜测就是它在* .mdw文件,但我无法通过我连接的数据库访问它。我有管理员权限,所以不是。
答案 0 :(得分:2)
您当然可以编写代码来更改用户权限。
您可以100%选择将用户权限限制为安全组中的成员身份。如果你遵循这个规则,那么用户的权限永远不会存储在数据库中,而只能存储在工作组文件中。这使管理非常容易。 (希望这是在你的情况下完成的)。
您当然可以选择不遵循上述规则,结果现在用户权限将存在于工作组文件和数据库文件中。这当然会造成一个真正的混乱,因为那时你无法在异地系统的副本上进行开发。然后安全管理成为一个真正的动物园。
我建议使用这样的UI来选择用户:
然后,下一个屏幕用于编辑/将该用户分配给安全组。
结果是一个非常简单的UI。因此,为了向用户授予诸如允许返回日期发票等的权限,现在只需单击鼠标即可“选择”给定的组。因此,该咔嗒声为用户提供了该安全组中的“成员资格”。
将用户添加到安全组的代码如下:
Public Function AddToSecGroup(strUserName As String, strGroupName As String)
' adds a user to a group
Dim uUser As user
Dim ws As Workspace
Set ws = DBEngine.Workspaces(0)
Set uUser = ws.Groups(strGroupName).CreateUser(strUserName)
ws.Groups(strGroupName).Users.Append uUser
ws.Groups(strGroupName).Users.Refresh
ws.Groups.Refresh
ws.Users.Refresh
End Function
从安全组中删除用户的代码如下:
Public Sub RemoveFromSecGroup(strUserName As String, strGroupName As String)
' remove user from a group
Dim uUser As user
Dim gGroup As Group
Set uUser = DBEngine.Workspaces(0).Users(strUserName)
uUser.Groups.Delete strGroupName
uUser.Groups.Refresh
End Sub
更改用户密码的代码是:
Function ChangePassword(ByVal strUser As String, _
ByVal strPwd As String) As Integer
Dim ws As Workspace
Dim usr As user
Set ws = DBEngine.Workspaces(0)
Set usr = ws.Users(strUser)
usr.NewPassword "", strPwd
End Function
对于团体会员资格,我使用此:
Public Function IsInGroup(UsrName As String, GrpName As String) As Boolean
'Determines whether UsrName is a member of GrpName
Dim grp As Group
Dim IIG As Boolean
Dim usr As user
IIG = False
For Each usr In DBEngine.Workspaces(0).Users
If usr.Name = UsrName Then GoTo FoundUser
Next
GoTo IIG_Exit
FoundUser:
For Each grp In usr.Groups
If grp.Name = GrpName Then IIG = True
Next
IIG_Exit:
IsInGroup = IIG
End Function
因此,我建议您按安全组组织这些应用程序。结果是,一个简单的操作就是让销售团队人员使用一些新功能来代替25个销售人员逐个某种形式。通过消除这种“重复”过程,您不需要批量更新用户安全性,而只需将用户分配给安全组。
使用某些逻辑安全组通常可以消除更新“许多”用户的大部分需求,因为您现在只需将一件事添加到“许多”用户具有成员资格的给定安全组中。这个“建议”适用于管理桌面或Oracle的Windows域系统,或者在这种情况下适用于像Access这样的简单桌面系统。