我在 Access 2003 中有一个数据库,我只希望某些人能够访问它。在我的数据库中,我有一个表格,列出了应该能够访问数据库的人员。(Tbl_BIRT_Users)。该表包含他们的姓名、ntlogin 和电子邮件地址。它还有一个“管理员”字段。
我的问题有两个部分:
1 - 在打开数据库时,我怎样才能让它查找该人的 ntlogin(环境用户名)并确保该人有权使用数据库?
2 - 我需要数据库查看“管理员”是/否字段并授予非管理员只读访问权限和管理员完全访问权限。
谢谢!
我在 Access 2003 中有一个数据库,我只希望某些人能够访问它。在我的数据库中,我有一个表格,列出了应该能够访问数据库的人员。(Tbl_BIRT_Users)。该表包含他们的姓名、ntlogin 和电子邮件地址。它还有一个“管理员”字段。
我的问题有两个部分:
1 - 在打开数据库时,我怎样才能让它查找该人的 ntlogin(环境用户名)并确保该人有权使用数据库?
2 - 我需要数据库查看“管理员”是/否字段并授予非管理员只读访问权限和管理员完全访问权限。
谢谢!
使用 API 调用获取登录名 - API:获取登录名 您可以在命令提示符下更改环境变量,然后,如果从命令提示符启动 Access,Access 将使用欺骗的环境变量。
还有一些方法可以轻松破坏表驱动的安全性,例如用户将后端数据库带回家到 Access 的零售副本,更改表中的值并将数据库带回办公室。
即使您相信用户不会摆弄他们的环境变量,也请采纳 Tony 的建议。添加他链接的模块后,检索用户的帐户名是对 fOSUserName() 函数的简单调用。这真的不比从用户的环境中获取它更难。
但我想补充托尼关于“容易破坏表驱动的安全性”的观点。您的计划是检查用户是否是您的授权用户之一。我的建议是将您的后端数据库文件放在只有您的授权用户才能访问的位置。使用 Windows 文件系统权限将其他人拒之门外。这样你就可以决定你甚至不需要检查你的表来确定用户是否被授权。您仍然可以使用表数据来确定用户是管理员还是普通用户。或者,您可能决定保留授权检查,如果它让您的经理安心……即使它并没有真正提供太多安全性。
你能不能只做这样的事情
Dim rst as Recordset
Dim sql as string
sql = "SELECT * FROM Tbl_BIRT_Users WHERE ntlogin = '" & Environ("UserName") & "'"
set rst = CurrentDb.OpenRecordset(sql)
if (rst.bof and rst.eof) then
/*not a valid user*/
DoCmd.Quit
else
if not rst!Administrator then
/*make read only*/
end if
end if
rst.close
这是我使用的 Access 安全门面装饰。
Public Function SecurityCode()
'* Purpose: Limits access to program
Dim sUserID As String
Dim sUserName As String
'* Determines user from Windows Login
sUserID = Environ("USERNAME")
'* Lookup on BE table of Allowed Users to verify on the list.
sUserName = DLookup("[UserName]", "tbl_AllowedUsers", "ID = '" & sUserID & "'")
If Len(sUserName) > 0 Then
'Allowed User, opens Main Switchboard
'Set global variable for Admin rights
g_Admin = DLookup("[AdminRights]", "tbl_AllowedUsers", "ID = '" & sUserID & "'")
DoCmd.OpenForm "Switchboard"
DoCmd.SelectObject acForm, "Switchboard", True
DoCmd.RunCommand acCmdWindowHide
Else
'Not on the Allowed Users list, opens to a Password Page
DoCmd.OpenForm "frm_LockPage"
DoCmd.SelectObject acForm, "frm_LockPage", True
DoCmd.RunCommand acCmdWindowHide
End If
End Function
尝试以下方法:
Function RealName()
payroll = Environ("Username")
firstname = DLookup("[first name]", "[Payroll Numbers]", "[persno] = " & payroll)
lastname = DLookup("[Last name]", "[Payroll Numbers]", "[persno] = " & payroll)
If IsNull(firstname) = True Then
RealName = payroll
Else
RealName = firstname & " " & lastname
End If
End Function
然后,您可以在 form_load 事件中输入代码以确保它是经过验证的用户。