【问题标题】:What 's the best practice of change encrypted column's property更改加密列属性的最佳做法是什么
【发布时间】:2018-04-25 07:24:51
【问题描述】:

我的 [User] 表使用 Always-Encrypt 加密了列 [Email]。

我需要将 [Email] 的长度从 max 限制到 MaxLength(250),我通过在 email 属性上添加 MaxLength(250) 来做到这一点。

public class User
{    
    [Key, Required]
    public Guid Id { get; set; }
    [Required, **MaxLength(250)**]
    public string Email { get; set; }
    ...
}

但是当我运行迁移脚本时,我得到了以下异常:

Operand type clash: nvarchar(max) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK1', column_encryption_key_database_name = 'Identity') is incompatible with nvarchar

迁移脚本是:

DECLARE @var0 nvarchar(128)
SELECT @var0 = name
FROM sys.default_constraints
WHERE parent_object_id = object_id(N'dbo.User')
AND col_name(parent_object_id, parent_column_id) = 'Email';
IF @var0 IS NOT NULL
    EXECUTE('ALTER TABLE [dbo].[User] DROP CONSTRAINT [' + @var0 + ']')
ALTER TABLE [dbo].[User] ALTER COLUMN [Email] [nvarchar](250) NOT NULL
INSERT [dbo].[__MigrationHistory]([MigrationId], [ContextKey], [Model], [ProductVersion])
VALUES (N'201804250659054_12345678', N'Concordya.PWC.Verify.DataAccess.Migrations.Configuration',  0x1F8... , N'6.2.0-61023')

我在数据库中手动运行脚本,同样的错误。

这是否意味着一旦列被加密,更改属性的唯一方法是解密、修改然后加密?

谢谢,

【问题讨论】:

    标签: entity-framework always-encrypted


    【解决方案1】:

    我在尝试增加 Always Encrypted NVARCHAR 列的大小时遇到​​了类似的错误。问题是ALTER COLUMN 语句仍然需要包含加密参数。所以例如你可以改变这个 -

    ALTER TABLE [dbo].[User] ALTER COLUMN [Email] [nvarchar](250) NOT NULL
    

    为此(或您最初将 Always Encrypted 参数设置为的任何内容)-

    ALTER TABLE [dbo].[User] ALTER COLUMN [Email] [nvarchar](250) NOT NULL
    ENCRYPTED WITH (
          ENCRYPTION_TYPE = DETERMINISTIC
        , ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256'
        , COLUMN_ENCRYPTION_KEY = [**YOUR KEY**]
    ) NULL
    

    【讨论】:

    • 别担心!很高兴帮助:)
    猜你喜欢
    • 1970-01-01
    • 2015-04-06
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 2012-01-03
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多