【问题标题】:Capturing user who changes database捕获更改数据库的用户
【发布时间】:2015-10-03 10:14:05
【问题描述】:

我从事的一些项目最近将前端移至 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()

【问题讨论】:

  • 您查看过Environment.UserName 的登录用户详细信息吗?
  • 该函数用于获取用户名,我只需要访问后端即可获取该信息

标签: vb.net audit trail


【解决方案1】:

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

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

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

在不知道你的Audit 结构的情况下,我可以看出它通常的做法,当数据发生变化时,你使用Ado.Net 创建Sql 事务,然后在这个事务下插入你审核数据,然后对真实数据进行 CRUD。然后你承诺。这样,您要么成功,要么失败 - 未经审计就不会修改任何数据。

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

CreatedBy、CretedDate、ModifiedBy、ModifiedDate。

每条记录都准备好显示谁在使用您的系统以及何时使用。

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

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

【讨论】:

    猜你喜欢
    • 2017-05-13
    • 2019-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多