如何授予 SQL Server 读取 SSL 密钥的权限?

Jon*_*nah 1 sql-server windows-services

我最近创建了一个自签名证书并在 SQL Server 2014 中打开了加密:

自签名证书

问题是现在 SQL Server 服务无法启动:

启动错误

2010 年的这篇文章将该问题标识为权限问题:SQL Server 服务没有读取 SSL 证书私钥的必要权限。

问题是我被困在文章中提出的解决方案的第4步:

卡在第 4 步

当我打开文章中显示的窗口时,没有与建议格式匹配的组或用户名。

是否有另一种方法可以确定运行 SQL Server 服务的帐户,以便我可以授予它读取 SSL 证书的权限?

一个完全不同的解决方案也是受欢迎的。

Ole*_*leg 7

如果您指定证书,SQL Server 应将其用于 TLS,则 SQL Server Windows 服务必须读取该证书和私钥(文件夹中的文件%ProgramData%\Microsoft\Crypto\RSA\MachineKeys),该证书对应于该证书。问题是:SQL Server 配置管理器不舒服,它不能完成所有必需的工作

因此,首先应该本地化 SQL Server 使用的帐户。一要启动services.msc,找到SQL Server服务的帐号。它通常是一个内置帐户,例如Local SystemNetwork Service本地或域帐户.\SQLServerDOMAIN\SQLServerAccountNT Service\NT Service\MSSQL$SQL2012如下图所示的服务帐户:

在此处输入图片说明

要授予帐户私钥的权限,可以使用 mmc 的证书管理单元。可以开始mms.exe,在“文件”菜单中选择“添加/删除管理单元”,选择“证书”管理单元,然后选择本地计算机的“计算机帐户”。然后应该选择个人存储的 SSL 证书,然后使用上下文菜单“管理私钥...”。

在此处输入图片说明

并添加像NT Service\NT Service\MSSQL$SQL2012上面找到的帐户,并在私钥上为帐户设置“读取”权限:

在此处输入图片说明

如果您想与域内的 SQL 服务器建立连接(客户端和服务器都必须属于同一个 Active Directory 或通过信任连接的目录),那么应该为 SQL 服务器创建 SPN。如果我正确理解您的要求,您希望允许通过 HTTPS删除与 SQL Server 的连接。必须激活混合安全才能通过 SQL Server 身份验证连接到服务器:

在此处输入图片说明

创建 SQL 登录后,将上述所有内容更改并重新启动 SQL Server 服务,将能够与 SQL 服务器建立 TLS(加密)连接。如果之前尝试通过 Windows 帐户连接而不创建 SPN,则会出现错误:

已成功与服务器建立连接,但随后在登录过程中出现错误。(提供程序:SSL 提供程序,错误:0 - 目标主体名称不正确。)(Microsoft SQL Server,错误:-2146893022)

目标主体名称不正确

在此处输入图片说明

如果忘记将 Windows 身份验证更改为混合身份验证 (),则会出现类似错误

用户“OlegKi”登录失败。(Microsoft SQL Server,错误:18456)

在此处输入图片说明

如果以上所有步骤都完成了,例如可以使用 SQL Management Studio 建立 TLS 连接,但仍然需要选择一些选项:

在此处输入图片说明

一应该检查“加密连接”

在此处输入图片说明

并设置额外的连接属性 TrustServerCertificate=true

通常Encrypt=true;TrustServerCertificate=true;用作应用程序中连接字符串的一部分,用于建立与 SQL 服务器的连接。我们Encrypt=true通过上面描述的“加密连接”复选框设置属性。有关属性含义和选项不同组合的更多详细信息,请参阅 MSDN 文章的“启用加密”部分。

如果执行上述所有步骤并在不设置TrustServerCertificate=true属性的情况下检查“加密连接”,则会出现错误:

已成功与服务器建立连接,但随后在登录过程中出现错误。(提供程序:SSL 提供程序,错误:0 - 目标主体名称不正确。)(Microsoft SQL Server,错误:-2146893022)

目标主体名称不正确

在此处输入图片说明

我在上面已经在另一种情况下(与 Windows 帐户的连接)进行了描述。

我描述了以上所有步骤,因为配置到服务器的 TLS 连接真的不是那么容易,并且可能会出现奇怪的错误,直接描述没有直接提示如何解决问题。