某些用户无法在SQL Server 2012中访问包含来自不同数据库的表的视图 - 错误消息916

时间:2017-11-01 17:04:03

标签: sql-server database sql-server-2012

Hello Stackoverflow专家

我决定在SQL Server 2012中遇到一个非常奇怪的问题,请求您的帮助。

有2个数据库 - DB1DB2。定义了两个登录名 - login1login2,两者都使用Windows身份验证。它们的设置在所有可能的事项中是相同的 - 相同的角色(公共),相同的权限(仅限CONNECT和查看任何数据库) - 映射到DB1上的不同用户(用户1到login1,用户2到login2)

现在有趣的事情来了。 DB1上的视图定义为简单

SELECT * FROM [DB2].[TABLE1]

此视图具有为user1和user2定义的所有列的相同权限。 User1可以使用简单的SELECT语句查看数据,user2不能。两者都被SELECT标记为GRANT。 User2收到以下消息:

  

Msg 916,Level 14,State 1,Line 1
  服务器主体' User2'无法访问数据库' DB2'在当前的安全背景下

我浏览了所有可能的属性,权限,查询的sysusers,权限表 - 用户和登录都是相同的,它们就像是另一个具有不同名称的副本。

谷歌搜索我必须消除以下可能性:

  • 孤立用户(同时创建并正确分配了user1和user2)
  • 没有任何数据库是从任何地方迁移的,所以这绝不是一个所有权问题

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

如果用户1有权访问视图/表继承,但user2无法访问user1已有的BD1。也许,您应该手动授予访问权限user2以查看DB1中的视图/表格

因此对于user2可能是一个类似于以下的脚本

GRANT SELECT ON [dbo].[Table] TO [ReadOnly]

另一件需要考虑的事情是DENY会覆盖GRANT,所以如果你在用户2的视图上方的某个级别上有DENY,那么如果你在DB1上授予user2权限就不重要了,在这种情况下你应该使用REVOKE

看看stackoverflow中的以下链接 Permission required to view list of tables in Management Studio