Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вычисляемое дешифрованное поле и ошибка sp_MStran_ddlrepl  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 495
В таблице BankAccount есть несколько зашифрованных полей (пусть Num),
и к каждому из них имеется вычисляемое дешифрованное поле вида
ADD NumDecrypted AS CONVERT(nvarchar(9), DecryptByKey(CONVERT(varbinary(300), Num)))

И есть ключ шифрования BankAccountKey01
Необходимо переименовать эту пару в (Number, NumberDecrypted)

sp_rename не помогает, потому что NumberDecrypted считается по Number

Ну ок, удаляю NumDecrypted, переименовываю Num в Number и пытаюсь выполнить

OPEN SYMMETRIC KEY BankAccountKey01 DECRYPTION BY CERTIFICATE MainCertificate;

ALTER TABLE BankAccount
    ADD NumberDecrypted AS CONVERT(nvarchar(9), DecryptByKey(CONVERT(varbinary(300), Num)))

CLOSE SYMMETRIC KEY BankAccountKey01;

Получаю ошибку
sys.sp_MStran_ddlrepl, строка: 108 [строка начала пакета: 0]
Invalid length parameter passed to the RIGHT function.

Я знаю, что с тех пор, как проблемные столбцы были впервые добавлены, кто-то настраивал/пытался настраивать репликацию.
Но я в этом плохо разбираюсь: проверил только таблицу sysarticles и убедился, что она пустая.
17 ноя 21, 16:31    [22397085]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемое дешифрованное поле и ошибка sp_MStran_ddlrepl  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1909
Шамиль Фаридович,

чето вы с последовательностью действий или метаданными напутали.

create master key encryption by password = '123456'

create symmetric key [my] with algorithm = aes_256 encryption by password = '123456'


create table [my_table] (
id int,
num varbinary(max)
)


open symmetric key [my] decryption by password = '123456'
insert into my_table values (1, ENCRYPTBYKEY(key_guid('my'), '110'))
insert into my_table values (1, ENCRYPTBYKEY(key_guid('my'), '2000'))


alter table [my_table] add 
num_dec as convert(varchar(10), decryptbyKey(num))


select * from my_table

alter table my_table drop column num_dec;

sp_rename 'my_table.num', 'num2'

alter table [my_table] add 
num_dec as convert(varchar(10), decryptbyKey(num2))


select * from my_table


не ошиблись тут?
ALTER TABLE BankAccount
    ADD NumberDecrypted AS CONVERT(nvarchar(9), DecryptByKey(CONVERT(varbinary(300), Num)))



Сообщение было отредактировано: 17 ноя 21, 17:27
17 ноя 21, 17:26    [22397122]     Ответить | Цитировать Сообщить модератору
 Re: Вычисляемое дешифрованное поле и ошибка sp_MStran_ddlrepl  [new]
Шамиль Фаридович
Member

Откуда: Саратов
Сообщений: 495
felix_ff,
Спасибо за работающий пример, это всегда полезно
felix_ff

не ошиблись тут?
ALTER TABLE BankAccount
    ADD NumberDecrypted AS CONVERT(nvarchar(9), DecryptByKey(CONVERT(varbinary(300), Num)))


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


Сообщение было отредактировано: 17 ноя 21, 19:26
17 ноя 21, 19:24    [22397177]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить