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

Откуда:
Сообщений: 4
По подсказке 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]     Ответить | Цитировать Сообщить модератору
 Re: В хранимой процедуре нужно добавить параметры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36691
Надо -- добавляйте, мы не против. Синтаксис с примерами в хелпе.

Сообщение было отредактировано: 16 дек 18, 23:31
16 дек 18, 23:30    [21765575]     Ответить | Цитировать Сообщить модератору
 Re: В хранимой процедуре нужно добавить параметры  [new]
iiyama
Member

Откуда:
Сообщений: 642
nidef,

Может этот механизм будет более предпочтителен для Вашей задачи?
17 дек 18, 15:06    [21766040]     Ответить | Цитировать Сообщить модератору
 Re: В хранимой процедуре нужно добавить параметры  [new]
Valery_B
Member

Откуда: Москва
Сообщений: 2014
Так ?
ALTER PROCEDURE Shifrovanie123 @n1 varbinary(MAX), @n2 varbinary(MAX)
AS
BEGIN
...
END
17 дек 18, 16:39    [21766158]     Ответить | Цитировать Сообщить модератору
 Re: В хранимой процедуре нужно добавить параметры  [new]
nidef
Member

Откуда:
Сообщений: 4
Спасибо! Вот что у меня получилось. На работоспособность пока не проверял. Не могу понять, нужен ли здесь 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]     Ответить | Цитировать Сообщить модератору
 Re: В хранимой процедуре нужно добавить параметры  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36691
У оператора update тоже есть from и where. Вы бы не угадывали синтаксис, а в хелпе бы его посомотрели, с примерами.
17 дек 18, 18:56    [21766328]     Ответить | Цитировать Сообщить модератору
 Re: В хранимой процедуре нужно добавить параметры  [new]
iiyama
Member

Откуда:
Сообщений: 642
nidef,
У Вас странный стиль программирования, "по наитию".
ИМХО
1. начать с этого
2. далее UPDATE
обратите внимание на [ <OUTPUT Clause> ] Это даст ответ на Ваш коммент -- !!!!!!!!!!!!! Здесь вроде бы нужен SELECT, а не SET?
3. Заведите аттрибут в таблице = {Зашифровано, Не зашифровано}, или хотя бы проверяйте у Вас зашифрованное поле или еще нет, а то запорите записи повторным вызовом
4. Инструкция UPDATE позволяет изменять несколько записей
5. Надеюсь все это Вы делаете для обучения, а не в производстве или хотя бы на тестовой базе. Если нет п.1 и делайте тестовое окружение

Удачи
18 дек 18, 11:20    [21766752]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить