(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

Использование COM-объектов в хранимых процедурах SQL Server

Источник: activex

Рассмотрим, например, ситуацию, когда хранимая процедура по входному параметру паролю брала бы его 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

    Ссылки по теме

    Файлы для загрузки


     Распечатать »
     Правила публикации »
      Написать редактору 
     Рекомендовать » Дата публикации: 26.01.2010 
     

    Магазин программного обеспечения   WWW.ITSHOP.RU
    Microsoft Office для дома и учебы 2019 (лицензия ESD)
    Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год.
    Microsoft 365 Business Standard (corporate)
    Microsoft 365 Apps for business (corporate)
    Microsoft 365 Business Basic (corporate)
     
    Другие предложения...
     
    Курсы обучения   WWW.ITSHOP.RU
     
    Другие предложения...
     
    Магазин сертификационных экзаменов   WWW.ITSHOP.RU
     
    Другие предложения...
     
    3D Принтеры | 3D Печать   WWW.ITSHOP.RU
     
    Другие предложения...
     
    Новости по теме
     
    Рассылки Subscribe.ru
    Информационные технологии: CASE, RAD, ERP, OLAP
    Безопасность компьютерных сетей и защита информации
    Новости ITShop.ru - ПО, книги, документация, курсы обучения
    Программирование на Microsoft Access
    CASE-технологии
    СУБД Oracle "с нуля"
    Все о PHP и даже больше
     
    Статьи по теме
     
    Новинки каталога Download
     
    Исходники
     
    Документация
     
     



        
    rambler's top100 Rambler's Top100