Використання COM-об’єктів в збережених процедурах SQL Server, Інші СУБД, Бази даних, статті

Розглянемо, наприклад, ситуацію, коли збережена процедура по вхідному параметру паролю брала б його MD5 значення і заносила отримане значення в таблицю.
Така ситуація може виникнути при реєстрації користувачів, коли в таблиці знаходяться не реальні паролі, а їх MD5 значення.
Виникає питання – чи можна функціонал з узяття MD5 значень паролів перенести в збережену процедуру, якщо існує COM-об’єкт, який генерує хеш-значення MD5?
Звичайно, цю процедуру можна реалізувати в додатку через простий виклик COM-об’єкта, але ми розглянемо як це можна зробити в Transact-SQL.
Як COM-об’єкта візьмемо ActiveX-компонент CryptLib, Який можна взяти на даному сайті http://www.activex.net.ru/activex/more.shtml # cryptlib і зареєструвати в реєстрі стандартно через regsvr32.
Далі скористаємося системними процедурами SQL Server, Які дозволяють працювати з COM-об’єктами:

  • sp_OACreate

  • sp_OAMethod

  • sp_OADestroy

  • sp_OAGetErrorInfo
    Для запуску цих системних процедур користувач, від імені якого буде запускатися наша процедура, повинен входити в роль sysadmin.
    Текст процедури InsertMD5Value:







    CREATE PROCEDURE dbo.InsertMD5Value
    @Login Varchar(50), @Password Varchar(50)
    AS
    DECLARE @object int
    DECLARE @hr Int
    DECLARE @md5_hash varchar(255)
    DECLARE @src varchar(255), @desc varchar(255)
    SET NOCOUNT ON
    EXEC @hr = sp_OACreate “CryptLib.MD5”, @object OUT
    IF @hr <> 0
    – Повідомлення про помилку
    BEGIN

    EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
    SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    GOTO END_FINAL
    END
    ELSE
    BEGIN
    EXEC @hr = sp_OAMethod @object, “Crypt”, @md5_hash OUT, @Password
    IF @hr <> 0
    GOTO CLEANUP
    ELSE
    PRINT @md5_hash
    – Для прикладу просто друкуємо MD5 значення.
    – Тут можна робити вставку отриманого MD5 значення в таблицю,
    – Попередньо зробивши перевірку на існування в таблиці значення
    – З переданого параметра @ Login
    — INSERT INTO UsersReg (Login, Passwd) VALUES (@Login, @Password)
    END
    CLEANUP:
    IF @hr <> 0
    BEGIN
    EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
    SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    END
    BEGIN
    EXEC @hr = sp_OADestroy @object
    IF @hr <> 0
    BEGIN
    EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
    SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
    END
    END
    END_FINAL:
    RETURN

    Для запуску цієї процедури досить просто виконати
    EXEC dbo.InsertMD5Value “user1”, “test”


  • Файли SQL-скриптів додаються: sqlcom.zip

    Схожі статті:


    Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

    Коментарів поки що немає.

    Ваш отзыв

    Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

    *

    *