无法更改 MS Access MSysObjects 表的权限

Posted

技术标签:

【中文标题】无法更改 MS Access MSysObjects 表的权限【英文标题】:Unable to change permissions on MS Access MSysObjects table 【发布时间】:2017-02-27 20:05:53 【问题描述】:

我在 Access 2013 的一个模块中运行此代码:

Sub grant()
    CurrentProject.Connection.Execute "GRANT SELECT ON MSysObjects TO Admin;"
End Sub

我知道它正在运行,因为我有一个 Debug.Print 打印出一个 hello world 设置并且有效,但是当我尝试对表运行查询时,我得到 CLI 没有读取访问权限错误。

很遗憾,我需要连接到这些表,因为我正试图从另一个应用程序运行传递 SQL。

有什么想法吗?我在运行查询后保存数据库,甚至打开/关闭它和我正在使用的其他应用程序。

谢谢!

【问题讨论】:

【参考方案1】:

您不能更改系统表的用户权限。这是设计使然。

您也不必这样做,因为您对此表具有读取权限。

编辑:

您可以轻松地从中读取 - 如下例所示:

SELECT DISTINCT 
    [Tens]+[Ones] AS Factor, 
    10*Abs([Deca].[Id] Mod 10) AS Tens, 
    Abs([Uno].[Id] Mod 10) AS Ones
FROM 
    MSysObjects AS Uno, 
    MSysObjects AS Deca;

【讨论】:

是的,我知道我不应该改变表,但我只是想从中选择(最终我想知道一个字段是否被索引)。这段代码是正确的代码吗/有可能吗? 我不确定 GRANT 在这里做了什么。您应该只需要一个 SELECT。请参阅我编辑的答案。 抱歉,我正在尝试通过 ODBC 连接到此数据库,并在 MSysObjects 表上运行显式传递查询,但来自其他应用程序的错误来自我收到的错误。 Access 中是否有某个地方可以运行该查询以确保可以访问该表?与您交谈后,我敢打赌是我的 ODBC 连接出了问题(没有传递正确的凭据或其他东西),但我想确定一下。 哦,忘了。很可能 ODBC 驱动程序排除了系统表,因为这些表是“不可见的”。在 Access 本身中,您必须设置一个标记才能使系统表可见,但我不相信您可以通过 ODBC 做到这一点。它与权限无关 - 标准用户是管理员。 是的,联系了一些比我更了解它的人,它最终成为了一个 ODBC 驱动程序位的事情。非常感谢 - 如果没有您的帮助,您可能不会猜到这一点。

以上是关于无法更改 MS Access MSysObjects 表的权限的主要内容,如果未能解决你的问题,请参考以下文章

MS Access -“自从您开始编辑此记录以来,该记录已被其他用户更改”

由于“SQL 语法”错误,无法插入 MS Access [关闭]

MS Access“更新后”事件:引发错误

每次从 MS Access 发生任何更改时,将数据从 MS Access 数据库传输到 Mysql 数据库[关闭]

更改 MS Access 元素的默认样式

更改查询时 MS Access 溢出