Поделиться через


Соединение с пользовательскими экземплярами SQL Server Express (ADO.NET)

Обновлен: November 2007

Выпуск Microsoft SQL Server 2005 Express Edition (SQL Server Express) поддерживает новую функцию — пользовательский экземпляр, который доступен только при использовании поставщика данных .NET Framework для SQL Server (SqlClient). Пользовательским экземпляром является отдельный экземпляр компонента SQL Server Express Database Engine, который формируется родительским экземпляром. Пользовательские экземпляры позволяют пользователям, не являющимся администраторами на их локальных компьютерах, присоединяться и подключаться к базам данных SQL Server Express. Каждый экземпляр выполняется в контексте безопасности отдельного пользователя, один экземпляр на одного пользователя.

Возможности пользовательского экземпляра

Пользовательские экземпляры полезны для пользователей, работающих в операционной системе Windows под учетной записью с наименьшими правами доступа (LUA), т. к. у каждого пользователя имеются права доступа системного администратора SQL Server (sysadmin) на экземпляре, выполняющемся на его компьютере, при этом нет необходимости иметь также права администратора Windows. Программное обеспечение, выполняющееся в пользовательском экземпляре с ограниченными разрешениями, не может выполнять общесистемные изменения, т. к. экземпляр SQL Server Express выполняется под учетной записью пользователя без прав администратора Windows и не как служба. Каждый пользовательский экземпляр изолирован от родительского и любых других пользовательских экземпляров, выполняющихся на том же компьютере. Базы данных, выполняющиеся в пользовательском экземпляре, открываются только в однопользовательском режиме, и для нескольких пользователей невозможно подключаться к базам данных, выполняющимся в пользовательском экземпляре. Репликация и распределенные запросы для пользовательских экземпляров также отключены.

Дополнительные сведения см. в разделе «Пользовательские экземпляры» электронной документации по SQL Server 2005.

ms254504.alert_note(ru-ru,VS.90).gifПримечание.

Пользовательские экземпляры не нужны для пользователей, которые уже являются администраторами на своих собственных компьютерах, или для сценариев, включающих несколько пользователей баз данных.

Включение пользовательских экземпляров

Для формирования пользовательских экземпляров должен выполняться родительский экземпляр SQL Server Express. Пользовательские экземпляры по умолчанию включаются, если установлен SQL Server Express, и они могут быть явно включаться или отключаться системным администратором, выполняющим системную хранимую процедуру sp_configure в родительском экземпляре.

-- Enable user instances.
sp_configure 'user instances enabled','1' 

-- Disable user instances.
sp_configure 'user instances enabled','0'

Для пользовательских экземпляров поддерживается только сетевой протокол локальных именованных каналов. Пользовательский экземпляр не может быть запущен на удаленном экземпляре SQL Server, и имена входа SQL Server не разрешаются.

Соединение с пользовательским экземпляром

Ключевые слова User Instance и AttachDBFilenameConnectionString разрешают подключение SqlConnection к пользовательскому экземпляру. Пользовательские экземпляры также поддерживаются свойствами SqlConnectionStringBuilderUserInstance и AttachDBFilename.

Следует отметить следующее относительно образца строки соединения, показанного далее.

  • Ключевое слово Data Source ссылается на родительский экземпляр SQL Server Express, который формирует пользовательский экземпляр. Экземпляром по умолчанию является .\sqlexpress.

  • Для Integrated Security установлено значение true. Чтобы подключиться к пользовательскому экземпляру, требуется проверка подлинности Windows; имена входа SQL Server не поддерживаются.

  • Для User Instance установлено значение true, которое вызывает экземпляр пользователя. (По умолчанию используется false.)

  • Ключевое слово строки подключения AttachDbFileName используется для присоединения файла базы данных-источника (MDF-файла) и должно содержать полный путь к файлу. AttachDbFileName также соответствует параметрам «extended properties» и «initial file name» в строке подключения SqlConnection.

  • Строка |DataDirectory|, заключенная в символы канала, ссылается на каталог данных приложения, открывающего соединение, и предоставляет относительный путь, указывающий местоположение MDF- и LDF-файлов базы данных, а также файлов журнала. Если нужно найти эти файлы, необходимо предоставить полный путь к файлам.

Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf;
Initial Catalog=InstanceDB;
ms254504.alert_note(ru-ru,VS.90).gifПримечание.

