SQL Server всегда зашифрован: тип операнда clash: varchar несовместим с varchar (max) - PullRequest
0 голосов
/ 15 мая 2018

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

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

Ошибка SQL72014: поставщик данных .Net SqlClient: Msg 206, уровень 16, состояние 2, процедура tr_Employee_Update, строка 27 Тип операнда clash: varchar несовместим с varchar (max), зашифрованным с помощью (encryption_type = ')DETERMINISTIC ', encryption_algorithm_name =' AEAD_AES_256_CBC_HMAC_SHA_256 ', column_encryption_key_name =' CEK_Auto1 ', column_encryption_key_database_name =' xxxx ') collation_name * этот * вопрос * выглядит как этот * 100 * мой вопрос1009 * Тип операнда clash: varchar несовместим с varchar (50), пытающимся вставить в зашифрованную базу данных

То же самое с этим вопросом, где не решается моя проблема точно. SQL Server всегда зашифрованный операнд типа clash: varchar несовместим с varchar (60) при запуске EXEC sproc .

У меня есть эта проблема на ряде таблиц, поэтому был бы признателен всем и каждомуПомогите.

Пожалуйста, ознакомьтесь с SQL Fiddle здесь

http://sqlfiddle.com/#!18/4ac5c/3

Мне пришлось разделить таблицу и создать триггер, потому что длина SQL превышает 8000 символов, но этоСамый полный пример, который я могу привести.

Я шифрую столбцы, используя тип шифрования: Детерминированный и Имя ключа шифрования: CEK_Auto1.

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

Любая и вся помощь по сообщенной проблеме будет с благодарностью получена.

CREATE TABLE [dbo].[Employee] (
[EmployeeID]        INT           IDENTITY (1, 1) NOT NULL,
[EmployeeTypeID]    INT           NOT NULL,
[Title]             VARCHAR (50)  NOT NULL,
[Forename]          VARCHAR (30)  NOT NULL,
[Surname]           VARCHAR (30)  NOT NULL,
[AddressLine1]      VARCHAR (60)  NOT NULL,
[AddressLine2]      VARCHAR (60)  NOT NULL,
[AddressLine3]      VARCHAR (60)  NOT NULL,
[AddressLine4]      VARCHAR (60)  NOT NULL,
[Town]              VARCHAR (50)  NOT NULL,
[County]            VARCHAR (50)  NOT NULL,
[PostCode]          VARCHAR (20)  NOT NULL,
[Phone]             VARCHAR (20)  CONSTRAINT [DF_Employee_Phone] DEFAULT ('') NOT NULL,
[Mobile]            VARCHAR (20)  NOT NULL,
[Fax]               VARCHAR (20)  NOT NULL,
[Email]             VARCHAR (50)  NOT NULL,
[Extension]         VARCHAR (10)  CONSTRAINT [DF_Employee_Extension_1] DEFAULT ('') NOT NULL,
[SpeedDial]         VARCHAR (10)  CONSTRAINT [DF_Employee_SpeedDial_1] DEFAULT ('') NOT NULL,
[Notes]             VARCHAR (MAX) NOT NULL,
[EmployeeTeamID]    INT           NULL,
[Created]           DATETIME      CONSTRAINT [DF_Employee_Created] DEFAULT (getdate()) NOT NULL,
[OperatorIDCreated] INT           NOT NULL,
[Updated]           DATETIME      CONSTRAINT [DF_Employee_Updated] DEFAULT (getdate()) NOT NULL,
[OperatorIDUpdated] INT           NOT NULL,
[Deleted]           BIT           CONSTRAINT [DF_Employee_Deleted] DEFAULT ((0)) NOT NULL,
[EmployeeIDManager] INT           NULL,
[JobTitle]          VARCHAR (100) CONSTRAINT [DF_Employee_JobTitle] DEFAULT ('') NOT NULL,
CONSTRAINT [PK_Employee] PRIMARY KEY CLUSTERED ([EmployeeID] ASC),
CONSTRAINT [FK_Employee_Employee] FOREIGN KEY ([EmployeeIDManager]) REFERENCES [dbo].[Employee] ([EmployeeID]),
CONSTRAINT [FK_Employee_EmployeeTeam] FOREIGN KEY ([EmployeeTeamID]) REFERENCES [dbo].[EmployeeTeam] ([EmployeeTeamID]),
CONSTRAINT [FK_Employee_EmployeeType] FOREIGN KEY ([EmployeeTypeID]) REFERENCES [dbo].[EmployeeType] ([EmployeeTypeID])
);


GO
CREATE NONCLUSTERED INDEX [IX_Employee_Surname]
ON [dbo].[Employee]([Surname] ASC);


GO

CREATE TABLE [dbo].[AuditItem](
[AuditItemID] [INT] IDENTITY(1,1) NOT NULL,
[ID] [INT] NOT NULL,
[AuditEntityID] [INT] NOT NULL,
[AuditTypeID] [INT] NOT NULL,
[Note] [VARCHAR](MAX) COLLATE Latin1_General_BIN2 ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = [CEK_Auto1], ENCRYPTION_TYPE = DETERMINISTIC, ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[Created] [DATETIME] NOT NULL,
[OperatorIDCreated] [INT] NOT NULL,
[ProfessionalIDCreated] [INT] NULL,
 CONSTRAINT [PK_AuditItem] PRIMARY KEY CLUSTERED 
(
[AuditItemID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO

    ALTER Trigger  [dbo].[tr_Employee_Update] ON [dbo].[Employee] 
FOR UPDATE

AS

--Audit Entity ID for Employees
Declare @AuditEntityID int
set @AuditEntityID = 2

Insert AuditItem
    (ID,AuditEntityID,AuditTypeID, Note, Created, OperatorIDCreated)
Select
    inserted.EmployeeID,
    @AuditEntityID,
    --Update type
    2,
    'Name changed from ' + ltrim(rtrim(ltrim(rtrim(Deleted.Title)) + ' ' + ltrim(rtrim(Deleted.Forename)) + ' ' + ltrim(rtrim(Deleted.Surname)))) + ' to ' + + ltrim(rtrim(ltrim(rtrim(Inserted.Title)) + ' ' + ltrim(rtrim(Inserted.Forename)) + ' ' + ltrim(rtrim(Inserted.Surname)))),
    GetDate(),
    inserted.OperatorIDUpdated
From inserted
        Inner Join deleted on inserted.EmployeeID = deleted.EmployeeID
Where deleted.Title <> inserted.Title or deleted.Forename <> inserted.Forename or deleted.Surname <> inserted.Surname

1 Ответ

0 голосов
/ 15 мая 2018

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

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

...