Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
nidef Member Откуда: Сообщений: 7 |
По подсказке Aleks222 удалось создать рабочую хранимую процедуру шифрования данных (далее процедура вызывается из клиентского приложения):CREATE PROCEDURE Shifrovanie123 AS BEGIN OPEN SYMMETRIC KEY SimmetrKey DECRYPTION BY CERTIFICATE Sertifikat123 -- Если в столбце отсутствуют записи с нулевыми и пустыми значениями, то шифруем данные -- столбца Faktich_Adres и записываем их в столбец Shifr_Faktich_Adres IF not exists( SELECT * FROM [Klient] where [Faktich_Adres]='' or [Faktich_Adres] is null ) BEGIN UPDATE Klient SET Shifr_Faktich_Adres = ENCRYPTBYKEY(KEY_GUID('SimmetrKey'), [Faktich_Adres]) UPDATE Klient SET Faktich_Adres = NULL END ELSE --В противном случае дешифруем все записи и записываем их в столбец Faktich_Adres BEGIN UPDATE Klient SET Faktich_Adres = DECRYPTBYKEY(Shifr_Faktich_Adres) UPDATE Klient SET Shifr_Faktich_Adres = NULL END END Теперь в этой хранимой процедуре требуется определить два (можно три) параметра, имеющих тип varbinary(256)!!!, например, так: CREATE PROCEDURE Shifrovanie123 (n1 varbinary(256), n2 varbinary(256)). Ну, то есть в процедуру нужно добавить два-три параметра. Подскажите, пожалуйста, что в этой процедуре можно определить в качестве параметров? Я в T-SQL не очень, поэтому буду благодарен, если подсказку бросите в виде кода. Сообщение было отредактировано: 16 дек 18, 23:28 |
16 дек 18, 19:10 [21765470] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
Надо -- добавляйте, мы не против. Синтаксис с примерами в хелпе.
Сообщение было отредактировано: 16 дек 18, 23:31 |
16 дек 18, 23:30 [21765575] Ответить | Цитировать Сообщить модератору |
iiyama Member Откуда: Сообщений: 642 |
nidef, Может этот механизм будет более предпочтителен для Вашей задачи? |
17 дек 18, 15:06 [21766040] Ответить | Цитировать Сообщить модератору |
Valery_B Member Откуда: Москва Сообщений: 2032 |
Так ?ALTER PROCEDURE Shifrovanie123 @n1 varbinary(MAX), @n2 varbinary(MAX) AS BEGIN ... END |
17 дек 18, 16:39 [21766158] Ответить | Цитировать Сообщить модератору |
nidef Member Откуда: Сообщений: 7 |
Спасибо! Вот что у меня получилось. На работоспособность пока не проверял. Не могу понять, нужен ли здесь SELECT?ALTER PROCEDURE [dbo].[Shifrovanie] @Faktich_Adres varchar(100), @Shifr_Faktich_Adres varbinary(256) OUTPUT AS BEGIN OPEN SYMMETRIC KEY SimmetrKey DECRYPTION BY CERTIFICATE Sertifikat123 -- Если в столбце отсутствуют записи с нулевыми и пустыми значениями, то шифруем данные -- столбца Faktich_Adres и записываем их в столбец Shifr_Faktich_Adres IF not exists( SELECT * FROM [Klient] where [Faktich_Adres]='' or [Faktich_Adres] is null ) BEGIN UPDATE Klient SET Shifr_Faktich_Adres = ENCRYPTBYKEY(KEY_GUID('SimmetrKey'), [Faktich_Adres]) UPDATE Klient SET Faktich_Adres = NULL UPDATE Klient -- !!!!!!!!!!!!! Здесь вроде бы нужен SELECT, а не SET? SET @Shifr_Faktich_Adres = Shifr_Faktich_Adres END ELSE -- В противном случае дешифруем все записи и записываем их в столбец Faktich_Adres BEGIN UPDATE Klient SET Faktich_Adres = DECRYPTBYKEY(Shifr_Faktich_Adres) UPDATE Klient SET Shifr_Faktich_Adres = NULL UPDATE Klient --!!!!!!!!!!!!! Здесь вроде бы нужен SELECT, а не SET? SET @Faktich_Adres = Faktich_Adres END END Сообщение было отредактировано: 17 дек 18, 18:54 |
17 дек 18, 18:48 [21766320] Ответить | Цитировать Сообщить модератору |
Гавриленко Сергей Алексеевич Member Откуда: Moscow Сообщений: 37155 |
У оператора update тоже есть from и where. Вы бы не угадывали синтаксис, а в хелпе бы его посомотрели, с примерами. |
17 дек 18, 18:56 [21766328] Ответить | Цитировать Сообщить модератору |
iiyama Member Откуда: Сообщений: 642 |
nidef, У Вас странный стиль программирования, "по наитию". ИМХО 1. начать с этого 2. далее UPDATE обратите внимание на [ <OUTPUT Clause> ] Это даст ответ на Ваш коммент -- !!!!!!!!!!!!! Здесь вроде бы нужен SELECT, а не SET? 3. Заведите аттрибут в таблице = {Зашифровано, Не зашифровано}, или хотя бы проверяйте у Вас зашифрованное поле или еще нет, а то запорите записи повторным вызовом 4. Инструкция UPDATE позволяет изменять несколько записей 5. Надеюсь все это Вы делаете для обучения, а не в производстве или хотя бы на тестовой базе. Если нет п.1 и делайте тестовое окружение Удачи |
18 дек 18, 11:20 [21766752] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |