MVC 3 - после публикации на сервере - разрешение CREATE DATABASE запрещено в базе данных «master» - PullRequest
0 голосов
/ 12 августа 2011

Настройка

MVC 3 EF 4.1 Code First - машина для Windows 7 Pro 64 Dev, отдельный Win 7 Pro для хоста.

Я начал с SQLCE4.0базы данных, и все работало нормально (инициализатор базы данных создал таблицы, заполнил и т. д.).

После того, как я все заработал, как я хотел, я написал сценарий своей базы данных SqlCe, создал реальную базу данных SQL 2008, открылправильные порты и разрешенные TCP-соединения.

Проблема ЕСЛИ я изменяю строку подключения, указав имя моего сервера интрасети \ имя экземпляра, с пользователем, которого я специально создал для этого приложения, оно отлично работает на моем компьютере разработчика.

ЕСЛИ я публикую приложение на сервере (веб-сервер и сервер sql одинаковы), и я пытаюсь войти на веб-сайт (он же доступ к БД), затем я получаю:

Отказано в разрешении CREATE DATABASE в master базы данных'.

Я прокомментировал настройку DBInitializer, поэтому ничего не должно быть создано при попадании в БД.Таблицы уже есть.

Если я сделаю Database.SetInitializer (null);затем я получаю другую ошибку при входе в систему:

Я точно не помню, но это было что-то, что влияло на Не удалось войти в систему для IIS APPPOOL \ ApplicationPoolIdentity

Таким образом, я изменил Identity на NETWORK SERVICE и даже попытался LOCAL SERVICE, и оба выдавали одну и ту же ошибку при входе в систему.

Я попытался следовать этому сообщению, в котором говорится добавить пользователя SQL с именем 'IIS APPPOOL \ MyApplicationName '.SQL Не позволю мне сделать это, поскольку в нем есть недопустимые символы ... пойди разберись.

Почему он отлично работает по сети, получая доступ к БД с моего компьютера разработчика, но когда я публикую на ТО ЖЕ машинугде размещаются sql и сайт, я получаю отказ в разрешении или ошибки входа в систему? Я искал сеть и пробовал разные вещи.

РЕДАКТИРОВАТЬ: Вот мои строки подключения:

<add name="AntripContext" connectionString="Data Source=|DataDirectory|AntripWeb.sdf" providerName="System.Data.SqlServerCe.4.0" />
    <!--<add name="AntripSQL" connectionString="Data Source=.\sqlexpress;Initial Catalog=Antrip;User Id=myuser;Password=mypassword;" providerName="System.Data.SqlClient" />-->
    <add name="AntripWebEntities" connectionString="metadata=res://*/DAL.AntripEntities.csdl|res://*/DAL.AntripEntities.ssdl|res://*/DAL.AntripEntities.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\AntripWeb.sdf&quot;" providerName="System.Data.EntityClient" />
    <!--<add name="AntripWebEntities" connectionString="metadata=res://*/DAL.AntripEntities.csdl|res://*/DAL.AntripEntities.ssdl|res://*/DAL.AntripEntities.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=.\sqlexpress;Initial Catalog=Antrip;User Id=myuser;Password=mypassword;&quot;" providerName="System.Data.EntityClient" />-->

Примечание. Закомментированные строки подключения - это те, которые используют базу данных sql 2008 (которая нарушает мое опубликованное приложение).

1 Ответ

1 голос
/ 12 августа 2011

Мне кажется, что ваша строка подключения имеет встроенную безопасность = true, так что вы подключаетесь к SQL в качестве пользователя, которого вы указываете, а не к пользователю SQL, которого вы думаете вы используете?

Но будьте осторожны, он все еще пытается создать базу данных: вам нужно поменять местами IDatabaseInitializer - я думаю, он будет искать БД с именем, совпадающим с сущностями, чтобы быть осторожным!

...