如何阻止用户直接访问表?

How do you block users from accessing tables directly?

首先,我不是 MS Access 开发人员。但是我找到了一份新工作,必须进行一些 MS Access 开发。我将与另一位对此有经验的开发人员合作;至少比我多。

他向我展示的一件事是,用户将进入这个进入表单的 MS Access 应用程序,做他们在那里做的任何事情,然后退出表单应用程序以直接访问表数据库。 (Access 应用程序是 SQL Server 2005 数据库的前端。)由于最终用户可以直接访问 SQL 表,因此您可以想象他们会陷入什么样的恶作剧。 (Access 应用程序是由承包商编写的,但未完成该应用程序。)

所以我的问题是:我们如何防止最终用户离开 Access 应用程序直接与 SQL 表交互?我认为这是可能的,但正如我所说,我不是 Office 开发人员,所以我不知道如何完成,甚至不知道我会寻找什么样的东西。

Access 应用程序是用 MS Access 2007 编写的。

@罗德 一般来说,MS Access 提供的安全级别不是很令人印象深刻。但它为您提供了某种安全措施,防止新手用户访问不需要的信息。

寻找:

一些有用的 research/investment 会是。

  • 用于 MS 访问的自定义功能区创建器,这将帮助您提供自己的 buttons/ribbons(我使用了功能区创建器)
  • 提供 membership/user 帐户。由于您已经拥有专用的 SQL 服务器,因此您可以将用户凭据保存在后端 table 中,以隐藏前端。通过写入 stored procedures/functions.
  • 检查用户是否具有访问权限
  • 编写函数以收集错误、活动并上传到日志 table 并监视活动。使用网络服务 + MSXML2.XMLHTTP + async 完成此任务。}

创建一个 UI 供用户浏览您的应用程序。最基本的只是一个表单,该表单具有用于打开用户需要在您的应用程序中访问的所有其他表单的按钮。

然后使用功能区导航至 "File" -> "Options" -> "Current Database"。 Select 将上述步骤中的表格作为应用程序的 "Display form",然后取消选中以下所有选项 "Use Access Special Keys"、"Display Navigation Pane"、"Allow Full Menus"、"Allow Default Shortcut Menus" .

这将启动您的 Access 应用程序并显示所选表单,而无需任何标准 UI 用于处理表或应用程序中其他对象的设计。

但请注意,这只是为了防止普通用户通过更改他们不应该更改的内容而犯下意外错误。这不会阻止恶意和知识渊博的攻击者。

如果您想打开您的应用程序进行开发,请在打开文件时按住 SHIFT 键。

Access 之外的另一个选项是拒绝具有 read/write 访问您的 SQL table 删除权限的 AD 组。我能够使用 Access 2013 和 Microsoft SQL Server Management Studio 2012 成功完成此操作。This post discusses the command.

DENY DELETE ON tablename to [DOMAIN\groupname];

AD组用户可以通过我们创建的UI修改和删除数据,但是无法打开table、select一行,点击删除键。他们收到以下错误:"ODBC--delete on a linked table 'tablename' failed....The DELETE permission was denied on the object ...."