Проблема с сертификатом при работе через Sql

Тема в разделе "SQL", создана пользователем ptybn8407, 19 сен 2011.

Наш партнер Genesis Hackspace
  1. ptybn8407

    ptybn8407 Гость

    Была создана сборка, задача которой - скачивать файл посредством сертифика с заданного сайта. Я вытаскиваю сертификаты для того, чтобы залогиниться и скачать файлы через X509Storage.
    При использовании сборки в стороннем приложении она прекрасно функционирует. Возникла идея загнать ее в SQL, чтобы оттуда посредством джобов использовать в задданое время. Но(!) при вызове запросом метода из сборки не получается вытащить не то, что нужный сертификат - а вообще любой, хранящийся на данном серваке и спокойно получаемый при запуске приложения.

    [TSQL]USE Storage
    GO
    IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[GetFile]') AND type in (N'FN', N'IF', N'TF', N'FS', N'FT'))
    DROP FUNCTION [dbo].[GetFile]
    IF EXISTS (SELECT * FROM sys.assemblies asms WHERE asms.name = N'BR_ReturnPath' and is_user_defined = 1)
    DROP ASSEMBLY [BR_ReturnPath]
    GO


    USE master
    GRANT UNSAFE ASSEMBLY TO sa
    go
    alter database [Storage] set trustworthy on
    go


    use Storage
    CREATE ASSEMBLY BR_ReturnPath
    FROM 'C:\!BR_NEW\BR_SQL\BR_ReturnPath.dll'
    WITH PERMISSION_SET = UNSAFE
    GO
    CREATE FUNCTION GetFile
    (
    @authenticateURL nvarchar(255)
    ,@fileURL nvarchar(255)
    ,@proxyHost nvarchar(255)
    ,@proxyPort int
    ,@proxyUser nvarchar(255)
    ,@proxyPassword nvarchar(255)
    ,@thumbprint nvarchar(255)
    )
    RETURNS nvarchar(255)
    EXTERNAL NAME BR_ReturnPath.BR_Support.GetFile;
    go


    declare @result nvarchar(255)
    set @result = dbo.GetFile('https://SomeAuthenticatePage',
    'https://SomeFileDownloadPage',
    'ProxyDomain',
    ProxyPort,
    'ProxyUser',
    'ProxyPassword',
    'CertificateThumbprint') select @result
    print @result[/TSQL]


    Так вот самое интересное, что при вытаскивании


    X509Certificate2 thisCert = null;
    X509Store store = new X509Store(StoreName.My,StoreLocation.LocalMachine);
    store.Open(OpenFlags.OpenExistingOnly);
    X509Certificate2Collection collCert = store.Certificates.Find(X509FindType.FindByThumbprint,strThumbprint,true);
    if (collCert.Count > 0)
    {
    thisCert = collCert[0];
    }

    значение store.Count равно 0... При этом при использовании dll в стороннем приложении все прекрасно скачивается(сертификаты вытаскиваются и выбирается рабочий), а когда я через SQL management запросом пытаюсь получить данные - он не может вытащить сертификаты. Везде значение Count равно 0, и у store, и у, разумеется, collCert.
    Проблема мне кажется в том, что при запуске приложения права на него как бы принадлежат теущему пользователю и поэтому сертификты спокойно забираются, а уже из них вытаскивается нужный. А при запуске из SQL права хрен знает чьи - в итоге X509Storage пустое. Как обойти эту проблему - бьюсь уже полдня(((
     
Загрузка...

Поделиться этой страницей