Свойства SqlConnectionStringBuilderUserInstance и AttachDBFilename также можно использовать для создания строки подключения во время выполнения.

Использование строки замены DataDirectory

Свойство AttachDbFileName было расширено в ADO.NET 2.0 с введением строки подстановки |DataDirectory| (заключаемой в символы конвейера). Строка подстановки DataDirectory в сочетании с именем AttachDbFileName позволяет указывать относительный путь к файлу данных, тем самым позволяя разработчикам создавать строки соединения на основе относительного пути к источнику данных, не задавая полный путь.

Физическое расположение, на которое указывает DataDirectory, зависит от типа приложения. В этом примере нужный файл Northwind.mdf находится в папке приложения \app_data.

Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;
AttachDBFilename=|DataDirectory|\app_data\Northwind.mdf;
Initial Catalog=Northwind;

Если используется строка замены DataDirectory, то полученный в результате путь к файлу может находиться выше в структуре каталогов, чем каталог, на который указывает строка замены. Например, если полностью развернутая строка DataDirectory — это C:\AppDirectory\app_data, то показанный выше образец строки соединения работает, поскольку находится ниже c:\AppDirectory. Но попытка задать DataDirectory как |DataDirectory|\..\data завершится ошибкой, потому что «\data» не является подкаталогом «\AppDirectory».

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

ms254504.alert_note(ru-ru,VS.90).gifПримечание.

System.Data.SqlClient преобразует строки замены в полные пути файловой системы локального компьютера. Поэтому удалите неподдерживаемые пути удаленного сервера, HTTP и UNC. Исключение вызывается при открытии соединения, если сервер не расположен на локальном компьютере.

Если SqlConnection открыто, оно перенаправляется от экземпляра по умолчанию SQL Server Express на инициированный экземпляр времени исполнения, выполняющийся под учетной записью вызывающего.

ms254504.alert_note(ru-ru,VS.90).gifПримечание.

Может быть необходимым увеличить значение ConnectionTimeout, т. к. для пользовательских экземпляров может понадобиться для загрузки больше времени, чем для обычных экземпляров.

В следующем фрагменте кода открывается новое SqlConnection, отображается строка соединения в окне консоли, а затем при выходе из блока кода using подключение закрывается.

Private Sub OpenSqlConnection()
    ' Retrieve the connection string.
    Dim connectionString As String = GetConnectionString()

    Using connection As New SqlConnection(connectionString)
        connection.Open()
        Console.WriteLine("ConnectionString: {0}", _
           connection.ConnectionString)
    End Using
End Sub
private static void OpenSqlConnection()
{
    // Retrieve the connection string.
    string connectionString = GetConnectionString();

    using (SqlConnection connection = 
        new SqlConnection(connectionString))
    {
        connection.Open();
        Console.WriteLine("ConnectionString: {0}", 
             connection.ConnectionString);
    }
}
ms254504.alert_note(ru-ru,VS.90).gifПримечание.

Пользовательские экземпляры не поддерживаются в коде среды CLR, который выполняется внутри SQL Server. InvalidOperationException вызывается, если Open вызывается на SqlConnection, которое имеет User Instance=true в строке соединения.

Время существования соединения пользовательского экземпляра

В отличие от версий SQL Server, который выполняется как служба, экземпляры SQL Server Express не нужно запускать и останавливать вручную. Каждый раз, когда пользователь входит в систему и подключается к пользовательскому интерфейсу, пользовательский экземпляр запускается, если он еще не запущен. Базы данных пользовательского экземпляра имеют параметр AutoClose, установленный таким образом, что база данных автоматически завершает работу после периода неактивности. Запущенный процесс sqlservr.exe выполняется в течение ограниченного времени ожидания после закрытия последнего соединения с экземпляром, так что его не нужно перезапускать, если другое соединение открыто до истечения времени ожидания. Пользовательский экземпляр автоматически завершает работу, если до истечения времени ожидания не открывается ни одного нового соединения. Администратор системы на родительском экземпляре может устанавливать длительность времени ожидания для пользовательского экземпляра при помощи процедуры sp_configure, которая изменяет параметр время ожидания пользовательского экземпляра. Значение по умолчанию — 60 минут.

