将 Windows AD 组注册为 SQL Server 登录名

将 Windows AD 组注册为 SQL Server 登录名

我的 SQL Server 数据库通过 AD 组获得访问权限。网络管理员更改了组名,但 SQL Server 仍然显示旧名称。

我如何才能知道新的 AD 组名称是什么?此外,我如何更新以便 SQL Server 反映新名称?

答案1

原因是,当组存储在 SQL Server 实例中时,SQL Server 仅使用 Active Directory 组的初始名称。在后台,SQL Server 实际上存储了 Windows 身份验证的 Active Directory 组的 SID。在 Active Directory 级别对组名称的任何更改都不会反映在 SQL Server 实例中,因为它与身份验证实际上无关,因为 SQL Server 实例使用了存储的 SID。

将 Windows AD 组注册为 SQL Server 登录名

CREATE LOGIN [DOMAIN\OLD_NAME] FROM WINDOWS WITH DEFAULT_DATABASE=[master]
GO

查询 SQL Server 实例 (AD) 组

可以使用以下方法查询在 SQL Server 实例上充当“SQL Server 登录名”的已注册 Windows 组:

SELECT  ssp.name, 
        ssp.sid, 
        ssp.type, 
        ssp.type_desc  
FROM    sys.server_principals AS ssp 
WHERE   ssp.type = 'G'
GO

该语句将返回如下内容:

+-----------------+------------------------------------------------------------+------+---------------+
|      name       |                            sid                             | type |   type_desc   |
+-----------------+------------------------------------------------------------+------+---------------+
| DOMAIN\OLD_NAME | 0x010500000000000515000000EEEEEEEEEEEEEEEEEEEEEEEFFFFF0000 | G    | WINDOWS_GROUP |
+-----------------+------------------------------------------------------------+------+---------------+

更正 SQL Server 登录名

可以使用以下语句将名称更改为正确的名称:

ALTER LOGIN [DOMAIN\OLD_NAME] WITH NAME = [DOMAIN\NEW_NAME]
GO

名称 :正在重命名的登录的新名称。如果这是 Windows 登录,则新名称对应的 Windows 主体的 SID 必须与 SQL Server 中与登录关联的 SID 匹配。

参考: 更改登录 (Transact-SQL)(微软 | SQL 文档)

答案2

这是 SQL 服务器的烦恼之一。告诉您的 AD 管理员您在 SQL 中使用 X 安全组,并要求他们告诉您它的新名称是什么。他们更改了它 - 他们应该知道。如果他们不知道,那就向你的老板大发雷霆。他们应该有某种工作票来进行这样的更改。

但是,这指出了 SQL Server 的最佳实践。您应该做的是确保创建 AD 组具体来说用于数据库访问。

例如,如果您有具有特定数据库的 DBO、Writer 和 Reader 角色的用户,那么您将拥有名称类似于 SQL-[DBName]-DBO、SQL-[DBName]-Writer、SQL-[DBName]-Reader 的 AD 组 - 它应该包括实际数据库名称,以便您知道该组链接到哪个数据库。显然还有分配给它的角色。

理想情况下,DBA 是唯一有权批准更改组名或创建/删除特定组的人。

然后,如果你有现有的用户组,如团队或部门,这些组可以嵌套里面DB 访问组。这样,当某个老板决定更改部门名称时,可以命名任何用户组,但 DB 访问组完全不受影响。

事实上,这就是我现在建议你做的。要求你的 AD 管理员创建一个或多个与受影响数据库中的用户角色相匹配的组。完成后,他们应该将重命名的组“嵌套”到适当的新 DB 组中(例如“读者”,如果他们有这个角色的话)。新的专用数据库组准备就绪后,将它们添加到 SQL Management Studio 中的数据库安全选项卡下(我假设它不是服务器范围的权限,但那里的原则也是一样的),并分配适当的角色。

您可以直接用新名称重新添加原始组并分配角色(并删除旧角色),但谁知道什么时候会再次发生这种情况?现在创建这些特定于数据库的组将大大减少这些问题的发生。此外,如果他们想授予其他人/团队对同一数据库的相同访问权限,这可以减少您的工作量。

相关内容