0

我在 Microsoft Dynamics GP 中出现了一个问题,正在研究这是否是原因,但这可能是对 SQL Server 的访问问题。GP 将数据存储在 SQL Server 中,MS Access 用于访问表数据。生产数据库中的某些数据似乎丢失了。不幸的是,我不知道 Access 正在做什么,因为没有向我透露。一个简单的解决方案是告诉他们停止使用 Access 来验证数据是否仍然丢失,但在提出此建议之前,我想知道任何记录在案的问题。

因此,为了对正在发生的事情做出最好的猜测,当 Access 作为后端连接到 SQL Server 时会做什么?它会锁定桌子吗?必须做什么才能导致数据丢失或删除?如果访问是原因,应采取哪些步骤来解决它?

4

2 回答 2

3

您是否打算允许 Access 更改或删除数据?

如果没有,您是否考虑过设置一个用户 ID 供 Access 使用,以允许只读访问(没有双关语)?

在任何情况下,SQL Server 的最佳实践是确保用户帐户具有满足业务需求所需的最低访问权限。请不要给大家一个密码空白的sa账号。

编辑:

将 Access 想象为 SQL Server Management Studio 之类的工具,换句话说,它是一种交互式工具,可用于以几乎无限的方式查询和更改数据库,前提是您的帐户具有允许您执行此操作的权限。由于它是一个可以拉出表格的交互式环境,因此删除一行就像单击该行并按下删除键一样简单。同样,更改数据值就像单击该行和列并键入新值一样简单。

当然,删除某些东西就像意外按下删除键一样简单。

当您为用户提供这样一个工具和一个没有访问限制的帐户时,无论是出于意图、意外还是其他原因,数据最终都会被更改,这并不让我感到惊讶。

于 2009-05-22T18:50:40.183 回答
2

SQL Server 数据通常在 MSACCESS 中使用链接表访问,这些链接表是 ODBC/OLEDB 连接。虽然这项技术有些过时并且并非完全没有错误,但我想不出底层技术中可能导致这种情况的任何东西。

您的普通用户是否使用 ODBC 数据源或包含 SQL Server 数据库管理员 ID 和密码的连接字符串访问这些表(即不受限制的权限)?如果是这样,缺失的数据将是给定的。在打开的 MSACCESS 链接表中删除行就像在 Excel 中删除行一样简单。

Record locking in MSACCESS/SQL connections is typically optimistic (unless you change it). In the old days under SQL Server 2000 this meant that if two people were editing the same record at the same time, the person who saves last won (silently). Nowadays the last person saving is told that someone else has edited the record while they were making changes, and offers two options: abandon my changes, or overwrite the other person's changes.

In any case, providing read-only access to the tables should alleviate a lot of the heartburn.

于 2009-05-22T18:58:39.310 回答