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

Откуда:
Сообщений: 205
Задача состоит в том, чтобы из хранимой процедуры, которая находится в C# SQL-сборке, получить доступ на чтение к сетевому файловому ресурсу, находящемуся внутри сети предприятия.
Код хранимой процедуры сборки следующий:
using System;
using System.IO;
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 TestStoredProcedure()
  {
    //Поиск файлов в сети по маске
    string[] sStringsList = Directory.GetFiles(@"\\test-server\public\", "*.txt", SearchOption.TopDirectoryOnly);
  }
};

После развёртывания сборки на сервере и выполнения хранимой процедуры:
USE [TestDataBase]
GO
EXEC [dbo].[TestStoredProcedure]

выдаётся следующая ошибка:
Msg 6522, Level 16, State 1, Procedure TestStoredProcedure, Line 0
Произошла ошибка .NET Framework во время выполнения определяемой пользователем подпрограммы или агрегатной функции "TestStoredProcedure":
System.Security.SecurityException: Request for the permission of type 'System.Security.Permissions.FileIOPermission, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' failed.
System.Security.SecurityException:
at System.Security.CodeAccessSecurityEngine.Check(Object demand, StackCrawlMark& stackMark, Boolean isPermSet)
at System.Security.CodeAccessPermission.Demand()
at System.IO.Directory.InternalGetFileDirectoryNames(String path, String userPathOriginal, String searchPattern, Boolean includeFiles, Boolean includeDirs, SearchOption searchOption)
at System.IO.Directory.GetFiles(String path, String searchPattern, SearchOption searchOption)
at StoredProcedures.TestStoredProcedure()
.

Что нужно дописать в коде, чтобы функция Directory.GetFiles смогла получить доступ к файловой системе?
26 апр 13, 11:50    [14234279]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10233
Блог
1) как зарегестрирована сборка?
2) есть ли права на эту шару у УЗ?
26 апр 13, 11:52    [14234289]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37077
Degun,

сборка должна быть зарегистрирована в режиме UNSAFE
и еще нужно выставить

ALTER DATABASE dbname SET TRUSTWORTHY ON;
26 апр 13, 11:54    [14234300]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Degun
Member

Откуда:
Сообщений: 205
автор
1) как зарегестрирована сборка?
2) есть ли права на эту шару у УЗ?

Сборка была размещена на сервере через пункт меню "Развертывание", которое появляется при клике правой кнопкой на проекте.
А что такое УЗ?
26 апр 13, 12:15    [14234451]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Degun
Member

Откуда:
Сообщений: 205
Wizandr
сборка должна быть зарегистрирована в режиме UNSAFE

А не подскажите как это сделать.
26 апр 13, 12:16    [14234455]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Degun
Wizandr
сборка должна быть зарегистрирована в режиме UNSAFE

А не подскажите как это сделать.

В Visual Studio в свойствах проекта на вкладке Database можно выбрать Permission Level из трёх вариантов: Safe, External и Unsafe.
26 апр 13, 12:27    [14234505]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37077
Degun
Wizandr
сборка должна быть зарегистрирована в режиме UNSAFE

А не подскажите как это сделать.


ALTER ASSEMBLY assembname WITH PERMISSION_SET = EXTERNAL_ACCESS
26 апр 13, 12:30    [14234518]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37077
Wizandr
Degun
пропущено...

А не подскажите как это сделать.


ALTER ASSEMBLY assembname WITH PERMISSION_SET = [b]UNSAFE[/b]


т.е. так
26 апр 13, 12:31    [14234522]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Wizandr
Wizandr
пропущено...


ALTER ASSEMBLY assembname WITH PERMISSION_SET = [b]UNSAFE[/b]


т.е. так

Сдаётся мне, эта настройка сбросится после очередного "развёртывания сборки на сервере" при помощи Visual Studio.
26 апр 13, 12:35    [14234542]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Degun
Member

Откуда:
Сообщений: 205
Гость333
Degun
пропущено...

А не подскажите как это сделать.

В Visual Studio в свойствах проекта на вкладке Database можно выбрать Permission Level из трёх вариантов: Safe, External и Unsafe.

Спасибо. Получилось. На вкладке Database выбрал тип External.
26 апр 13, 13:41    [14234952]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37077
Degun
Гость333
пропущено...

В Visual Studio в свойствах проекта на вкладке Database можно выбрать Permission Level из трёх вариантов: Safe, External и Unsafe.

Спасибо. Получилось. На вкладке Database выбрал тип External.


для доступа к файловой системе нужно Unsafe
26 апр 13, 13:47    [14234998]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
HandKot
Member

Откуда: Sergiev Posad
Сообщений: 3058
Wizandr
Degun
пропущено...

Спасибо. Получилось. На вкладке Database выбрал тип External.


для доступа к файловой системе нужно Unsafe


Сборка EXTERNAL_ACCESS предназначена для сценариев, в которых коду требуется получить доступ к ресурсам, 
внешним по отношению к серверу, например к файлам, сети, реестру или переменным среды. 
Каждый раз, когда сервер получает доступ к внешним ресурсам, он олицетворяет контекст безопасности пользователя, вызывающего управляемый код.

?
26 апр 13, 13:57    [14235093]     Ответить | Цитировать Сообщить модератору
 Re: Доступ к файловой системе из SQL-сборки  [new]
Wizandr
Member

Откуда: Империя Добра
Сообщений: 37077
HandKot
Wizandr
пропущено...


для доступа к файловой системе нужно Unsafe


Сборка EXTERNAL_ACCESS предназначена для сценариев, в которых коду требуется получить доступ к ресурсам, 
внешним по отношению к серверу, например к файлам, сети, реестру или переменным среды. 
Каждый раз, когда сервер получает доступ к внешним ресурсам, он олицетворяет контекст безопасности пользователя, вызывающего управляемый код.

?


да, сорри.
Unsafe необходим только если к файлы нужно лезть по сети на другой компьютер
26 апр 13, 14:20    [14235230]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить