我构建了一个具有SQL Server后端的Access数据库。我有一个顽固且有点知识渊博的用户,他经常直接进入桌面。我试图阻止这种行为。
我遇到的问题是因为他是数据库的合法用户我不得不给他读取/写入SQL Server的权限,所以他可以像其他人一样使用数据库。但是,无论我如何在一天结束时编译或隐藏面板,他所要做的就是打开一个新的空白Access数据库,使用他的ODBC连接,使用链接表链接到SQL Server后端,以及他的读写操作访问允许他直接编辑表。
我是否有某种方式可以让用户只读或更好但是无法访问SQL Server表并且仍然具有正常的db功能? “正确”意味着用户可以进行记录更改,例如编辑评论等。类似网站的工作方式。站点本身具有对后端数据库的写访问权限,只允许用户在站点上使用GUI进行更改。
答案 0 :(得分:1)
只有重大的应用程序更改才能解决此问题。
您可以重新设计应用程序,仅使用存储过程进行数据访问。没有用户(至少不是讨厌的用户)对数据库中的任何表都有写权限。每个写操作都是通过存储过程完成的。
这是一种经过验证的安全数据库保护方法。但是,它现在使用较少,因为它需要额外的努力才能使它与OR-Mappers和其他RAD工具(如Access)一起使用。如果在Access前端中实现此方法,则必须手动实现对数据库的每个写入操作,从而失去了RAD的主要RAD优势。
为什么这个用户在表格中编辑数据有问题?
如果您的数据库具有一组使用约束和触发器实现的可靠验证规则,并且具有适当的审核以确定哪个用户更改了内容,那么这应该不是问题。如果他愿意,你只是让他这样做。
但是为什么用户会这样做?
如果任何用户直接使用后端表来读取和写入数据,则表明应用程序存在大量可用性问题。 解决您的前端应用程序中的可用性问题,问题将随着所有用户受益而消失!
PS:应用程序角色的概念可能是解决此问题的另一种方法,但不适用于Access。 Access会自行创建与数据库的新连接。无法激活这些连接的应用程序角色。
答案 1 :(得分:0)
我不得不给他读取/写入SQL Server的权限,以便他可以使用 db和其他人一样
你不能同时给他访问权限。
唯一的出路是与管理层讨论,要求制定正式规则并告诉用户遵守这些规则并采取行动。
答案 2 :(得分:0)
让您的IT部门卸载Access,安装Access Runtime并让他以这种方式使用您的应用程序。