Как вставить значения в таблицу в 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 BROps_TestDB ') (или слабее).

Кроме того, у меня есть существующее приложение, в котором значения вставляются в таблицу с использованием Entity framework в 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

person user3775287    schedule 20.06.2017    source источник


Ответы (3)


Чтобы вставить данные в зашифрованный столбец непосредственно из SSMS, вам необходимо установить Parameterization for Always Encrypted в True.

Однако эта функция не поддерживается в SSMS 2016, поэтому вам необходимо установить более новую версию SSMS, которую можно найти здесь.

После того, как вы получите SSMS 17.0, вам необходимо включить шифрование столбцов для вашего подключения, пока вы подключаетесь к экземпляру.

Чтобы вставить данные в указанный зашифрованный столбец, при открытии нового окна запроса выполните следующие действия:

  • Выберите Query Options в Query меню
  • В Advanced выберите Enable Parameterization for Always Encrypted

введите здесь описание изображения

Теперь вы сможете вставлять данные прямо в таблицу из SSMS.

Чтобы просмотреть значение зашифрованного столбца в виде обычного текста, вам необходимо Enable Column Encryption Setting. Для этого необходимо:

  • В диалоговом окне Connect to Server
  • Выберите Options
  • Go to Additional Connection Parameters
  • Введите Column Encryption Setting = Enabled

введите здесь описание изображения

person Sonu K    schedule 29.12.2017

Также вам нужно объявить и инициировать переменную в одной строке, чтобы она работала.

ОБЪЯВЛЕНИЕ @rvalue КАК СИМВОЛ (9) = '124'; INSERT INTO. [Dbo]. [Test] ([value], [desc]) VALUES (@ rvalue'test ');

person Rimmon Monson    schedule 09.01.2021

Вы можете вставить данные в зашифрованный столбец с помощью приложения или через SSMS. См. в этом статья, в которой описывается, как вставлять данные в столбец Always Encrypted с помощью хранимых процедур.

Пожалуйста, посмотрите в этой статье, чтобы узнать, как можно вставлять значения в зашифрованный столбец с помощью параметризации для Always Encrypted. Также посмотрите раздел Параметризация для Always Encrypted эта статья

В этой статье описывается как вставить значения в всегда зашифрованный столбец с помощью приложения

Для использования Always Encrypted с Entity Framework следуйте эта статья.

person Nikhil Vithlani - Microsoft    schedule 20.06.2017
comment
Я пытаюсь вставить и обновить строки с зашифрованными столбцами в БД с помощью Entity Framework. Не могли бы вы указать мне на материал, на который я могу сослаться. - person user3775287; 21.06.2017
comment
См. Эту статью (blogs.msdn.microsoft.com/sql_pfe_blog/2016/07/19/), чтобы узнать, как вставить в столбец Always Encrypted с помощью хранимой процедуры и эту статью (blogs.msdn.microsoft.com/sqlsecurity/2015/08 / 27 /), чтобы узнать, как использовать Always Encrypted с Entity Framework. - person Nikhil Vithlani - Microsoft; 24.06.2017