Я написал простое тестовое приложение на C # (4.5), которое не делает ничего, кроме подключения к базе данных и отображения сообщения. (В основном только для проверки развертывания и подключения к БД.) На моей локальной рабочей станции все работает нормально. Я установил SQL Express 2012, подключился как текущий пользователь (встроенная защита), никаких проблем.

Однако при развертывании в Windows Server 2008 приложение не может подключиться к базе данных. Он продолжает получать ошибку входа в систему.

На сервере я следовал той же установке для SQL Express 2012. Я вошел в систему как администратор, когда я запускаю консольное приложение. Я даже пытался включить аутентификацию в смешанном режиме, создать пользователя и подключиться как этот пользователь. Я могу подключиться в SQL Management Studio, но приложение всегда получает ошибку входа в систему.

Есть ли какие-то скрытые настройки безопасности в Windows Server 2008, которые мне нужно изменить, чтобы приложение .NET могло подключаться к серверу SQL? Что может вызвать такое поведение, когда я могу войти в базу данных через SSMS, но не через приложение?

Ошибка:

Система.Данные.SqlClient.SqlException (0x80131904): Невозможно открыть базу данных "TestDatabase", запрошенную при входе в систему. Ошибка входа. Ошибка входа для пользователя 'sa'.

Естественно, это версия ошибки, когда я пытался подключиться как sa как своего рода последнее усилие для тестирования. Та же ошибка происходит для TestUser (пользователь SQL, которого я создал для этого), а также PERSONALSERVER\Administrator (текущий вошедший в систему пользователь, запускающий приложение).

Строки подключения, которые я пробовал:

  • Data Source=localhost\sqlexpress2012;Initial Catalog=TestDatabase;Integrated Security=True
  • Data Source=localhost\sqlexpress2012;Initial Catalog=TestDatabase;User Id=TestUser;Password=testpassword

1 ответ1

1

Во-первых, я никогда не видел, чтобы экземпляр SQL Express использовал год. Обычно это всегда localhost\SqlExpress

В диспетчере конфигурации убедитесь, что TCP/IP и Именованные каналы включены.

В панели управления попробуйте создать соединение SQL с драйвером SQL Server (в разделе «Администрирование» -> «Источники данных»), поскольку это будет просто для проверки локального соединения с очень небольшим количеством переменных (например, с вашим кодом (который, я уверен, написан отлично). :)))

Кроме того, у вас есть 2 места, где вы ссылаетесь на строку подключения (я сделал это); он был сохранен в моем файле app.config и в виде строки в моем коде (или даже в строке ресурса).

Подключайтесь через IP-адрес вместо имени компьютера (это также означает обновление строки подключения - подробности о том, как внизу этого поста).

Наконец, обновите строку подключения до

Источник данных =.\ Sqlexpress2012; Начальный каталог = TestDatabase; Интегрированная безопасность = SSPI; ID пользователя = myDomain\ myUsername; Password = MyPassword;

или попробуйте это с:

. Сервер = \sqlexpress2012; Database = TestDatabase; Trusted_Connection = True;

Я предполагаю, что пользователь имеет эффективные права на данную базу данных. :)

Убедитесь, что порты SQL, обычно 1433 и 1434, открыты.

Войдите в систему SSMS с именем пользователя / паролем, чтобы убедиться, что у них есть разрешения.

WWW.ConnectionStrings.com - отличный ресурс для подключения строк! :)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .