无法更改 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 [关闭]