Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 如何跟踪在Microsoft Access中打开表的用户_Vba_Ms Access_Audit - Fatal编程技术网

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

Vba 如何跟踪在Microsoft Access中打开表的用户,vba,ms-access,audit,Vba,Ms Access,Audit,我正在尝试在MicrosoftAccess中进行审计跟踪,我需要一种跟踪用户何时打开表而不是表单的方法。是否有办法在每次打开表时运行函数?不幸的是,在MS Access数据库中打开表或查询时不会触发任何事件。如果您确实需要此功能,我可以考虑两个选项,都涉及隐藏或限制对表的直接访问: 构建一个仪表板表单,使用命令按钮打开每个表,并使用按钮的单击事件执行审核过程。您可以审核每个表的开始,但不能审核结束。使用数据库表触发器对数据更新进行审核 创建所有表的数据表视图表单,并将这些表单的访问权授予用户,

我正在尝试在MicrosoftAccess中进行审计跟踪,我需要一种跟踪用户何时打开表而不是表单的方法。是否有办法在每次打开表时运行函数?

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

  • 构建一个仪表板表单,使用命令按钮打开每个表,并使用按钮的
    单击事件执行审核过程。您可以审核每个表的开始,但不能审核结束。使用数据库表触发器对数据更新进行审核

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


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

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

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

    然而,究竟是谁打开了一张桌子?不,该功能甚至在SQL server中都不可用,而且大多数数据引擎都不具备该功能(跟踪功能除外,但这些功能用于测试和调试,如果出现此类“日志记录”,则会导致显著的速度减慢)事实上,ACE也有所谓的显示计划。这将显示ACE数据引擎为每个查询使用的查询计划。但是,如上所述,这种日志记录用于调试,不适合跟踪打开的表的“动作”

    但是,与SQL server一样,Access数据引擎也有表事件触发器,但它们仅用于更新、插入和删除

    即使使用SQL server,也仅限于此类表事件。公平地说,SQL server也有用于“DML”操作的事件(ACE没有)。因此,删除表,甚至架构修改都可能引发事件,Access ACE引擎无法

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

    如果Access应用程序构建良好,那么用户无论如何都不会直接打开表——这对于任何编写良好的程序来说都是如此——在Access中构建应用程序的那一刻,您永远不会直接打开/使用表,而不是像在Excel中那样编辑和查看某些表

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


    但是,当然可以记录和跟踪这些操作,但正如所指出的,这将发生在应用程序级别,而不是数据引擎级别。

    我认为没有。如果您需要这种审核,您肯定不应该让用户直接打开表。@Andre不允许用户访问不是一般规则吗对于表/查询,仅表单/报表?由于存在一些缺点(例如备份),在Markan,您不应该使用accdb文件作为后端。例如,使用SQL Server,您几乎可以审核所有内容。自access 2010以来,数据库引擎中有表触发器和存储过程。但是,这些触发器仅在更新/插入时触发,而不仅仅是在打开表时触发。如前所述,跟踪“just”打开一个表的动作相当困难。事实上,我认为你甚至不能用sql server做到这一点。@ComputerVersteher-你如何用sql server跟踪刚刚打开的表?(我不知道sql server中存在这一功能)。对于更新、插入等?您当然可以这样做-即使在表触发器级别的Access中,但不仅仅是打开或使用表的行为。这必须在代码/UI级别完成,而不是在数据库引擎级别。而且这一建议不仅限于Access,而且对于大多数(如果不是所有现代数据引擎的话)来说都是一个问题。我想是这样的e可以打开跟踪,但这对服务器负载来说太高了。