【问题标题】:Unable to change permissions on MS Access MSysObjects table无法更改 MS Access MSysObjects 表的权限
【发布时间】: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。

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

谢谢!

【问题讨论】:

    标签: sql ms-access-2013


    【解决方案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 驱动程序位的事情。非常感谢 - 如果没有您的帮助,您可能不会猜到这一点。
    猜你喜欢
    • 2010-09-29
    • 2010-12-28
    • 2013-11-27
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 2016-11-04
    • 2013-06-19
    • 2012-03-10
    相关资源
    最近更新 更多