更改加密列的最佳做法是什么 属性
What 's the best practice of change encrypted column's property
我的 [User] table 正在使用 Always-Encrypt 加密列 [Email]。
我需要将 [Email] 的长度限制在最大到 MaxLength(250) 之间,我通过在电子邮件 属性 上添加 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')
我手动运行数据库中的脚本,同样的错误。
这是否意味着一旦列被加密,更改 属性 的唯一方法就是解密、修改,然后加密?
谢谢,
程
我在尝试增加 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
我的 [User] table 正在使用 Always-Encrypt 加密列 [Email]。
我需要将 [Email] 的长度限制在最大到 MaxLength(250) 之间,我通过在电子邮件 属性 上添加 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')
我手动运行数据库中的脚本,同样的错误。
这是否意味着一旦列被加密,更改 属性 的唯一方法就是解密、修改,然后加密?
谢谢,
程
我在尝试增加 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