【问题标题】:Security Audit (CRUD) - Microsoft Access安全审计 (CRUD) - Microsoft Access
【发布时间】:2012-11-19 01:45:57
【问题描述】:

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

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

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

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

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

我对很多策略持开放态度...(通过 Web 服务将 Access 连接到 SQL 等等...)

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

【问题讨论】:

  • 是/否...我需要有非常好的论据才能切换到不同的 RDBMS。可以肯定的一件事是我被锁定在 Microsoft Access 中......在我加入之前,他们在其中花费了很多时间进行开发。
  • 选择命令的跟踪似乎很糟糕。绑定到表的访问表单允许使用 SQL 分析器——甚至是快速版本。现在的问题是您加载了 500 条记录,然后用户按 ctrl-f 来查找一行。此类 ctrl-f 命令不会生成或导致将任何 SQL 发送到服务器。没有什么不同,然后下载一个网页,用户点击 ctrl-f。跟踪 SELECT 几乎不会告诉您用户实际查看的内容,除非您的所有表单在打开时都通过“where”子句限制在一条记录中。如果所有表单都加载到一个记录中,则可以记录此类选择语句。

标签: sql-server security ms-access vba audit


【解决方案1】:

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

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

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

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

【讨论】:

  • 主要问题是我使用的是 Microsoft Access。如果我正在开发一个 .NET Web 应用程序,我会信任该 Web 应用程序并让它负责创建审计记录。
  • Microsoft Access 应该不是问题。审核和权限应该在后端 dbms (SQL Server) 中,而不是在应用程序代码中。 DBA(通常还有其他人)通常可以直接处理应用程序代码。
  • 我同意你的看法...我怀疑我可以在 Access 中实施这样的审计控制...据我所知,到 SP 的链接表(它将创建审计跟踪)使在 Access 中只读表。我相信我唯一的选择是创建各种 C/R/U/D 存储过程并通过 VBA 调用它们。我对 .NET Web App 的意思是:由于我完全信任 Web App,我可以依靠它调用 SP 来获取数据并调用常规 INS/UPD/DEL,这将有一个触发器来记录更改. (或者干脆让 Web App 记录审计跟踪,因为我可以完全信任该应用程序)?
【解决方案2】:

您可以升级到支持 SQL Server Profiler 的 SQL Server 版本。 另一种选择是使用其他工具进行审计,例如 sql 审计。

【讨论】:

    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-12
      • 1970-01-01
      • 2015-10-08
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      相关资源
      最近更新 更多