Sql server 使用SQL Server Windows身份验证时解析权限

Sql server 使用SQL Server Windows身份验证时解析权限,sql-server,Sql Server,这是针对SQLServer2005或更高版本的,但我想知道SQLServer2000是否以同样的方式工作。考虑下面的情况。 两个登录名为Windows组的SQL Server Windows身份验证登录名: MyDomain\Group1 MyDomain\Group2 具有两个映射到以下登录名的用户的数据库: USE MyDatabase CREATE USER [User1] FOR LOGIN [MyDomain\Group1] CREATE USER [User2] FOR LOGIN

这是针对SQLServer2005或更高版本的,但我想知道SQLServer2000是否以同样的方式工作。考虑下面的情况。

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

MyDomain\Group1
MyDomain\Group2
具有两个映射到以下登录名的用户的数据库:

USE MyDatabase
CREATE USER [User1] FOR LOGIN [MyDomain\Group1]
CREATE USER [User2] FOR LOGIN [MyDomain\Group2]
User1和User2在数据库中被授予不相交的权限,例如:

GRANT SELECT ON Table1 TO User1
DENY SELECT ON Table1 TO User2
GRANT SELECT ON Table2 TO User2
DENY SELECT ON Table2 TO User1
客户端使用Windows标识连接到SQL Server,该标识是两个组的成员
MyDomain\Group1
MyDomain\Group2

客户端映射到哪个数据库用户?例如,
选择用户名()
是否返回
User1
User2

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

背景

这涉及当前由多个应用程序访问的数据库,每个应用程序当前都有自己的SQL Server登录,并且对数据库对象具有特定于应用程序的权限

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

但是,给定用户可能会使用多个应用程序(因此是映射到SQL登录的多个Windows组的成员),因此在映射到数据库用户的连接时可能会出现歧义

我在网上搜索过很多书,但找不到关于如何解决这种歧义的明确信息(例如优先规则)


除了回答上述问题外,欢迎提供任何提示和最佳实践。

这是一个有趣的问题

我假设您的客户机根本没有访问这些表的权限,ad DENY优先于GRANT。但是,在SQL Server中,DENY overrides GRANT原则有一个例外:当在列级别执行授权时,即使表作为一个整体被拒绝访问,它也将允许访问,如下所示


编辑:要了解应用的内容,请注意(服务器)的登录与数据库用户的登录不同,这一点很重要。通过Windows组成员身份登录的用户将获得隐式创建的用户,并且需要对该用户应用权限。有关更多信息,请参见。

我已更正了第二个拒绝。“我认为它应该适用于组,而不是用户”-我不明白你在这里说什么:GRANT/DENY需要数据库用户,而不是登录。我真正想知道的是,匹配两个登录名的客户端映射到哪个数据库用户。是的,对不起,术语“用户”让我困惑,因为它们确实映射到(Windows)组。这篇博客文章回答了我大部分的问题。但是对于隐式创建的用户(如果有的话)使用的优先规则仍然不清楚。