Статья

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

Работа добавлена на сайт bukvasha.net: 2015-10-29

Поможем написать учебную работу

Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего

от 25%

Подписываем

договор

Выберите тип работы:

Скидка 25% при заказе до 9.11.2024



Использование 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'
Христофоров Юрий

Список литературы

Для подготовки данной работы были использованы материалы с сайта http://www.activex.net.ru/



1. Сочинение на тему Фортунатов Филипп Фёдорович
2. Реферат Экономический эффект от трудовой миграции
3. Курсовая на тему Кинематический расчет привода Расчет привода
4. Книга Management of organization
5. Биография Плокке, Готфрид
6. Отчет по практике на тему Организация финансового управления предприятием Детский сад 19 Пчелка
7. Курсовая на тему Професійно особисті якості юриста
8. Курсовая антиинфляционная политика 4
9. Реферат Разработка, принятие и изменение конституции
10. Реферат Компьюторныые вирусы