Не удается открыть базу данных, запрошенную при входе в систему

У меня есть база данных SQL Server 2008 R2 Express.

Я написал приложение Delphi, которое использует объект TADOConnection для подключения к базе данных. Он отлично работает на моем компьютере. Не удается подключиться с других компьютеров в сети.

Он дает сообщение об ошибке:

Не удается открыть базу данных «PeopleNetLink», запрошенную при входе в систему.

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

Моя строка подключения

Provider=SQLNCLI10.1;
Integrated Security="";
Persist Security Info=False;
User ID=PNetLink;
Initial Catalog=PeopleNetLink;
Data Source=W1CNVS02\SQLEXPRESSPAY12;
Use Procedure for Prepare=1;
Auto Translate=True;
Packet Size=4096;
Initial File Name="";
Use Encryption for Data=False;
Tag with column collation when possible=False;
MARS Connection=False;
DataTypeCompatibility=0;
Trust Server Certificate=False;
Server SPN=""

Дальнейшие эксперименты показывают, что если я войду на другой компьютер в качестве администратора, программа успешно войдет в систему. Это говорит мне, что он не использует идентификатор пользователя, указанный в строке подключения. Теперь вопрос "почему бы и нет?"


person WeststarEric    schedule 11.12.2015    source источник
comment
Можете ли вы пропинговать W1CNVS02 с одной из других рабочих станций? Если это так, проверьте настройки брандмауэра. Также вы можете открыть любую другую базу данных на сервере с одной из других машин?   -  person MartynA    schedule 11.12.2015
comment
Редакции Express по умолчанию не разрешают удаленные подключения — вам нужно включить их явным образом. Вы сделали это?   -  person marc_s    schedule 12.12.2015
comment
По-видимому, он не использует идентификатор пользователя, указанный в строке подключения. Не знаю, почему бы и нет.   -  person WeststarEric    schedule 12.12.2015


Ответы (1)


Это немного далеко, так как у меня не установлен Sql Server 2008, только версия 2014 года. И, возможно, вы уже пробовали это, но я потратил часы на эту проблему, прежде чем нашел шаг, который мне не хватало.

Предполагая, что такая утилита, как MS PortQry, показывает, что брандмауэр локальной сети сервера открыт и что ваша версия 2008 года поставляется с установленной копией Sql Server Management Studio:

  • Запустите SSMS на сервере,

  • Щелкните правой кнопкой мыши свойства сервера Sql.

  • Во всплывающем окне «Свойства» перейдите на вкладку «Подключения».

  • Установите флажок «Разрешить удаленные подключения к этому серверу».

В некоторых выпусках Sql Server «Разрешить удаленные подключения ...» по умолчанию не установлен флажок, что, похоже, соответствует комментарию marc_s.

Обновление: что касается вашего добавления «Это говорит мне, что он не использует идентификатор пользователя, указанный в строке подключения.»:

Если вы откроете DFM как текст и вручную отредактируете строку подключения, чтобы «Идентификатор пользователя» имел полностью фиктивное значение, а затем вернетесь к построителю строки подключения, вы должны найти две вещи:

  1. Enter information to log on to server возвращается к Use a specific user name and password, поэтому, если вы затем нажмете Test connection, неудивительно, что тест провалится.

  2. Если затем выбрать Use Windows NT Integrated security и снова щелкнуть Test connection, тест пройдет успешно.

Из 2. видно, что «Идентификатор пользователя» в строке подключения игнорируется при использовании проверки подлинности Windows. Это не кажется мне удивительным, поскольку смысл использования аутентификации Windows заключается в том, что используемые учетные данные принадлежат вошедшему в систему пользователю Windows. Вы уже установили, что если вы войдете на другом компьютере в качестве администратора (я полагаю, вы имеете в виду учетную запись администратора Windows), соединение будет установлено успешно, поэтому я подумал, что учетную запись без прав администратора необходимо добавить в учетную запись. Признанные пользователи Sql Server, если вы хотите подключиться с использованием этого идентификатора (хотя, признаюсь, мне совсем не ясно, действительно ли вы пытаетесь подключиться, используя проверку подлинности Windows для определенной учетной записи Sql Server).

Если вы все еще застряли, попробуйте использовать, например. Microsoft OLE DB Driver for SQL Server вместо SQL Server Native Client. Вы также можете просмотреть эту статью пошагово:

https://social.msdn.microsoft.com/Forums/en-US/523c7b7e-6216-4790-87cb-945f3c1f4c5e/can-not-connect-to-microsoft-sql-server-express-2012?forum=sqlexpress

Кроме того, гугл

sql server express 2008 remote "secpol.msc"

и обратите внимание на такие статьи, как эта

https://social.msdn.microsoft.com/forums/sqlserver/en-US/1f5221bf-f5c3-4307-836b-a4f9dc07f02f/very-strange-remote-connection-issues

person MartynA    schedule 11.12.2015