Ошибка входа в SQL для приложения, но не для SSMS

3752
David

Я написал простое тестовое приложение на 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
0
Используете ли вы аутентификацию Windows в SSMS и в вашем приложении? Amiram Korach 11 лет назад 0
@AmiramKorach: я попробовал аутентификацию Windows и аутентификацию SQL в обоих, одинаковые результаты. David 11 лет назад 0
Возможно, ваша строка подключения неверна. Пожалуйста, добавьте это. Amiram Korach 11 лет назад 0
Вопрос дополнен дополнительными подробностями. David 11 лет назад 0
Можете ли вы проверить журнал Sql Server? Я не ожидал бы сообщения «сбой входа в систему», если вы не общаетесь с базой данных sql. sgmoore 11 лет назад 1
> Есть ли в Windows Server 2008 какой-то скрытый параметр безопасности, который мне нужно изменить, чтобы приложение .NET могло подключаться к серверу SQL? Простой способ опровергнуть это - загрузить и попробовать LinqPad (с http://www.linqpad.net/). sgmoore 11 лет назад 1
у тебя это работает? user46193 9 лет назад 0

1 ответ на вопрос

1
Dave

First, I've never seen an SQL express instance use the year. Typically it is always localhost\SqlExpress

In configuration manager, ensure TCP/IP and Named Pipes are enabled.

In control panel, try and create a SQL connection with the SQL Server Driver (under Administrative tools) -> Data Sources as this will just test a local connection with very few variables (eg, your code (which I'm sure is written perfectly :) ))

Also, do you have 2 places you are referencing your connection string (I've done this); it was saved in my app.config file and as a string in my code (or even a resource string).

Connect via IP address instead of computer name (this means updating your connection string too - details on how at bottom of this post).

Lastly, update your connection string to

Data Source=.\sqlexpress2012; Initial Catalog=TestDatabase; Integrated Security=SSPI; User ID=myDomain\myUsername; Password=myPassword;

or try it with:

Server=.\sqlexpress2012; Database=TestDatabase; Trusted_Connection=True;

I will assume the user has efficient rights to the database in question. :)

Ensure the SQL ports, typically 1433 and 1434 are open.

Log on to SSMS with the username/password to ensure they do have permissions.

www.ConnectionStrings.com - Great resource for connection strings! :)

Я назвал экземпляр `sqlexpress2012` во время установки. David 11 лет назад 0
Много полезных советов :) TCP / IP и Named Pipes действительно были отключены, но их включение, похоже, не меняет результат. Тест источников данных сработал, но приложение все еще не работает. (Заставляет меня задуматься, относится ли это к уровню доверия .NET Framework или к чему-то в этом роде.) Он определенно использует строку подключения из файла конфигурации, потому что, когда я изменяю ее, изменяется получающаяся ошибка (имя пользователя и т. Д.). Пользователь имеет права доступа к БД и может без проблем взаимодействовать с ней через SSMS. David 11 лет назад 0
Linq to Sql. Приложение настолько простое, насколько оно возможно, оно просто создает контекст данных и запрашивает первую строку из единственной таблицы в базе данных. Я вошел в систему как администратор, поэтому он должен работать как таковой ... David 11 лет назад 0
Их нужно вручную открывать на локальном хосте? Я запускаю приложение на том же компьютере, на котором работает база данных (через RDP). David 11 лет назад 0
Все еще не повезло. Он определенно подключается к серверу SQL, поскольку возвращает сообщение об ошибке SQL. David 11 лет назад 0
Вы запускаете это в отладке в VS или из EXE? Dave 11 лет назад 0
И сделай мне одолжение; Просто создайте для этого новый пароль и обновите как строку подключения, так и пароль сервера SQL. Кроме того, убедитесь, что вы подключаетесь к правильному экземпляру (Опять же, я не грубый, я знаю это, поскольку я сделал это :)) Dave 11 лет назад 0
Так что я не знаю как, но сейчас это работает. Может быть, раньше у меня была опечатка в строке подключения, и я исправил ее, даже не заметив ее при тестировании разных строк? Все возможно. На этом этапе я попытаюсь воспроизвести ошибку, чтобы сузить суть ошибки и получить более полный вопрос / ответ здесь. Но на данный момент он работает только по неизвестным причинам (или, скорее, не сбоит по неизвестным причинам). В любом случае, спасибо! David 11 лет назад 0

Похожие вопросы