ms254504.alert_note(ru-ru,VS.90).gifПримечание.

Если Min Pool Size используется в строке соединения со значением, большим нуля, организаторов пулов соединений будет всегда поддерживать несколько открытых соединений и пользовательский экземпляр не будет завершать свою работу.

Работа пользовательских экземпляров

При первом создании пользовательского экземпляра для любого пользователя системные базы данных master и msdb копируются из папки Template Data в локальный пользовательский каталог-репозиторий для монопольного использования пользовательским экземпляром. Обычно это путь C:\Documents and Settings\<UserName>\Local Settings\Application Data\Microsoft\Microsoft SQL Server Data\SQLEXPRESS. При запуске пользовательского экземпляра база данных tempdb журнал и файлы трассировки также записываются в этот каталог. Создается имя экземпляра, уникальное для каждого пользователя.

По умолчанию всем членам группы Windows Builtin\Users предоставляются разрешения для подключения к локальному экземпляру, а также разрешения на чтение и выполнение в исполняемых файлах SQL Server. После проверки учетных данных вызывающего пользователя, на которых основан пользовательский экземпляр, пользователь становится sysadmin на этом экземпляре. Для пользовательских экземпляров включена только общая память, что означает, что возможны только операции на локальном компьютере.

Пользователям необходимо предоставить разрешения как для чтения, так и для записи в файлы MDF и LDF, указанные в строке соединения.

ms254504.alert_note(ru-ru,VS.90).gifПримечание.

Файлы MDF и LDF представляют файлы базы данных и журнала соответственно. Эти два файла являются согласованным набором, так что во время операций резервного копирования и восстановления следует проявлять осторожность. Файл базы данных содержит сведения о точной версии файла журнала, и база данных не откроется, если она сочетается с неверным файлом журнала.

Для предотвращения повреждения данных база данных в пользовательском экземпляре открывается с монопольным доступом. Если два разных пользовательских интерфейса используют одну и ту же общую базу данных на одном компьютере, пользователь на первом экземпляре должен закрыть базу данных перед тем, как ее можно будет открыть на втором экземпляре.

Сценарии пользовательских экземпляров

Пользовательские экземпляры предоставляют разработчикам приложений баз данных хранилище данных SQL Server, которое не зависит от разработчиков, имеющих административные учетные записи в своих компьютерах. Пользовательские экземпляры основаны на модели Access/Jet, в которой приложение базы данных просто соединяется с файлом, и пользователь автоматически имеет все разрешения на всех объектах базы данных без необходимости вмешательства системного администратора для предоставления разрешений. Они предназначены для работы в ситуациях, в которых пользователь работает с учетной записью, имеющей наименьшие права доступа (LUA), и не имеет административных прав доступа на сервере или локальном компьютере, но ему нужно создавать объекты и приложения базы данных. Пользовательские экземпляры позволяют пользователям создавать экземпляры во время выполнения в своем собственном контексте безопасности, а не в контексте безопасности системной службы с более широкими правами доступа.

ms254504.alert_security(ru-ru,VS.90).gifПримечание о безопасности.

Пользовательские экземпляры должны использоваться только в сценариях, в которых все использующие его приложения являются полностью доверенными.

Сценарии пользовательских экземпляров включают следующее.

  • Однопользовательское приложение, в котором обмен данными не требуется.

  • Развертывание ClickOnce. Если .NET Framework 2.0 (или более поздняя версия) и SQL Server Express уже установлены на целевом компьютере, пакет установки, загруженный как результат действия ClickOnce, может быть установлен и использован пользователями, не имеющими административных привилегий. Следует отметить, что администратор должен установить SQL Server Express, если он является частью установки. Дополнительные сведения см. в разделе Развертывание ClickOnce для приложений Windows Forms.

  • Специальное размещение ASP.NET с использованием проверки подлинности Windows. Один экземпляр SQL Server Express может быть размещен в интрасети. Приложение подключается с использованием учетной записи ASPNET Windows, а не при помощи олицетворения. Пользовательские экземпляры не должны использоваться для сценариев сторонних производителей или общего размещения, где все приложения используют общий пользовательский экземпляр и больше не остаются изолированными друг от друга.

См. также

Другие ресурсы

SQL Server и ADO.NET

Строки соединения (ADO.NET)

Соединение с источником данных (ADO.NET)