【问题标题】:Use Always Encrypted on decimal(18,2)使用始终加密的十进制 (18,2)
【发布时间】:2018-01-26 15:16:24
【问题描述】:

我正在使用新的 SQL Server 2016 功能 - 始终加密。这是一种非常酷且简单的技术——但不适用于十进制类型。

当我插入一个值时,我会收到类似这样的错误(ZP_Test - 我的数据库名称):

操作数类型冲突:使用 (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') 加密的小数 (4,2) 与加密的小数 (18,2) 不兼容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')
无法准备报表。

我的 API 是用 C# 编写的,请看我的代码也许你知道解决方案。

用于创建表的 SQL 查询

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#代码示例

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();

SQL中的Trace,发生错误时——

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)'

【问题讨论】:

    标签: sql-server encryption sql-server-2016 always-encrypted


    【解决方案1】:

    请使用 SqlParamater 对象指定小数的精度和小数位数,如下所示

    SqlParameter param = new SqlParameter("@amount", SqlDbType.Decimal);
    param.Precision = 18;
    param.Scale = 2;
    command.Parameters.Add(param);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2020-01-21
      • 2017-05-07
      • 1970-01-01
      • 2019-06-05
      相关资源
      最近更新 更多