2017-06-20 49 views
2

我已經使用列加密在sql 2016表中加密了幾列。現在我想將數據插入該表中。我試圖創建一個存儲過程並執行該過程的參數,但我得到以下錯誤。如何在sql 2016中的表中插入值,其列始終是加密的?

列/變量'@lastName'的加密方案不匹配。對於列/變量 加密方案是(將encryption_type = 'PLAINTEXT')和近線 '0' 的表達希望它是 (將encryption_type = 'DETERMINISTIC',encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256',column_encryption_key_name = 「CEK_Auto1 ',column_encryption_key_database_name ='BROps_TestDB')(或 較弱)。

另外,我在那裏值在SQL 2008(我們正在試圖升級到SQL 2016年始終加密功能)使用實體框架插入表中現有的應用程序。 那麼,是否有任何標誌或任何方法,我們可以通過我們的代碼最小的變化插入數據到SQL 2016(列加密)?

我已經給出了示例存儲過程代碼以及該存儲過程的執行情況。

CREATE PROCEDURE dbo.AddCustomer 
     @CustomerID int, 
     @FirstName nvarchar(25), 
     @LastName nvarchar(25), 
     @SIN nvarchar(11), 
     @CreditCardNumber nvarchar(25), 
     @EmailAddress nvarchar(50), 
     @PhoneNumber nvarchar(25), 
     @TerritoryID int 
    AS 
    BEGIN 
    INSERT INTO [dbo].[Customers] 
       ([CustomerID] 
       ,[FirstName] 
       ,[LastName] 
       ,[SIN] 
       ,[CreditCardNumber] 
       ,[EmailAddress] 
       ,[PhoneNumber] 
       ,[TerritoryID]) 
     VALUES 
       (@CustomerID, 
       @FirstName, 
       @LastName, 
       @SIN, 
       @CreditCardNumber, 
       @EmailAddress, 
       @PhoneNumber, 
       @TerritoryID) 
    END 

---------------------------------------- 
    DECLARE @CustomerID int, 
    @FirstName nvarchar(25), 
    @LastName nvarchar(25), 
    @SIN nvarchar(11), 
    @CreditCardNumber nvarchar(25), 
    @EmailAddress nvarchar(50), 
    @PhoneNumber nvarchar(25), 
    @TerritoryID int 
    SET @CustomerID = 1 
    SET @FirstName = 'David' 
    SET @LastName = 'Postlethwaite' 
    SET @SIN = '12345-3-ee-3' 
    SET @CreditCardNumber = '1111-1233-1231-1233' 
    SET @EmailAddress = '[email protected]' 
    SET @PhoneNumber = '406555' 
    SET @TerritoryID = 1 
    execdbo.AddCustomer @CustomerID,@FirstName,@LastName,@SIN,@CreditCardNumber,@EmailAddress, 
    @PhoneNumber,@TerritoryID 

回答

0

您可以使用應用程序或通過SSMS將數據插入加密列。請參閱this article,其中描述瞭如何使用存儲過程將數據插入到始終加密列中。

請查看this article,瞭解如何使用Always Encrypted的參數化將值插入加密列。 也期待在參數化的this article

This article始終加密部分介紹如何使用應用程序

使用始終與實體框架加密插入處於始終加密的列值,請按照this article

+0

我試圖插入和使用Enti更新數據庫中具有加密列的行ty框架。 你能指點我可以參考的材料嗎? – user3775287

+0

請參閱此文章(https://blogs.msdn.microsoft.com/sql_pfe_blog/2016/07/19/getting-started-with-always-encrypted-part-2/)瞭解如何插入始終加密列使用存儲過程和本文(https://blogs.msdn.microsoft.com/sqlsecurity/2015/08/27/using-always-encrypted-with-entity-framework-6/)來了解如何使用Always Encrypted與實體框架 –

0

爲了將數據直接從SSMS插入到加密列中,您需要將Parameterization for Always Encrypted設置爲True

但是,此功能在SSMS 2016中不受支持,所以您需要安裝可以找到here的更新版本的SSMS。

獲取SSMS 17.0後,需要在連接到實例時爲連接啓用列加密。

爲了將數據插入到指定的加密列,當你打開一個新的查詢窗口,執行以下操作:從Query菜單

  • Advanced

    • 選擇Query Options,選擇Enable Parameterization for Always Encrypted

    enter image description here

    現在你將會能夠從SSMS直接插入數據到表格中。

    要以純文本格式查看加密列值,您需要EnableColumn Encryption Setting。要做到這一點,以下幾點:

    • Connect to Server對話框
    • 選擇Options
    • 轉到Additional Connection Parameters
    • 輸入Column Encryption Setting = Enabled

    enter image description here

  • 相關問題