Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Выпуск Microsoft SQL Server Express Edition (SQL Server Express) поддерживает пользовательские экземпляры, которые доступны только при использовании поставщика данных Microsoft SqlClient для SQL Server. Пользовательский экземпляр — это отдельный экземпляр ядра СУБД SQL Server Express, созданный родительским экземпляром. Пользовательские экземпляры позволяют пользователям, не являющимся администраторами на своих локальных компьютерах, присоединять базы данных SQL Server Express и подключаться к ним. Каждый экземпляр выполняется в контексте безопасности отдельного пользователя на основе модели "один экземпляр на пользователя".
Возможности пользовательского экземпляра
Экземпляры пользователей полезны для тех, кто работает в среде Windows с учетной записью пользователя с минимальными привилегиями (LUA), так как у каждого пользователя есть права системного администратора SQL Server (sysadmin) над экземпляром, работающим на их компьютере, без необходимости выполнения от имени администратора Windows. Программное обеспечение, выполняемое в пользовательском экземпляре с ограниченными разрешениями, не может вносить изменения на уровне системы, так как экземпляр SQL Server Express работает под учетной записью пользователя Windows без прав администратора, а не как служба. Каждый пользовательский экземпляр изолирован от родительского и любых других пользовательских экземпляров, выполняющихся на том же компьютере. Базы данных, запущенные в пользовательском экземпляре, открываются только в однопользовательском режиме. Таким образом несколько пользователей не могут подключаться к базам данных, запущенным в пользовательском экземпляре. Репликация и распределенные запросы также отключены для пользовательских экземпляров.
Дополнительные сведения см. в разделе "Пользовательские экземпляры" документации SQL Server Books Online.
Примечание.
Пользовательские экземпляры не требуются для пользователей, которые уже являются администраторами на своих компьютерах, или для сценариев, включающих несколько пользователей базы данных.
Включение пользовательских экземпляров
Для создания пользовательских экземпляров требуется запуск родительского экземпляра 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также соответствует ключам "Расширенные свойства" и "Исходное имя файла" в строке подключения SqlConnection.Строка замены
|DataDirectory|, заключенная между символами вертикальной черты, указывает на каталог данных приложения, открывающего подключение, и задает относительный путь, указывающий расположение файлов базы данных (.mdf) и журнала (.ldf). Если вы хотите разместить эти файлы в других расположениях, необходимо указать полный путь к ним.
Data Source=.\\SQLExpress;Integrated Security=true;
User Instance=true;AttachDBFilename=|DataDirectory|\InstanceDB.mdf;
Initial Catalog=InstanceDB;
Примечание.
Для создания строки подключения во время выполнения можно также использовать свойства SqlConnectionStringBuilderUserInstance и AttachDBFilename.
Использование строки замены |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.
Примечание.
Microsoft.Data.SqlClient преобразует строки подстановки в полные пути к файлам относительно файловой системы локального компьютера. Поэтому имена удалённых серверов, HTTP-адреса и UNC-пути не поддерживаются. Если сервер не находится на локальном компьютере, во время открытия подключения вызывается исключение.
При открытии SqlConnection оно перенаправляется из экземпляра SQL Server Express, используемого по умолчанию, в экземпляр, инициируемый во время выполнения и работающий под учетной записью вызывающей стороны.
Примечание.
В некоторых случаях может потребоваться увеличить значение ConnectionTimeout, так как для загрузки пользовательских экземпляров может потребоваться больше времени, чем для обычных экземпляров.
Следующий фрагмент кода открывает новый объект SqlConnection, отображает строку подключения в окне консоли, а затем закрывает подключение при выходе из блока кода using.
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);
}
}
Примечание.
Пользовательские экземпляры не поддерживаются в коде среды Common Language Runtime (CLR), выполняемом внутри SQL Server. Исключение InvalidOperationException создается, если метод Open вызывается для объекта SqlConnection, в строке подключения которого указано значение User Instance=true.
Срок существования подключения к пользовательскому экземпляру
В отличие от версий SQL Server, которые запускаются как службы, экземпляры SQL Server Express не нужно запускать и останавливать вручную. Каждый раз, когда пользователь входит в систему и подключается к пользовательскому экземпляру, экземпляр запускается, если он еще не запущен. Для баз данных пользовательских экземпляров задан параметр AutoClose. Это позволяет автоматически завершать работу базы данных по истечении периода бездействия. Запущенный процесс sqlservr.exe выполняется в течение ограниченного времени ожидания после закрытия последнего подключения с экземпляром. Таким образом его не нужно перезапускать при открытии другого подключения до истечения времени ожидания. Пользовательский экземпляр автоматически завершает работу, если до истечения времени ожидания не будет открыто новое подключение. Администратор системы на родительском экземпляре может устанавливать длительность времени ожидания для пользовательского экземпляра при помощи процедуры sp_configure, которая изменяет параметр user instance timeout. Значение по умолчанию — 60 минут.
Примечание.
Если в строке подключения используется 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, указанных в строке подключения.
Примечание.
MDF и LDF представляют файлы базы данных и журнала соответственно. Эти два файла являются сопоставленным набором. Таким образом во время операций резервного копирования и восстановления необходимо соблюдать осторожность. Файл базы данных содержит сведения о точной версии файла журнала. База данных не будет открываться, если она связана с неверным файлом журнала.
Чтобы избежать повреждения данных, база данных в пользовательском экземпляре открывается с монопольным доступом. Если два разных пользовательских экземпляра совместно используют одну и ту же базу данных на одном компьютере, пользователь первого экземпляра должен закрыть базу данных, прежде чем ее можно будет открыть во втором экземпляре.
Сценарии для пользовательских экземпляров
Пользовательские экземпляры предоставляют разработчикам приложений баз данных хранилище данных SQL Server. Это хранилище не зависит от разработчиков, имеющих административные учетные записи на компьютерах разработки. Пользовательские экземпляры основаны на модели Access/Jet, где приложение базы данных просто подключается к файлу и пользователь автоматически получает полный набор разрешений на все объекты базы данных без необходимости предоставления разрешений администратором. Эта модель предназначена для ситуаций, когда пользователь работает с учетной записью с минимальными правами (LUA) и не имеет прав администратора на сервере или на локальном компьютере, но требует создания объектов базы данных и приложений. Пользовательские экземпляры позволяют пользователям создавать экземпляры во время работы, которые запускаются в собственном контексте безопасности пользователя, а не в контексте безопасности более привилегированной системной службы.
Внимание
Пользовательские экземпляры следует использовать только в сценариях, где все использующие их приложения являются полностью доверенными.
Сценарии пользовательских экземпляров включают:
Любое приложение с одним пользователем, в котором не требуется совместное использование данных.
Развертывание ClickOnce. Если .NET Framework 2.0 (или более поздняя версия) либо .NET Core 1.0 (или более поздняя версия), а также SQL Server Express уже установлены на целевом компьютере, пакет установки, загруженный как результат действия ClickOnce, может быть установлен и использован пользователями, не имеющими административных привилегий. Обратите внимание, что администратор должен установить SQL Server Express, если он является частью процесса установки. Дополнительные сведения см. в статье ClickOnce Deployment for Windows Forms (Развертывание ClickOnce для Windows Forms).
Выделенный хостинг ASP.NET с проверкой подлинности Windows. В интрасети может размещаться один экземпляр SQL Server Express. Приложение подключается с помощью учетной записи ASP.NET Windows, а не с использованием олицетворения. Пользовательские экземпляры не следует использовать в сценариях стороннего или совместного хостинга, где все приложения используют один и тот же пользовательский экземпляр и, следовательно, перестают быть изолированными друг от друга.