Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 CLR от имени пользователя  [new]
Ilyaruss
Member

Откуда:
Сообщений: 55
Мне нужно в триггере CLR сохранить файл из поля image на диск. Все очень хорошо и удобно работает.

Вот на примере процедуры, как все должно работать:
[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean FunctionExportToDisk(String file, Byte[] content)
{
// Поместите здесь код по назначению прав
try
{
System.IO.File.WriteAllBytes(file, content);
}
catch
{
return false;
}


return true;
}
Единственное что не смог сделать: задать права на запись в папку. Нельзя всем давать права на запись и удаление и папки. А нужно лишь некоторым.
Вопрос: как запустить эту процедуру от имени пользователя, у которого есть права на запись?
Всем заранее спасибо.
10 ноя 11, 16:19    [11576380]     Ответить | Цитировать Сообщить модератору
 Re: CLR от имени пользователя  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Заводите служебный Windows-логин, обладающий необходимыми правами, либо заводите служебный SQL-логин, тогда нужными правами надо наделить аккаунт, от имени которого работает служба сервера. Создаете для этого логина пользователя в БД. Триггер создаете с опцией execute as 'username'.

ЗЫ: За "в триггере CLR сохранить файл из поля image на диск" увольнять как профнепригодных...
10 ноя 11, 16:44    [11576659]     Ответить | Цитировать Сообщить модератору
 Re: CLR от имени пользователя  [new]
Ilyaruss
Member

Откуда:
Сообщений: 55
автор
За "в триггере CLR сохранить файл из поля image на диск" увольнять как профнепригодных...

Ситуации же разные бывают, может кто по другому взглянет на вещи: есть купленная программа, которая работает с SQL Server. Нужно файлы которые в ней прикрепляют (базу данных в поле image) сохранять на диск, для другой программы, которая работает только с диском. Доработать программы ясное дело нельзя, файл в два места сохранять тоже никого не заставить. Как быстрее всего выполнить такую задачу, предлагайте ваши идеи?
10 ноя 11, 17:20    [11577041]     Ответить | Цитировать Сообщить модератору
 Re: CLR от имени пользователя  [new]
invm
Member

Откуда: Москва
Сообщений: 9836
Ilyaruss, асинхронно через ServiceBroker. Так вы не убьете производительность основного приложения и обеспечите запись файлов для другого. И проблем с безопасностью не возникнет.
10 ноя 11, 17:46    [11577325]     Ответить | Цитировать Сообщить модератору
 Re: CLR от имени пользователя  [new]
Ilyaruss
Member

Откуда:
Сообщений: 55
Спасибо за совет. Да, сначала тоже думал сделать триггер асинхронным через ServiceBroker. Но производительность практически не упала. Средний размер файла 20 кб. В программе по ее специфике не может быть файлов большего размера. А если все уже и так работает, то лучше это не трогать.
10 ноя 11, 18:54    [11577835]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить