Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Выгрузка сборок на сервер  [new]
Bombey
Guest
Разбираюсь с .NET сборками в применении к SQL-серверу (для создания хранимых процедур, функций).
Имеется такая сборка (с учебника):
using System;
using System.Data;
using System.Data.SqlClient;
using System.Data.SqlTypes;
using Microsoft.SqlServer.Server;


public partial class StoredProcedures
{
    [Microsoft.SqlServer.Server.SqlProcedure]
    public static void ExampleSP (out int outval )
    {
        outval = 0;
        using ( SqlConnection cn = new SqlConnection ( "context connection=true" ) )
        {
            cn.Open ( );
            SqlCommand cmd = new SqlCommand ("select @@SERVERNAME,@@SPID",cn );
            SqlContext.Pipe.ExecuteAndSend ( cmd );
            outval = 12345;
        }
    }
};
Пытаюсь выгрузить сборку:
create assembly ExampleProc From '\\MyComp\AssemblyTest\ExampleProc.dll'
with permission_set = SAFE
Получаю ошибку:
Msg 6501, Level 16, State 7, Line 1
CREATE ASSEMBLY failed because it could not open the physical file "\\MyComp\AssemblyTest\ExampleProc.dll": 5(error not found).
Шару (\\MyComp\AssemblyTest) сделал, права дал для всех.
С самого сервера (сборка кладется на лок. диск сервера) сборка загружается нормально.
Вопросы:
1) сборки выгружаются только с лок. диска сервера?
2) если нет, то что не так в моем случае?

З.Ы. В доке по create assembly написано, что можно использовать сетевые пути, но только по этому пути должны быть также расположены все сборки, от которых зависит данная. Может в этом проблема? В моем случае никаких зависимостей нет (кроме системных сборок). М/б системные сборки (System.dll, System.Data.dll,...) тоже надо туда класть ? 8()
16 мар 09, 08:28    [6929557]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
Bombey, как вы решили эту проблему?
У меня то же самое: сборка вручную кладется на сервер, а запрос:
CREATE ASSEMBLY TestingCLR FROM '\\comp551.ru\СА\TestingCLR.dll'
выдает ошибку:

Msg 6501, Level 16, State 7, Line 1
CREATE ASSEMBLY failed because it could not open the physical file "\\comp551.ru\СА\TestingCLR.dll": 5(Отказано в доступе.).
3 дек 09, 11:30    [8012727]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
DmitryV
Member

Откуда: Москва
Сообщений: 311
хм... а сервер под какой учеткой стартует?
3 дек 09, 12:26    [8013267]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
Сервер стартует от доменной учётки с админскими правами
3 дек 09, 12:39    [8013387]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
И у этой записи есть права для доступа на шару?
3 дек 09, 12:40    [8013395]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
выполните с помощью xp_cmdshell из под этой учётки
dir \\comp551.ru\СА\TestingCLR.dll
3 дек 09, 12:41    [8013402]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
Да, папка расшарена и доступ на чтение и на запись разрешён всем.
3 дек 09, 12:49    [8013486]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
KaPrAL666
Да, папка расшарена и доступ на чтение и на запись разрешён всем.
И это подтверждается выполнением команды xp_cmdshell 'dir \\comp551.ru\СА\'?
3 дек 09, 12:51    [8013514]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
При попытке выполнить выдается ошибка:

Msg 229, Level 14, State 5, Procedure xp_cmdshell, Line 1
The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
3 дек 09, 12:57    [8013569]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
KaPrAL666
При попытке выполнить выдается ошибка:

Msg 229, Level 14, State 5, Procedure xp_cmdshell, Line 1
The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.
Можно либо дать права на xp_cmdshell, либо зайти на сервер под его учёткой и проверить командой dir

В любом случае сообщение "because it could not open the physical file "\\comp551.ru\СА\TestingCLR.dll": 5(Отказано в доступе.)." говорит об отсутствие прав. Нужно их дать или загружать ассембли не из файла.
3 дек 09, 13:50    [8014094]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
Сергей Алексеевич, команда:
xp_cmdshell 'dir \\comp551.ru\СА\' успешно выполняется, но все-равно сборка не сохраняется: отказано в доступе...
3 дек 09, 13:55    [8014129]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
-=DiM@n=-
Member

Откуда: Москва
Сообщений: 1564
а команда вернула строку с файлом TestingCLR.dll?
3 дек 09, 13:57    [8014141]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
-=DiM@n=-, да, команда вернула строку с файлом TestingCLR.dll...
3 дек 09, 14:11    [8014284]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
KaPrAL666
-=DiM@n=-, да, команда вернула строку с файлом TestingCLR.dll...
Что то странно...

Выполните этот батчъ (не изменяя) и выложите результаты сюда (не изменяя и не пропуская ничего)

