2016-04-25 213 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