簡體   English   中英

在SQL Server或C#中加密數據

[英]Encrypting data in SQL Server or C#

我正在研究如何加密Web服務器上的選定用戶數據字段,並希望獲得有關如何獲得最佳結果的建議。 例如,假設用戶輸入了他/她的名字姓氏電子郵件社會保險號 然后:

  1. 管理員需要能夠查看此信息。
  2. 服務器上的進程需要使用的信息

...但是如果數據庫(或備份)被盜,則信息被加密且無用。

我猜想,一種方法是生成一個私鑰+公鑰,將其存儲到Windows證書存儲中,將其標記為“不可導出”(當然要保留備份),然后在應用程序層中使用該密鑰對字段進行加密/解密。他們是必要的。

我為此使用SQL Server 2016和.NET 4.6,但還具有其他依賴項,例如我想支持的Reporting Services。 -也許是“ SQL Server 2016始終加密”的方式嗎? 您有任何實際經驗可以分享嗎?

我猜想,如果入侵者獲得了服務器的管理控制權(Windows 2016 IIS + SQL Server組合),那么您將無能為力。 還是?

編輯 :我決定使用SQL Server 2016中內置的Always Encrypted。這就是我最終生成主密鑰的方式,然后將其安裝在本地計算機證書存儲中,然后在SQL Server中設置為列主密鑰(帶有一個簡單的SSMS,右鍵單擊DB>安全性>始終加密密鑰>列主密鑰)。

@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參數

編輯2 :幾天后,我們決定不使用Always Encrypted進行生產,因為在SSMS(和Always Encrypted Parameterization)中啟用它后,一些查詢完全掛起,並且我們看到了許多其他問題:例如,每個客戶端(ASP.NET,SQL Server作業,計划任務,Reporting Services任務-以及其中每個在“始終加密”列上執行JOIN或WHERE的查詢)都需要對該查詢進行參數化。 ..即使我們做了很多工作-我們還有更多創造性的查詢(非學校用書查詢),無法以這種方式進行參數化。 然后,LIKE'%xxx%'等或什至我不想考慮的任何類型的高級TSQL都會發生什么。 也許我會重新考慮“始終加密”以尋求新的解決方案,或者再次拒絕。 不是嗎

您可以通過兩種方式實現這一目標,

  1. 在SQL Server中使用透明數據加密功能,該功能將對靜態數據進行加密。 這意味着數據將由SQL Server加密在磁盤上,該數據在客戶端和SQL Server之間的網絡上以純文本形式可見,並且在SQL Server內存中以純文本形式可見。 您可以在此處閱讀有關此功能的更多信息。

  2. 使用SQL Server中的Always Encrypted功能(這是一種客戶端加密技術),這意味着它將在客戶端應用程序的驅動程序中對數據進行加密。 這意味着數據將在客戶端和SQL Server之間的網絡上進行加密,在SQL Server的內存中進行加密,並在磁盤上進行加密。 如果實施正確,它還可以保護數據免受入侵者的侵害,該入侵者在SQL Server上獲得管理員特權(基本上,您必須確保加密密鑰未存儲在SQL Server上,並且入侵者無法以任何方式訪問該加密密鑰)。 我將在此處詳細說明如何執行此操作以及Always Encrypted提供的安全性保證。 但是,由於SQL Server無法解密數據,因此您可以對加密數據執行哪些操作有一些限制。 您可以在這里https://docs.microsoft.com/zh-cn/sql/relational-databases/security/encryption/always-encrypted-database-engine了解更多有關這些限制的信息。 您可以在此處了解更多有關始終加密的信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM