Використання 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>

    *

    *