0

我在 Access 2003 中有一个数据库,我只希望某些人能够访问它。在我的数据库中,我有一个表格,列出了应该能够访问数据库的人员。(Tbl_BIRT_Users)。该表包含他们的姓名、ntlogin 和电子邮件地址。它还有一个“管理员”字段。

我的问题有两个部分:

1 - 在打开数据库时,我怎样才能让它查找该人的 ntlogin(环境用户名)并确保该人有权使用数据库?

2 - 我需要数据库查看“管理员”是/否字段并授予非管理员只读访问权限和管理员完全访问权限。

谢谢!

4

5 回答 5

3

使用 API 调用获取登录名 - API:获取登录名 您可以在命令提示符下更改环境变量,然后,如果从命令提示符启动 Access,Access 将使用欺骗的环境变量。

还有一些方法可以轻松破坏表驱动的安全性,例如用户将后端数据库带回家到 Access 的零售副本,更改表中的值并将数据库带回办公室。

于 2010-08-26T20:51:06.633 回答
1

即使您相信用户不会摆弄他们的环境变量,也请采纳 Tony 的建议。添加他链接的模块后,检索用户的帐户名是对 fOSUserName() 函数的简单调用。这真的不比从用户的环境中获取它更难。

但我想补充托尼关于“容易破坏表驱动的安全性”的观点。您的计划是检查用户是否是您的授权用户之一。我的建议是将您的后端数据库文件放在只有您的授权用户才能访问的位置。使用 Windows 文件系统权限将其他人拒之门外。这样你就可以决定你甚至不需要检查你的表来确定用户是否被授权。您仍然可以使用表数据来确定用户是管理员还是普通用户。或者,您可能决定保留授权检查,如果它让您的经理安心……即使它并没有真正提供太多安全性。

于 2010-08-27T02:07:13.650 回答
0

你能不能只做这样的事情

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
于 2010-08-26T14:58:56.630 回答
0

这是我使用的 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
于 2010-08-27T19:21:00.173 回答
0

尝试以下方法:

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 事件中输入代码以确保它是经过验证的用户。

于 2010-10-05T13:59:46.890 回答