访问数据库安全问题

时间:2010-08-26 09:02:53

标签: ms-access access-vba ms-access-2003

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

我的问题分为两部分:

1 - 在打开数据库时,如何让它查找该人的ntlogin(environ用户名)并确保该人员有权使用该数据库?

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

谢谢!

5 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:1)

即使您信任用户不要弄乱他们的环境变量,也请采纳Tony的建议。添加他链接的模块后,检索用户的帐户名称是对fOSUserName()函数的简单调用。从用户的环境中获取它并不困难。

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

答案 2 :(得分: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

答案 3 :(得分: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

答案 4 :(得分: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事件中输入代码,以确保它是经过验证的用户。