Hello Stackoverflow专家
我决定在SQL Server 2012中遇到一个非常奇怪的问题,请求您的帮助。
有2个数据库 - DB1
和DB2
。定义了两个登录名 - login1
和login2
,两者都使用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,权限表 - 用户和登录都是相同的,它们就像是另一个具有不同名称的副本。
谷歌搜索我必须消除以下可能性:
有什么想法吗?
提前致谢
答案 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