有没有办法保护一个字段,以便只有某些用户可以编辑?

Is there a way to protect a field so that only certain users can edit?

我有一个 Access 2010 数据库,我需要更新其中的一个字段。现在,我的一个表单上有一个按钮可以复制所选行。我知道我可以通过在该字段上将 Locked 属性 设置为 Yes 来使该字段不重复。

我需要做的是找到一种方法使字段不重复,但仍然可以对某些人进行编辑。我不想设置 Locked 属性,因为那样会为所有人锁定它。

除了更改 Duplicate record 按钮的工作方式外,我不知道该怎么做。现在,它只是复制所选行并将其粘贴到 New Record 行中。这需要所有不是 Locked 的字段。

我读到过可能使用一堆变量并将它们设置为每个字段的值,但这似乎很麻烦,因为我必须设置 160 多个字段。然后将它们粘贴到 New Record 行中。我宁愿不必这样做。

我用过 VBA 只是不怎么用 Access。 VBA 解决方案对我来说很好,我没有尝试任何东西,因为我什至不知道从哪里开始。

我所做的是拥有 table 用户及其权限级别和 Windows 登录用户名。我使用 Environ("USERNAME") 捕获用户名并与用户记录匹配并适当地设置表单,通常只是 disable/hide 特定按钮。

但确实需要对数据库进行更多设置才能防止用户访问受限数据。比如隐藏导航窗格、禁用功能区、禁用右键单击快捷菜单、禁用功能键,甚至可能发布为 executable.

但是如果他们知道后端在哪里,是什么阻止他们直接打开它呢?除非你去SQLServer之类的数据库,否则真的没什么。

我建议使用 sub 来锁定/解锁控​​件,如下所示:

Private Sub SetControlsLocked(ForceLocked As Boolean)

    Dim bLocked As Boolean
    Dim sUser As String

    If ForceLocked Then
        ' Always lock before copying
        bLocked = True
    Else
        ' More secure method than Environ("USERNAME")
        sUser = CreateObject("WScript.Network").UserName
        ' Lock for everyone except some users
        ' If the list is longer or changes regularly, lookup the Username in a table instead
        bLocked = Not (sUser = "jane" Or sUser = "bob" Or sUser = "mike")
    End If

    ' do the locking
    Me!Control1.Locked = bLocked
    Me!Control2.Locked = bLocked

End Sub

(请参阅 上关于 "more secure" 声明的评论)。

并在您的复制按钮例程中应用...

Private Sub cmdCopy_Click()

    ' Lock before copying!
    Call SetControlsLocked(True)

    ' ... your existing copy routine

    ' Unlock for special users
    Call SetControlsLocked(False)

End Sub

...打开表格时:

Private Sub Form_Load()
    ' Lock for non-special users
    Call SetControlsLocked(False)
End Sub