Ошибка входа в SQL для приложения, но не для SSMS
Я написал простое тестовое приложение на C# (4.5), которое не делает ничего, кроме подключения к базе данных и отображения сообщения. (В основном только для проверки развертывания и подключения к БД.) На моей локальной рабочей станции все работает нормально. Я установил SQL Express 2012, подключился как текущий пользователь (встроенная защита), никаких проблем.
Однако при развертывании в Windows Server 2008 приложение не может подключиться к базе данных. Он продолжает получать ошибку входа в систему.
На сервере я следовал той же установке для SQL Express 2012. Я вошел в систему как администратор, когда я запускаю консольное приложение. Я даже пытался включить аутентификацию в смешанном режиме, создать пользователя и подключиться как этот пользователь. Я могу подключиться в SQL Management Studio, но приложение всегда получает ошибку входа в систему.
Есть ли какие-то скрытые настройки безопасности в Windows Server 2008, которые мне нужно изменить, чтобы приложение.NET могло подключаться к серверу SQL? Что может вызвать такое поведение, когда я могу войти в базу данных через SSMS, но не через приложение?
Ошибка:
System.Data.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 ответ
Во-первых, я никогда не видел, чтобы экземпляр 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 с именем пользователя / паролем, чтобы убедиться, что у них есть разрешения.
http://www.connectionstrings.com/ - Отличный ресурс для подключения строк!:)