建立审计系统; SQL Server后端上的MS Access前端

时间:2008-08-15 19:35:13

标签: sql sql-server ms-access triggers

所以基本上我正在为我的公司构建一个应用程序,它需要使用MS Access构建,它需要在SQL Server上构建。

我已经制定了大部分计划,但我很难找到处理审计系统的方法。

由于它仅在内部使用,您甚至无法从建筑物外部触摸数据库,因此我们不使用登录系统,因为只有在用户已登录到我们的内部时才会使用该程序网络通过Active Directory。知道了这一点,我们正在使用a system to detect automatically the name of the Active Directory user并在其中一个数据库表中使用他们的权限,决定他们能做什么或不能做什么。

所以实际的审计表将有3列(这个设计可能会改变,但对于这个问题并不重要);谁(Active Directory用户),何时(添加/删除/编辑的时间),什么(改变了什么)

我的问题是我应该如何处理这件事。理想情况下,我知道我应该使用触发器,以便在没有记录审计的情况下更新数据库是不可能的,但是我不知道如何以这种方式获取Active Directory用户。另一种方法是将其直接编码到Access源中,以便每当发生更改时,我都会运行INSERT语句。显然这是有缺陷的,因为如果Access发生了某些事情或数据库被其他东西触及,那么它就不会记录审计。

任何可以帮助我的建议,示例或文章都将不胜感激!

11 个答案:

答案 0 :(得分:2)

这对你有用吗?


select user_name(),suser_sname()

卫生署!我忘了逃避我的代码。

答案 1 :(得分:2)

好的,它在这里工作。当我更新表格时,我看到了我的Windows凭据。所以,我打赌我们错过了一步。让我把我所做的1,2,3序列放在一起,也许我们可以追踪到这对你来说是什么。


  1. 创建新的MSAccess数据库(空)
  2. 点击表格部分
  3. 选择外部数据
  4. 选择ODBC数据库
  5. 通过创建链接表选择链接到数据源
  6. 选择计算机数据源
  7. 选择新...
  8. 系统数据源
  9. 从列表中选择SQL Server,然后单击“下一步”,“完成”。
  10. 为新数据源指定名称和描述,并为服务器选择(本地)。单击“下一步”。
  11. 选择“使用网络登录ID进行Windows NT身份验证”。单击“下一步”。
  12. 选中将默认数据库更改为,然后选择数据库。点击下一步。单击“完成”。
  13. 测试数据源。
  14. 选择与Trigger关联的表格,然后单击“确定”。
  15. 在Access中打开表并修改其中一个条目(触发器不会在Insert上触发,只需更新)
  16. 从审核表中选择*

答案 2 :(得分:1)

我们还有一个专门用于组织内的数据库系统,并使用Window NT登录。此函数返回当前用户的登录名:

CREATE FUNCTION dbo.UserName() RETURNS varchar(50)
AS
    BEGIN
    RETURN  (SELECT nt_username FROM master.dbo.sysprocesses WHERE spid = @@SPID)
    END

您可以在触发器中使用此功能。

答案 3 :(得分:1)

如果在连接字符串中将SSPI指定为Sql,我认为您提供了Windows凭据。

答案 4 :(得分:1)

我尝试使用Access,看看我是否能找到适合你的方法。我认为您可以为SQL表指定新的数据源,并选择Windows NT身份验证作为您的连接类型。

答案 5 :(得分:1)

当然:)

Access中应该有一个名为“外部数据”的部分(我正在运行新版本的Access,因此菜单选项可能会有所不同)。

表单中应该有一个指定ODBC连接的选项。

通过创建链接表,我可以选择链接到数据源。

然后我创建了一个Machine数据源。我从下拉列表中选择了SqlServer。然后,当我单击“下一步”时,系统会提示我要进行身份验证。

答案 6 :(得分:1)

CREATE TRIGGER testtrigger1
ON testdatatable
AFTER update
AS 
BEGIN
    INSERT INTO testtable (datecol,usercol1,usercol2) VALUES (getdate(),user_name(),suser_sname());
END
GO

答案 7 :(得分:0)

该应用有多少用户?是否有可能使用Windows集成身份验证进行SQL身份验证?

已更新:如果您可以为每个用户提供SQL登录(Windows集成),则可以使用SYSTEM_USER函数获取已登录的用户。

答案 8 :(得分:0)

应该是

select user name(),suser sname()

用下划线替换空格

答案 9 :(得分:0)

您需要使用集成安全性即可信连接进行连接,请参阅(http://www.connectionstrings.com/?carrier=sqlserver

答案 10 :(得分:0)

我的解决方案是不允许Access使用链接表修改数据。

我只会在Access中创建UI,并使用连接字符串中经过身份验证的Windows创建与服务器的ADO连接。将您的访问应用程序编译为dbe以保护VB代码。

我不会发出SQL语句,但我会调用存储过程来执行数据库中的更改,并在原子事务中创建审计日志条目。

UI(Access)不需要知道服务器上的内部工作。它需要做的就是使用您为此目的创建的存储过程来请求和更新/插入/删除。服务器应该处理工作。

使用在服务器中实现提示NOLOCK的视图使用ADO检索记录集,并将此数据缓存在Access中以进行本地显示。或者检索单个记录并仅锁定该行以进行编辑。

使用链接表,您的用户将互相锁定。

使用ADO连接,您可以在每个客户端上设置ODBC。

创建表以设置服务器状态。您的应用程序将在任何操作之前检查它。您可以使用它将服务器关闭到应用程序,以防您需要执行更改或维护。

Access是一个很棒的工具。但它应该只处理其本地数据,不允许弄乱珍贵的服务器。