2011-08-19 71 views
3

时,这是SQL Server 2005或更高版本,但我很想知道,如果SQL服务器以同样的方式2000点可以。考虑以下情况。解决权限使用SQL Server的Windows身份验证

两个SQL Server的Windows身份验证登录登录名为Windows组:

MyDomain\Group1 
MyDomain\Group2 

与映射到这些登录的两个用户的数据库:

USE MyDatabase 
CREATE USER [User1] FOR LOGIN [MyDomain\Group1] 
CREATE USER [User2] FOR LOGIN [MyDomain\Group2] 

用户1和用户被授予不相交数据库中的权限,例如:

GRANT SELECT ON Table1 TO User1 
DENY SELECT ON Table1 TO User2 
GRANT SELECT ON Table2 TO User2 
DENY SELECT ON Table2 TO User1 

客户端连接到SQL Ser使用属于MyDomain\Group1MyDomain\Group2的Windows身份。

客户端映射到哪个数据库用户?即SELECT USER_NAME()是否退回User1User2

客户端有什么权限?是否有确定客户端连接为User1或User2的定义的优先级?这在BOL中记录在哪里?

背景

这涉及目前由多个应用程序,每一个目前拥有自己的SQL Server登录访问的数据库,对数据库对象应用程序特定的权限。

我想切换到使用Windows身份验证来提高安全性,我宁愿使用Windows组而不是用户的灵活性(我不希望DBA必须管理所有个人用户的登录名)。

但是给定的用户可以使用多个应用程序(因此是多个Windows组映射到SQL登录的一个成员),因此在一个数据库用户的连接的映射歧义的潜力。

我GOOGLE搜索和联机丛书,并不能找到上含糊不清,例如如何解决(例如优先级规则)的明确信息。

任何提示和最佳做法是除了回答上述问题欢迎。

回答

1

这是一个有趣的问题。

我会假设你的客户应该在所有这些表没有访问,广告DENY权限优先于授予。在SQL Server中,DENY-overrides-GRANT原则有一个例外:当GRANT在列级完成时,即使整个表被拒绝访问,它也将允许访问,如MSDN states

编辑:要了解适用于注意到登录(服务器)是不一样的数据库的用户是很重要的。通过Windows组成员身份登录的用户将获得隐式创建的用户,并且需要对其应用权限。有关更多信息,另请参阅this blog article

+0

我纠正了第二个DENY。 “我认为它应该适用于组,而不是用户” - 我不明白你在说什么:GRANT/DENY需要数据库用户,而不是登录。我真正想知道哪个数据库用户是一个匹配两个登录名的客户端被映射到的。 – Joe

+0

是的,对不起,术语“用户”使我困惑,因为他们映射到(Windows)组。我的错。 – Lucero

+0

+1博客文章回答了我想要的大部分内容。但是仍然不清楚隐式创建的用户使用了哪些优先规则(如果有的话)。 – Joe

相关问题