捕获更改数据库的用户

时间:2015-07-14 16:29:11

标签: vb.net username audit trail

我处理了一些项目,前端最近搬到了vb.net,后端仍然是访问.accdb格式。

使用Access前端,我能够设置一些数据宏来捕获一个人的用户名进行更改并将其记录在一个审计表中,看起来它会更难以使用.net前端

有没有办法将这些信息从前端传递到数据库?或者是否有一种方法使后端查看存储在那里的函数(目前似乎不起作用)

这是我后面的代码

Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _
"GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long

Public Function GetUserName() As String
' Returns the network login name
Dim lngLen As Long, lngX As Long
Dim strUserName As String
    strUserName = String$(254, 0)
    lngLen = 255
    lngX = apiGetUserName(strUserName, lngLen)
    If lngX <> 0 Then
        GetUserName = Left$(strUserName, lngLen - 1)
    Else
        GetUserName = ""
    End If
End Function

我有一个公共函数在前端做同样的事情,也称为getusername()

1 个答案:

答案 0 :(得分:0)

我的朋友,我们在这里讨论的是在 MS Access 的封闭环境中工作的主要区别,不仅仅是数据库,还有应用程序。由于Access内的所有内容都是原生的,因此您可以访问所有内部。现在你离开那个模型,你的设计应该相应地改变。在这里,让我们称之为客户端 - 服务器环境,客户端除了连接字符串之外几乎不知道,服务器对客户端一无所知。

如何从代码中检索用户名或其他信息不是问题。您的目标是设计一个支持审计的系统。你已经有了审计表 - 这很好。

根据您的安全模型,您可以使用计算机用户的用户名,也可以使用应用程序用户的用户名。但是你有它 - 在VB中很容易。

在不知道您的Audit结构的情况下,我可以告诉它通常的方式,当数据发生变化时,您使用Ado.Net创建 Sql事务,并在此下事务您插入审计数据,然后您在真实数据上执行CRUD。然后你提交。这样,无论是成功还是失败 - 没有审计就没有数据被修改。

现在,另一步是添加到您的表(如果您还没有)4个字段:

  

CreatedBy,CretedDate,ModifiedBy,ModifiedDate。

每条记录都可以显示谁在玩您的系统以及何时播放。

这就是您的Access Db获取用户的方式:

  1. 通过包含用户列和数据"insert into ... values('" & user & "', ...."
  2. 的sql
  3. 通过包含用户名的单独审核调用
  4. 通过存储过程,其中1个参数可专用于传递用户信息