Назад | Перейти на главную страницу

Я очень запутался в экземплярах SQL Server Express / к чему я на самом деле подключаюсь?

Я запускаю SQL Express 2008 на своей машине разработки с одним экземпляром.

Для некоторой разработки я использовал строку подключения AttachDB. Я действительно не могу вспомнить точную причину, но они не установлены обычным способом. Я думаю, что хотел вживую отредактировать некоторые данные, и спустя много лет я узнал, как подключиться из студии управления ... Я использовал \\.\pipe\A2108B22-19AA-41\tsql\query

Тем не менее, я пытаюсь изучить управление MS SQL немного глубже, и мне было интересно, как это технически работает и как оно отделено от основного экземпляра (подключается через .\SQLExpress)?

Кроме того, я помню, что где-то читал, но могу ошибаться, что это особенность SQL Express, а не основной продукт SQL Server. Это правильно или я ошибаюсь?

Причина последней части вопроса в том, что мне было интересно, является ли это своего рода «черным ходом» в хостинге SQL или можно ли его отключить. Я размещаю несколько веб-сайтов для людей, и я выдал пользователю / пропуску и БД с ограничением размера для людей. Прежде чем я часами тестировал / копался, я просто подумал, есть ли у кого-нибудь представление об этом?

Если вы используете строку подключения, которая выглядит так:

AttachDBFilename=|DataDirectory|MyDB.mdf;User Instance=true` 

то вы используете функцию SQL Express, известную как «создание экземпляров пользователя».

Эта функция была введена в SQL Server Express 2005 и предоставила разработчикам возможность запускать экземпляр SQL Server под своим собственным (не администраторским) именем входа.

Еще есть .\SQLExpress запущенный именованный экземпляр, то есть созданный во время установки. Однако при подключении к базе данных с помощью AttachDBFilename функция экземпляра пользователя, новый Экземпляр SQL Express развернут для обработки доступа к AttachDBFilename база данных, этот «пользовательский экземпляр» работает под вашей учетной записью Windows.

Связь с этим экземпляром происходит через именованный канал (как вы выяснили).

Здесь есть информативная статья о User Instancing от Microsoft:

Пользовательские экземпляры для неадминистраторов (MSDN)

Хотя эта функция все еще доступна в SQL Server 2008 R2 Express, похоже, что она устарела или, возможно, будет удалена в ближайшем будущем, и вам рекомендуется не использовать ее:

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

Пользовательские экземпляры также несовместимы с сайтами, работающими под ApplicationPoolIdentity учетная запись на IIS7 и IIS7.5. Для получения дополнительной информации см. Эту статью базы знаний MS:

Проблемы с пользовательским экземпляром SQL Server Express и проектами веб-приложений ASP.net

Веб-приложения, созданные с помощью Visual Studio 2005, Visual Studio 2008 или Visual Studio 2010 и использующие пользовательские экземпляры с помощью SQL Server Express 2005 или SQL Server Express 2008, не работают с новым удостоверением пула приложений. Эти продукты были разработаны и протестированы на пулах приложений, работающих со старой учетной записью NETWORK SERVICE.

Если вы хотите просто разместить свою базу данных в обычном .\SQLExpress экземпляра и иметь доступ к нему через TCP / IP, как к обычному SQL Server, тогда вам нужно сделать несколько вещей:

  1. Включите TCP / IP для SQL Express. Установка по умолчанию включает только именованные каналы. Вы можете сделать это с помощью диспетчера конфигурации SQL Server:

  2. При установке SQL Express по умолчанию используется NETWORK SERVICE учетная запись в качестве учетной записи службы. Возможно, вам потребуется предоставить разрешения на изменение для этой учетной записи в папке, содержащей ваш .mdf файл.

  3. Прикрепите .mdf файл в вашем App_Data папку в .\SQLExpress пример.

  4. Измените строку подключения на регулярный строка подключения, например

    <add name="SupportSystem" 
         connectionString="Database=MyDatabaseName;Data Source=172.16.3.44\SQLEXPRESS;User ID=dbuser;Password=dbpassword;Initial Catalog=MyDatabaseName;" 
         providerName="System.Data.SqlClient"/>