如何在SQL Server中将Active Directory用户组添加为登录名

Jib*_*oor 104 sql-server security authentication sql-server-2008

我有一个.net应用程序,它使用Windows身份验证连接到SQL Server.

我们无法在应用程序中使用SQL Server身份验证.我们的项目有很多Active Directory用户.因此,我们必须为SQL Server中的每个Active Directory用户创建单独的登录帐户,而不是为每个AD用户创建单独的登录帐户,有没有办法在SQL Server中使用Active Directory用户组?

mar*_*c_s 152

在SQL Server Management Studio中,转到Object Explorer > (your server) > Security > Logins并右键单击New Login:

在此输入图像描述

然后在弹出的对话框中,选择要查看的对象类型(Groups默认情况下禁用 - 检查它!)并选择要查找对象的位置(例如使用Entire Directory),然后找到您的AD组.

在此输入图像描述

您现在有一个常规的SQL Server登录 - 就像为单个AD用户创建一个SQL Server一样.为新登录名提供所需数据库的权限,然后离开!

该AD组的任何成员现在都可以登录到SQL Server并使用您的数据库.

  • 这对我不起作用.我有一个Windows组"DataAccess",其中"UserX"是其成员.我为DataAccess组创建了一个登录名,并将登录的用户映射设置为对数据库具有public,datareader和datawriter访问权限.用户无法登录.如果我专门添加用户,并分配完全相同的映射权限,则他可以登录.当我单击组的Securables> Effective Permissions时,它会显示"无法作为服务器主体执行因为主体'GroupName'没有退出,这种类型的委托人不能被模仿,或者你没有权限." (6认同)
  • 感谢您通过带注释的屏幕截图获得非常明确的答案!我希望所有答案都是这样的...... (2认同)
  • @Tim:用户的名字 - 它仍然是登录的用户 - 他只是没有直接获得许可 - 作为用户 - 而是通过成为具有权限的组的成员 (2认同)

Tom*_*bes 21

您可以使用T-SQL:

use master
GO
CREATE LOGIN [NT AUTHORITY\LOCALSERVICE] FROM WINDOWS WITH
DEFAULT_DATABASE=yourDbName
GO
CREATE LOGIN [NT AUTHORITY\NETWORKSERVICE] FROM WINDOWS WITH
DEFAULT_DATABASE=yourDbName
Run Code Online (Sandbox Code Playgroud)

我使用它作为从生产服务器到测试机器的恢复的一部分:

USE master
GO
ALTER DATABASE yourDbName SET OFFLINE WITH ROLLBACK IMMEDIATE
RESTORE DATABASE yourDbName FROM DISK = 'd:\DropBox\backup\myDB.bak'
ALTER DATABASE yourDbName SET ONLINE
GO
CREATE LOGIN [NT AUTHORITY\LOCALSERVICE] FROM WINDOWS WITH
DEFAULT_DATABASE=yourDbName
GO
CREATE LOGIN [NT AUTHORITY\NETWORKSERVICE] FROM WINDOWS WITH
DEFAULT_DATABASE=yourDbName
GO
Run Code Online (Sandbox Code Playgroud)

在德语或法语Windows的情况下,您将需要使用本地化的服务名称,请参阅如何在非英语Windows上为服务帐户创建SQL Server登录?