使用NT登录作为SQL查询的一部分通过Access 2007中的VBA运行

时间:2010-07-29 19:24:09

标签: sql ms-access vba

在Access 2007中,我尝试使用NTlogin通过SQL查询从表中检索值(请参阅下面的代码)。表单加载后,我收到一条错误消息“编译错误:预期的功能或变量”。有人能告诉我如何解决这个错误。

Private Sub Form_Load()

    Dim UserName As String
    Dim strSQL As String
    Dim strDept As String

    UserName = Environ("USERNAME")

    strSQL = "SELECT DEPT FROM IDs WHERE NTLOGIN =" & UserName

    strDept = DoCmd.RunSQL(strSQL)

    cmdSave.Enabled = False
    cmdEdit.Enabled = True
    cmdPrevious.Enabled = True
    cmdNext.Enabled = True

End Sub

2 个答案:

答案 0 :(得分:1)

我有一段时间没有触及Access,所以我不记得:Environ("USERNAME")是否返回了USERNAME环境变量?

如果是这样,那么您的代码中就会出现安全漏洞。具体来说,您可以接受SQL注入攻击。

想象一下,在用户运行Access之前,用户将USERNAME环境变量设置为

  

''; DROP TABLE IDS;

在这种情况下,您将执行语句:

  

从ID中选择DEPT来自NTLOGIN =''; DROP TABLE IDS;

你可能不希望这种情况发生......

答案 1 :(得分:1)

您不能将RunSQL与select语句一起使用。它仅适用于动作查询。

如果你想要一个记录集,你可以说,除其他外:

strSQL = "SELECT DEPT FROM IDs WHERE NTLOGIN ='" & UserName & "'"
Set rs=CurrentDB.OpenRecordset(strSQL)

其中rs是DAO.Recordset