Зачем мне нужны разрешения на создание базы данных для веб-приложения asp.net?
Я строю ASP.NET, веб-приложение с первым кодом. Я использую базу данных, принадлежащую компании, и у меня есть грубые разрешения для таблиц в одной базе данных на этом сервере. Я не верю, что у меня есть разрешения "Создать базу данных". У меня проблемы с публикацией моего веб-приложения. Я могу все запустить локально, но когда я публикую код на сервере компании, я получаю такие ошибки:
Format of the initialization string does not conform to specification starting at index 0.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.ArgumentException: Format of the initialization string does not conform to specification starting at index 0.
Source Error:
An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.
Stack Trace:
[ArgumentException: Format of the initialization string does not conform to specification starting at index 0.]
System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue) +1742
System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey) +191
System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules) +136
System.Data.SqlClient.SqlConnectionString..ctor(String connectionString) +75
System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous) +35
System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions) +241
System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key) +78
System.Data.SqlClient.SqlConnection.set_ConnectionString(String value) +116
System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +104
System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.SetConnectionString(DbConnection connection, DbConnectionPropertyInterceptionContext`1 interceptionContext) +434
System.Data.Entity.Internal.LazyInternalConnection.TryInitializeFromAppConfig(String name, AppConfig config) +39
System.Data.Entity.Internal.LazyInternalConnection.Initialize() +160
System.Data.Entity.Internal.LazyInternalConnection.get_Connection() +16
[Project].DBContext.Context..ctor() in C:\Users\[UserName]\Documents\[FilePath]\[Project]\DBContext\Context.cs:20
[Project].Data_Manager.DataManager..ctor() in C:\Users\[UserName]\Documents\[FilePath]\[Project]\Data_Manager\DataManager.cs:15
[Project].Controllers.HeaderController..ctor() in C:\Users\[UserName]\Documents\[FilePath]\[Project]\Controllers\HeaderController.cs:12
Эта ошибка заставляет меня поверить, что у меня проблема со строкой подключения. При использовании модульного тестирования я получаю ошибку:
An exception of type 'System.Data.SqlClient.SqlException' occurred in EntityFramework.dll but was not handled in user code
Additional information: CREATE DATABASE permission denied in database 'master'.
Я недавно изменил свой конструктор контекста из:
public Context() : base("[server_Name].[database_name]")
{}
чтобы:
public Context() : base("[server_Name].[full_company_server_file_path]")
{}
И когда я запускал решение локально, также получалCREATE DATABASE permission denied in database 'master'
" ошибка.
Для записи, моя строка подключения:
<connectionStrings>
<clear />
<add name="[server_Name].[database_name]" providerName="System.Data.SqlClient" connectionString="Data Source=[server_Name].[full_company_server_file_path];Initial Catalog=[database_name];Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True;Application Name=EntityFramework" />
< /connectionStrings>
Мой вопрос:
Зачем мне нужны разрешения на создание базы данных, чтобы все это работало? И если это не так, почему я продолжаю получать эту ошибку? (Нет, где в моем коде я говорю создать БД, и я не должен / не могу).
Во-вторых, какие-либо предложения относительно исправления моей строки подключения? Я получил эту строку подключения из базы данных -> свойства -> Строка подключения (так что я чувствую, что это правильно).
Спасибо за всю помощь / советы / объяснения.
С помощью:
- ASP.NET / Entity Framework / C#
- Visual Studio 2015
- SQL Server Management Studio 2014
2 ответа
РЕШЕНИЕ
Для любого любопытного, в процессе публикации (собственное действие Visual Studio) строка соединения искажалась:
connectionString="$(ReplacableToken_[server_name].[database_name]-Web.config Connection String_0)"
Я отредактировал опубликованную строку подключения в мою реальную строку подключения, и это устранило проблему.
Здесь вы ничего не можете сделать, кроме как получить привилегии для вашего приложения на выполнение таких действий на сервере базы данных, что очень маловероятно в крупных организациях.
Лучшее решение этой проблемы - не включать операцию создания базы данных в процесс публикации веб-приложений.
Конечно, политика организации не позволяет приложению работать с привилегиями master db.
Предоставьте действия по созданию базы данных администраторам баз данных, которые управляют серверами баз данных и базами данных. Они будут иметь необходимые права доступа и разрешения для выполнения таких операций. Они создадут базу данных и запустят скрипт, чтобы ваша база данных была готова к использованию приложением.
Создайте сценарий, который будет создавать всю структуру базы данных, включая таблицы, представления, хранимые процедуры, функции, ключи, индексы и т. Д., И поднять заявку или RFC или выполнить любой процесс, необходимый для создания базы данных с надлежащей структурой на целевом сервере. Позвольте вашему приложению иметь дело только с данными, не беспокоясь о создании и обновлении базы данных.
Вот как работают приложения в производственной среде, и как процессы реализуются и сопровождаются очень редкими исключениями.