2016-04-25 202 views
1

我最近建立了一个自签名的证书和SQL Server 2014打开加密的:如何授予SQL Server读取我的SSL密钥的权限?

self signed cert

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

startup error

This article从2010年将问题标识为权限问题:SQL Server服务没有必要的权限来读取SSL证书的私钥。

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

stuck on step 4

没有组或用户名称相匹配的拟议格式,当我打开所示的窗口文章。

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

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

+0

您用于SQL Server Windows服务的帐户?我想你有问题可以在'c:\ ProgramData \ Microsoft \ Crypto \ RSA \ MachineKeys'中访问证书的私钥。您可以打开MMC,添加证书管理单元,选择计算机,在个人中查找SQL Server证书,选择证书并选择“管理私钥”上下文菜单。之后,您应该授予您用于运行SQL Server的帐户的权限。 – Oleg

+0

我忘记提及该帐户的读取权限应该足够。 – Oleg

+0

如何查找我用于SQL Server服务的帐户? – Jonah

回答

1

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

因此,首先应该本地化SQL Server使用的帐户。应该启动services.msc,找到SQL Server服务的帐户。一般来说,这是一个内置的帐户样Local SystemNetwork Service本地或域帐户一样.\SQLServerDOMAIN\SQLServerAccount或类似NT Service\NT Service\MSSQL$SQL2012下面的图片的服务帐户:

enter image description here

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

enter image description here

,并添加帐户像NT Service\NT Service\MSSQL$SQL2012,上述发现,并设置“读取”权限的私钥对账:

enter image description here

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

enter image description here

创建SQL登录后,使所有上述改变并重新启动SQL Server服务将能够建立TLS(加密)连接到SQL服务器。在尝试通过Windows帐户连接,而无需创建SPN以前一个得到错误的情况下:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The target principal name is incorrect.) (Microsoft SQL Server, Error: -2146893022)

The target principal name is incorrect

enter image description here

如果一个忘记更改Windows身份验证混合身份验证(),那么一个会得到错误,如

Login failed for user 'OlegKi'. (Microsoft SQL Server, Error: 18456)

enter image description here

如果做一个所有上述步骤可以建立TLS连接到ction使用SQL Management Studio中的例子,但人们仍然不得不选择一些选项:

enter image description here

每个人都应该检查 “加密连接”

enter image description here

,并设置附加的连接属性TrustServerCertificate=true

通常一个使用Encrypt=true;TrustServerCertificate=true;作为建立连接的应用程序中连接字符串的一部分离子到SQL服务器。我们通过上述的“加密连接”复选框设置Encrypt=true属性。有关属性的含义和选项的不同组合,可以在the MSDN article的“启用加密”部分中阅读。

如果一个人做所有上述步骤,并选中“加密连接”没有设定TrustServerCertificate=true属性,则一个将得到错误:

A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - The target principal name is incorrect.) (Microsoft SQL Server, Error: -2146893022)

The target principal name is incorrect

enter image description here

,我已经在一个小的另一种情况如上所述(与Windows帐户连接)。

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

+0

令人惊叹的答案!希望我可以upvote 10倍。我明天会试一试。 – Jonah

+0

@Jonah:不客气!请告诉我最终结果。我也更新了我以前的答案。我希望你也可以使用**原始SSL证书**。自签证书的问题是信任。必须在所有客户端**上添加它作为受信任的根证书。因为那个人不会在任何真实场景中使用这种方式。 – Oleg

相关问题