Как создать новую базу данных в SQL Server Express 2008 и разрешить подключение? - PullRequest
3 голосов
/ 20 августа 2011

На моем локальном компьютере запущен экземпляр SQL Server Express 2008 R2.

  • Аутентификация является «смешанной», поэтому я могу войти в систему, используя учетную запись Windows и , используя аутентификацию SQL Server.
  • Именованные каналы включены
  • TCP / IP включен
  • Удаленные подключения разрешены

Я предпринял следующие шаги, чтобы создать новый логини база данных:

  1. Я вошел в систему с помощью SQL Server Management Studio Express и создал новую учетную запись
  2. Я создал новую базу данных с новой учетной записью в качестве владельца

New login

Login details

New database

Database security

Database owner overview

Как выНа последнем скриншоте видно, что username"dbo", который "принадлежит" login"mylogin".Я пытаюсь использовать следующую строку подключения, но она не работает:

Источник данных = (локальный) \ sqlexpress; Исходный каталог = newdb; Идентификатор пользователя = mylogin; Пароль = mypass

Журнал ошибок в экспресс-состояниях SQL Server Management studio:

Ошибка входа для пользователя 'mylogin'.Причина: не удалось открыть явно указанную базу данных.[КЛИЕНТ: xxx.xxx.x.xx].Ошибка: 18456, уровень серьезности: 14, состояние: 38

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

Ошибка входа пользователя 'dbo'.Причина: не удалось найти логин, соответствующий указанному имени.[Клиент: xxx.xxx.x.xx].

Теперь я начинаю сходить с ума.Я просто не знаю, как получить доступ к какой-либо базе данных ... Поврежден ли мой экземпляр SQL Server?

Эта проблема возникает, только когда я пытаюсь подключиться с моего ASP.NET приложения.Подключение с использованием SQL Server Management studio Express с использованием указанных учетных данных DOES work!

1 Ответ

5 голосов
/ 20 августа 2011
  1. не пытайтесь отобразить dbo на ваш логин. dbo - специальный пользователь.

  2. Чтобы подключиться к SQL Server с использованием аутентификации SQL, вам нужно войти через логин, а не через пользователя (давайте пока оставим автономные базы данных в Denali вне обсуждения). Поэтому вы никогда не должны пытаться указать пользователя базы данных (например, dbo) в строке подключения. Я настоятельно рекомендую создать логин и затем создать пользователя на уровне базы данных с тем же именем, которое совпадает с логином - это гораздо менее запутанно, чем попытка сопоставить login_foo с user_bar. Я также рекомендую держаться подальше от специальных слов для пользователей или логинов (например, dbo).

  3. Я рекомендую изучить DDL и хранимые процедуры, необходимые для настройки этого, и перестать указывать и щелкать по интерфейсу. Хотя пользовательский интерфейс может казаться более быстрым для некоторых задач, очень сложно воспроизвести то, что вы сделали точно, и требуется много усилий, чтобы выяснить, какие параметры вы установили на вкладках в диалоговых окнах, которые мы можем ' не вижу. Если вы используете сценарий, вы можете опубликовать сценарий, и мы сможем увидеть все это, не задавая дополнительных вопросов, и вы также можете сохранить этот сценарий и сослаться на него (что будет, по крайней мере, так же хорошо, как ваша память, но почти наверняка лучше).

Вот как я могу добавить имя входа на сервер, поместить их в базу данных newdb как пользователя, добавить их в роль db_owner (не dbo) и установить для их базы данных по умолчанию значение newdb. Откройте новое окно запроса в Management Studio и подключитесь к мастеру, затем выполните следующее:

USE [master];
GO
CREATE LOGIN Ropstah_test WITH PASSWORD = 'secure password';
GO
USE newdb;
GO
CREATE USER Ropstah_test FROM LOGIN Ropstah_test;
GO
EXEC sp_addrolemember 'db_owner', 'Ropstah_test';
GO
USE [master];
GO
ALTER LOGIN Ropstah_test WITH DEFAULT_DATABASE = newdb;
GO

Теперь ваша строка подключения из .NET должна выглядеть следующим образом:

Data Source=.\SQLEXPRESS;Initial Catalog=newdb;User ID=Ropstah_test;Password=secure password;

Если это не сработает, я бы подтвердил, что ваше приложение ASP.NET работает на том же компьютере, что и экземпляр SQL Express. Веб-сервер также на вашем компьютере, верно? Если не считать этого, это должно работать, и если оно не работает, есть какая-то другая переменная, которая не очевидна. Вам не нужно делать пользователя фактическим владельцем базы данных для подключения, но если вышеприведенное все еще не решает проблему, посмотрите, меняет ли приведенный ниже скрипт поведение или хотя бы сообщение об ошибке, записанное в журнале:

USE newdb;
GO
DROP USER Ropstah_test;
GO
USE [master];
GO
ALTER AUTHORIZATION ON DATABASE::newdb TO Ropstah_test;

Это удаляет пользователя из базы данных, а затем повторно добавляет его в качестве официального владельца (это не то же самое, что роль в роли db_owner, которая по сути является просто сокращением для предоставления шаблона разрешений). Это не должно быть необходимым, но это может помочь изолировать, почему вы не можете заставить этот обычно простой процесс работать.

...