如何跟踪在Microsoft Access中打开表的用户

问题描述

我正在尝试在Microsoft Access中进行审核跟踪,并且我需要一种跟踪用户何时打开表而不是窗体的方法。有没有办法在每次打开表时运行函数

解决方法

不幸的是,在MS Access数据库中打开表或查询时不会触发任何事件。如果确实需要此功能,那么我可以想到两个选项,两个选项都涉及隐藏或限制对表的直接访问:

  1. 构建一个仪表板表单,其中包含一个用于打开每个表的命令按钮,并使用按钮的{{1}}事件来执行审计过程。您将能够审核每个表的打开,但不能关闭。使用数据库表触发器进行数据更新审核。

  2. 创建所有表的数据表视图表单,并将访问这些表单的权限授予用户而不是表。您将能够使用所有受支持的表单事件来执行审核,例如打开,关闭,数据更新。

您可以将两者结合起来实现目标。

,

不幸的是,这必须在UI或应用程序级别而不是数据引擎级别完成。 自2010年以来的访问确实具有可以在引擎级别(存储过程)运行的表事件和过程代码。这些表触发器和过程代码独立于Access和VBA代码运行。实际上,如果.net或外部应用程序(非访问权限)甚至使用ODBC更新Access表,那么这些表触发器和存储过程代码都将运行。

因此,Access数据引擎(ACE)中的这些功能将允许创建某种审核跟踪和日志记录系统。

但是,谁将打开一张桌子?不,该功能甚至在SQL Server中都不可用,并且大多数数据引擎都没有此功能(跟踪功能除外,但这些功能用于测试和调试,如果进行此类“日志记录”,则会导致速度显着降低”。实际上,ACE也具有所谓的show-plan。这将显示ACE数据引擎对每个查询使用的查询计划。但是,再次指出,这种日志记录仅用于调试,并非用于适合跟踪打开的表的“行为”。

但是,与SQL Server一样,Access数据引擎确实具有表事件触发器,但是它们仅运行用于更新,插入,删除。

即使对于SQL Server,您也仅限于此类表事件。公平地说,SQL Server也具有用于“ DML”操作的事件(ACE没有)。因此,删除表甚至进行模式修改都可能引发事件,而Access ACE引擎则不能。

总而言之? 即使使用SQL Server,要跟踪/记录谁打开了什么表?您非常需要在UI /应用程序级别而不是数据引擎级别执行此操作。

如果Access应用程序构建良好,那么用户将永远不会直接打开表-这对于任何编写良好的程序都是如此-您永远不会在Access中构建应用程序的那一刻立即直接打开/使用表,而不是只是编辑并查看一些表格,就像说Excel一样。

因此,您将必须在加载表单中附加一些代码。这样做很普遍,例如,在一些应用程序中,我们在表单上有一个“编辑”按钮。可以查看该表单,但是要进行编辑,必须先解锁。当您单击解锁时,将记录该事件。结果,我们可以看到编辑该记录的所有用户(人员)的漂亮列表。但是,我们不会“仅”记录打开并查看显示表中数据的表单的行为。

但是,当然可以记录和跟踪此类操作,但是如上所述,这将发生在应用程序级别,而不是数据引擎级别。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...