powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Применение Always Encrypted для Decimal
9 сообщений из 9, страница 1 из 1
Применение Always Encrypted для Decimal
    #39506841
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет.
Начал разбираться с новой фичей SQL Server 2016 - Always Encrypted (постоянное шифрование).
Всё получается очень легко и круто, данные шифруются - без вмешательства в код проекта (C#), стоит то только поставить флажок в ConnectionString и всё полетело.

Но вот вдруг возникла проблема после того как я включил шифрования для поля типа - decimal (18,2).

Код: sql
1.
2.
3.
4.
5.
6.
7.
--Создание таблички
CREATE TABLE [dbo].[EmpInfo](
	[EmpID] [int] NULL,
	[NatID] [nvarchar](max) COLLATE Cyrillic_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [ColomnKey], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL,
	[Amount] [decimal](18, 2) ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [ColomnKey], ENCRYPTION_TYPE = Randomized, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NULL
) ON [PRIMARY]
GO



Код: c#
1.
2.
3.
4.
5.
6.
7.
//Пример кода, который строит SqlCommand.
command.CommandText = "INSERT INTO EmpInfo(EmpID, NatID, Amount) VALUES (@key, @ssn, @amount)";

command.Parameters.AddWithValue("@key", key);
command.Parameters.AddWithValue("@ssn", DBNull.Value);
command.Parameters.AddWithValue("@amount", Convert.ToDecimal("11.00"));
command.ExecuteNonQuery();



Если в качестве Amount будем указывать число - 1000000000000011.00 - то понятно всё работать будет.

Код ошибки:
Код: c#
1.
2.
Operand type clash: decimal(4,2) encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'ColomnKey', column_encryption_key_database_name = 'ZP_Test') is incompatible with decimal(18,2) encrypted with (encryption_type = 'RANDOMIZED', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'ColomnKey', column_encryption_key_database_name = 'ZP_Test')
Statement(s) could not be prepared.



Проверял через EF 6 - такая же проблема.

Подскажите, может кто сталкивался ? Какие варианты у меня есть.
Быть может смотреть в сторону money ?
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507020
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ackidZS,

Код: c#
1.
command.Parameters.AddWithValue("@amount", Convert.ToDecimal("11"));



А так работает?
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507037
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если четсно не вижу разницы с моим примером. Попробую конечно...но уверен что исход будет такой же.
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507050
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ackidZSЕсли четсно не вижу разницы с моим примером. Попробую конечно...но уверен что исход будет такой же.

Если мы говорим про decimal, то разница есть
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507079
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
) попробую . Но к сожелению это не решает оей проблемы.(
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507084
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ackidZS) попробую . Но к сожелению это не решает оей проблемы.(

Может вы отрассируете запрос и посмотрите, что уходит на сервер?
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507240
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
exec sp_describe_parameter_encryption N'INSERT INTO EmpInfo(EmpID, NatID, Amount, AmountDec) VALUES (@key, @ssn, @amount, @amountDec)',N'@key int,@ssn nvarchar(7),@amount decimal(4,2)'



Вот такая штука в трассировке - я так понимаю в sp_describe_parameter_encryption проблема. Хмммм...
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39507242
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это на самом деле то не вставка, это мы запрашиваем у SQL Servera информацию о главном ключе + видимо проверяем ТИПЫ шифрованных столбцов.
...
Рейтинг: 0 / 0
Применение Always Encrypted для Decimal
    #39511366
ackidZS
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эх , всё получилось очень легко - просто надо было настроить SqlParameter - указать какой тип и размерность ) и всё полетело)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Применение Always Encrypted для Decimal
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]