1

我的客户使用 Microsoft Access 2010 已经有一段时间了,他们收到了一些安全审核要求。他们使用链接表方法连接到 Microsoft SQL Server 2012 Express。

要求规定必须记录针对数据的所有操作。(插入、更新、删除和选择语句)

对于 INSERT、UPDATE、DELETE 语句,我可以创建一个触发器来记录更改。

问题是围绕 SELECT 语句的审计。如果数据是只读的,我可以使用存储过程来记录查询。但是执行存储过程会使 Recordset 不可更新。

有谁知道如何应对这一挑战?

我对很多策略持开放态度......(通过 Web 服务连接访问 SQL,任何东西......)

需要注意的是,我的客户没有 3 万美元可用于 SQL Sever 企业版,因为他们是一家员工不到 10 人的小型企业。

4

3 回答 3

1

SELECT 语句是SQL Server 中数据库级审计操作组的一部分。(在该页面中搜索“数据库级审计操作”。)但该级别的审计需要 SQL Server Enterprise 版本。

理论上,您可以将所有访问限制为仅使用存储过程,而不管数据是否为只读。编写存储过程,首先将审计信息写入日志,然后执行其他需要完成的操作——SELECT、INSERT 等。

实际上,您可能无法做到这一点。这取决于访问您的数据库的应用程序。将所有访问限制为仅使用存储过程可能会破坏期望其他事情的应用程序。(如果您切换到仅存储过程,Ruby on Rails 应用程序将如何响应?)

使您的数据库无法使用的防弹审计系统不是很好;完全关闭数据库服务器更简单、更便宜。

于 2012-11-30T20:09:50.880 回答
0

You could upgrade to a SQL Server edition that supports SQL Server profiler. The other option is to get other tools to audit like sql audit for example.

于 2015-01-29T04:03:09.777 回答
0

您可以打开 JET showplan。这将记录 Access 使用的所有查询。

http://www.techrepublic.com/article/use-microsoft-jets-showplan-to-write-more-efficient-queries/?siu-container

正如我在评论中指出的那样,您确实在愚弄审计要求,除非每个表单都使用 where 子句打开,该子句将对该表单中数据的查看限制为 ONE 记录。如果您不这样做,那么打开到链接表的表单可能有 1000 条记录,并且用户按 ctrl-f 查找并跳转到一条记录意味着 SELECT 语句告诉您用户实际的内容为零看着。因此,虽然您可以打开显示计划,但审核概念不会告诉您用户实际查看的任何内容,除非更改应用程序设计以将表单限制为一条记录。公平地说,我 99% 的应用程序实际上确实通过 where 子句打开并限制主编辑表单到一个记录。

因此,虽然您可以按照上述技术明智地记录所有 SELECT 命令,但它并不是真正属于此类日志的精神,因为此类日志对于确定用户查看的实际记录没有任何用处。

于 2015-01-29T19:44:19.820 回答