select @@version
go
CREATE ASSEMBLY TestingCLR FROM '\\comp551.ru\СА\TestingCLR.dll'
go
exec xp_cmdshell 'dir \\comp551.ru\СА\TestingCLR.dll'
go

И ещё может быть ошибка из за отсутствия зависимых чборок, но она, думаю, другая.
3 дек 09, 14:25    [8014412]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
alexeyvg, результат таков:
Microsoft SQL Server 2005 - 9.00.3077.00 (Intel X86) Dec 17 2008 15:19:45 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)

Сборка вроде бы независима, и нет зависящих от неё сборок
3 дек 09, 14:30    [8014450]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
alexeyvg, извините, не дождался окончания выполнения запроса... результат таков:
----------------------------------
Microsoft SQL Server 2005 - 9.00.3077.00 (Intel X86) Dec 17 2008 15:19:45 Copyright (c) 1988-2005 Microsoft Corporation Enterprise Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
----------------------------------
Том в устройстве \\comp551.estet.ru\САПС не имеет метки.
Серийный номер тома: ACCF-FF10
NULL
Содержимое папки \\comp551.estet.ru\САПС
NULL
21.03.2009 18:52 8 192 TestingCLR.dll
1 файлов 8 192 байт
0 папок 26 232 553 472 байт свободно
NULL
---------------------------------

И ставшее уже привычным сообщение об ошибке:
Msg 6501, Level 16, State 7, Line 1
CREATE ASSEMBLY failed because it could not open the physical file "\\comp551.estet.ru\САПС\TestingCLR.dll": 5(Отказано в доступе.).
3 дек 09, 14:37    [8014506]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36808
По идее, все должно работать, ибо:

BOL: CREATE ASSEMBLY
When attempting to access the assembly specified in <client_assembly_specifier>, SQL Server impersonates the security context of the current Windows login. If <client_assembly_specifier> specifies a network location (UNC path), the impersonation of the current login is not carried forward to the network location because of delegation limitations. In this case, access is made using the security context of the SQL Server service account. For more information, see Credentials (Database Engine).
3 дек 09, 15:06    [8014781]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
Konst_One
Member

Откуда:
Сообщений: 11514
а не может эта dll-ка каким-либо процессом блокироваться unlocker попробуйте
3 дек 09, 15:15    [8014866]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
KaPrAL666
Том в устройстве \\comp551.estet.ru\САПС не имеет метки.
САПС - это по русски?

Попробуйте
CREATE ASSEMBLY TestingCLR FROM N'\\comp551.estet.ru\САПС\TestingCLR.dll'

Еще выполните
exec xp_cmdshell N'copy \\comp551.estet.ru\САПС\TestingCLR.dll nul'
3 дек 09, 15:51    [8015193]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
alexeyvg,
да, "САПС" это по-русски. Выполнение команды:
CREATE ASSEMBLY TestingCLR FROM N'\\comp551.estet.ru\САПС\TestingCLR.dll'
даёт ту же порядком надоевшую ошибку отказа в доступе, а команда:
exec xp_cmdshell N'copy \\comp551.estet.ru\САПС\TestingCLR.dll nul' выполняется: пишет "Скопировано файлов: 1." и "NULL" в следующей строке.
3 дек 09, 16:08    [8015340]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31194
KaPrAL666
alexeyvg,
да, "САПС" это по-русски. Выполнение команды:
CREATE ASSEMBLY TestingCLR FROM N'\\comp551.estet.ru\САПС\TestingCLR.dll'
даёт ту же порядком надоевшую ошибку отказа в доступе, а команда:
exec xp_cmdshell N'copy \\comp551.estet.ru\САПС\TestingCLR.dll nul' выполняется: пишет "Скопировано файлов: 1." и "NULL" в следующей строке.
Ну тогда ещё 3 вариента
1. изменить каталог САПС, чтоб были только аски-символы
2. сделать загрузку двухфазной
exec xp_cmdshell N'copy \\comp551.estet.ru\САПС\TestingCLR.dll {здесь локальный путь на сервере}\TestingCLR.dll'
CREATE ASSEMBLY TestingCLR FROM N'{здесь локальный путь на сервере}\TestingCLR.dll'
3. всё таки отказаться от загрузки через файл.
3 дек 09, 16:33    [8015590]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка сборок на сервер  [new]
KaPrAL666
Member [заблокирован]

Откуда:
Сообщений: 3410
alexeyvg, команда:
CREATE ASSEMBLY TestingCLR FROM N'{здесь локальный путь на сервере только аски-символами}\TestingCLR.dll' вызывает ту же ошибку, а отказаться от загрузки через файл в моем сучае невозможно (((
3 дек 09, 17:16    [8015986]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить