我正在研究如何加密Web服務器上選定的用戶數據字段,並希望有關如何實現最佳結果的建議。舉一個例子,說一個用戶輸入他/她名字,姓,電子郵件和社會安全號碼;並且:加密數據在SQL Server或C#
- 管理員需要能夠查看此信息。在服務器上
- 進程需要使用這些信息
...但如果數據庫(或備份)被盜,則信息被加密和無用的。
我想一種方法是生成一個私鑰+公鑰,將其存儲到Windows證書存儲中,將其標記爲「不可導出」(保留當然備份),然後在應用層中將其用於根據需要加密/解密字段。
我爲此使用SQL Server 2016和.NET 4.6,但也有其他依賴項,例如我想支持的Reporting Services。 - 也許是「SQL Server 2016 Always Encrypted」要走的路嗎?你有什麼實際經驗可以分享使用它嗎?
我想如果入侵者獲得服務器的管理控制權(Windows 2016 IIS + SQL Server組合),那麼沒有太多可以完成的事情。或者是?
編輯:我決定去與始終處於加密內置到SQL Server 2016這是我最後生成的主密鑰,我則在本地計算機證書存儲區安裝,然後設置爲一列主鍵入SQL Server(使用簡單的SSMS右鍵單擊DB> Security> Always Encrypted Keys> Column Master Keys)。
@echo off
echo creating certificate (you might want to set a password on this)...
makecert.exe -n "CN=MyCompany Always Encrypted Master Key 2017" -r -eku 1.3.6.1.5.5.8.2.2,1.3.6.1.4.1.311.10.3.11 -sky exchange -sp "Microsoft Enhanced RSA and AES Cryptographic Provider" -sy 24 -len 2048 -a sha256 -e 01/01/2040 -sv MyCompanyAlwaysEncryptedMasterKey2017.pvk MyCompanyAlwaysEncryptedMasterKey2017.cer
echo merging to pfx (please check to export private key and set a password)...
pvk2pfx -pvk MyCompanyAlwaysEncryptedMasterKey2017.pvk -spc MyCompanyAlwaysEncryptedMasterKey2017.cer
echo done! install your new .pfx into the localmachine certificate store and create a reference to it in sql server!
echo note, backup the .pfx - the certificate private key is marked as non-exportable once installed into the certificate store.
pause
我借了一些makecert.exe參數從Increase validity of Always Encrypted Certificate
編輯2:後一對夫妻帶着這個工作日內,我們決定不去生產與始終是加密的,因爲它能夠在後SSMS(以及始終加密的參數化),一些查詢完全掛起,我們看到很多其他問題出現:例如,每個客戶端(ASP.NET,SQL Server作業,計劃任務,Reporting Services任務)有一個JOIN或一個WHERE總是加密列),該查詢需要參數化...即使我們做了很多 - 我們有更多有創意的查詢(非書本查詢),無法以這種方式進行參數化。然後,LIKE'%xxx%'等等或任何類型的高級TSQL我都不想去考慮。也許我會重新考慮總是加密一個新的解決方案,或再次沒有。這不是。
您可以在服務器上使用TDE並通過SSL連接以保護線路上的數據。 –
這是正確的,但需要注意的是,如果SQL Server受到攻擊,即入侵者獲得對SQL Server的管理訪問權限,上述方法將無法保護數據,因爲數據在SQL Server內存中將以明文形式顯示。 –