You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

低权限SQL认证用户执行object_id返回NULL,需确认所需权限

解决低权限用户执行object_id()返回NULL的问题

这个问题我之前帮不少人排查过,本质是SQL Server的权限隐藏机制在起作用:当用户没有足够权限访问某个对象时,SQL Server会直接对该用户“隐藏”这个对象的存在,所以执行SELECT object_id('MySchemaName.MyTableName')会返回NULL;而拥有sysadmin角色的用户(比如sa)不受这个限制,能看到所有对象的元数据。

要解决这个问题,你只需要给低权限用户授予以下权限之一即可:

  • 针对特定表的VIEW DEFINITION权限:这是最精细的权限,只允许用户查看该表的元数据(包括获取object_id),不会赋予数据读取权限

    GRANT VIEW DEFINITION ON MySchemaName.MyTableName TO [你的低权限账户名];
    
  • 针对整个架构的VIEW DEFINITION权限:如果需要用户能查看该架构下所有对象的元数据,可以授予架构级权限

    GRANT VIEW DEFINITION ON SCHEMA::MySchemaName TO [你的低权限账户名];
    
  • 针对表的SELECT权限:如果用户本身需要读取该表的数据,授予SELECT权限后也能自动获取到object_id(因为SELECT权限隐含了查看对象元数据的权限)

    GRANT SELECT ON MySchemaName.MyTableName TO [你的低权限账户名];
    

执行完对应的授权语句后,低权限用户再执行SELECT object_id('MySchemaName.MyTableName')就能得到正确的对象ID了。

内容的提问来源于stack exchange,提问作者granadaCoder

火山引擎 最新活动