可更新查询所需的最低权限 (Access Project)

Posted

技术标签:

【中文标题】可更新查询所需的最低权限 (Access Project)【英文标题】:Minimum permissions required for an updatable query (Access Project) 【发布时间】:2009-06-25 09:55:56 【问题描述】:

在带有 SQL 后端的 Access 项目 (ADP) 中,Access 需要什么最低权限才能更新从绑定到表单的视图返回的记录,同时防止基础表上的直接 SELECT ?例如:

表:Table1 列:ID, Column1, Column2, Column3, Column4

查看:View1

SELECT ID, Column1, Column2, Column3 FROM Table1 WHERE Column1 = 'Something'

作为数据库所有者,或角色db_owner(或角色db_datareaderdb_datawriter),当绑定到视图时,可以通过Access 更新记录。但是,如果用户不是其中的成员,则无法通过 Access 更新记录。我将SELECTUPDATE 授予View1 并拒绝SELECT 授予Table1 并允许UPDATE 授予Table1(以防在视图上使用UPDATE 不起作用)。我还拒绝 UPDATEColumn1,因为我不希望用户更新该列。

如果我使用这些权限集连接到 SQL 数据库(使用 SQL Server Management Studio),我可以更新视图中的记录,但在 Access 中我不能。为什么是这样?我不知道 Access 发出什么查询来更新记录以确定它失败的原因。

编辑:

仍然没有找到一种方法来找出 Access 需要在没有 SELECT 的情况下执行 UPDATE 的权限。SQL Profiler 没有显示“记录集不可更新”消息的任何明显原因。

【问题讨论】:

我从未使用过 ADP,但我记得对它们的许多抱怨之一是,在某些情况下,ADO 会绕过您的视图(以及其中的安全设置)并尝试更新底层直接表。我认为确切的情况与您描述的情况不同,但可能值得研究。 【参考方案1】:

不确定 Access 是否可以更新它无法选择的内容。

您可以将Sql Profiler 附加到服务器以查看 Access 正在运行哪些查询。

【讨论】:

它正在检索数据,只是通过视图代替。即使在 Table1 上使用 DENY SELECT,您仍然可以在 Access 中看到数据,只是不能更新它。甚至 Table1 上的 GRANT SELECT 也不能使其可更新。 试用过 Sql Profiler,但不知道如何将其限制为仅在特定数据库(而不是所有数据库)上运行的查询 在跟踪属性 > 事件选择选项卡下 > 选择显示所有列。现在在列过滤器下,您应该会看到数据库名称。输入 Like 部分的数据库名称,您应该只看到该数据库的跟踪。 ***.com/questions/272730/…

以上是关于可更新查询所需的最低权限 (Access Project)的主要内容,如果未能解决你的问题,请参考以下文章

Sitecore 登录所需的最低角色和访问权限

访问 Redshift External 表所需的最低权限

创建命名管道 (WCF) 所需的最低操作系统权限

将数据流式传输到 BQ - 服务帐户所需的理想最低权限

缺少 FusedLocationProviderClient.getLastLocation 所需的权限:android.permission.ACCESS_COARSE_LOCATION

您如何计算每月达到 100 次销售目标所需的最低销售额?