2017-02-13 2 views
0

Я знаю, что этот вопрос задавали столько раз, но ни одна из тем не работала для меня. я опубликовал Mvc сайт на панель веб-сервер управления Plesk, но я постоянно получаю эту ошибку:Предоставление разрешения CREATE DATABASE в базе данных «master». при публикации на веб-сервере

CREATE DATABASE permission denied in database 'master'. 

Может кто-нибудь сказать мне, что происходит? Я провел три дня и все испробовал. вот моя строка соединения:

<connectionStrings> 
    <add name="application" connectionString="Data Source=.;Initial Catalog=bug.mdf;Integrated Security=false; User ID=admin;Password=###############" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

Ошибка:

[SqlException (0x80131904): CREATE DATABASE permission denied in database 'master'.] 
    System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +2434922 
    System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction) +5736592 
    System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) +285 
    System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady) +3731 
    System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(String methodName, Boolean async, Int32 timeout, Boolean asyncWrite) +940 
    System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean asyncWrite) +272 
    System.Data.SqlClient.SqlCommand.ExecuteNonQuery() +280 
    System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c) +10 
    System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +72 
    System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext) +356 
    System.Data.Entity.SqlServer.<>c__DisplayClass1a.<CreateDatabaseFromScript>b__19(DbConnection conn) +119 
    System.Data.Entity.SqlServer.<>c__DisplayClass33.<UsingConnection>b__32() +443 
    System.Data.Entity.SqlServer.<>c__DisplayClass1.<Execute>b__0() +10 
    System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +189 
    System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) +78 
    System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action`1 act) +175 
    System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action`1 act) +556 
    System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable`1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +86 
    System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) +164 
    System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) +76 
    System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase() +134 
    System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection) +119 
    System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +142 
    System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +78 
    System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext) +89 
    System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState) +116 
    System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +218 
    System.Data.Entity.CreateDatabaseIfNotExists`1.InitializeDatabase(TContext context) +151 
    System.Data.Entity.Internal.<>c__DisplayClassf`1.<CreateInitializationAction>b__e() +76 
    System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action action) +60 
    System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() +357 
    System.Data.Entity.Internal.LazyInternalContext.<InitializeDatabase>b__4(InternalContext c) +7 
    System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) +110 
    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 action) +198 
    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() +73 
    System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) +28 
    System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() +53 
    System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() +15 
    System.Data.Entity.Infrastructure.DbQuery`1.System.Linq.IQueryable.get_Provider() +38 
    System.Linq.Queryable.OrderByDescending(IQueryable`1 source, Expression`1 keySelector) +83 
+0

где вы DB имя Initial_CAtalog в строке соединения? –

+0

Ошибка говорит, что он пытается подключиться к master db, который не должен использоваться r для вашего приложения, он используется сервером sql для его цели, поэтому вам нужно добавить свое имя db в строку подключения –

+0

Я забыл написать базу данных имя в вопросе но имя базы данных не проблема. – V47

ответ

1

Ошибка полностью прямой -вперед. Ваше приложение пытается создать базу данных, а пользователь базы данных, с которой он подключается, не имеет этого разрешения. Что касается , то почему, что происходит, сложно сказать с предоставленной информацией. Предполагая, что вы на самом деле не пытаетесь явно создать базу данных в своем коде, это, скорее всего, связано с стратегией инициализации базы данных, установленной в вашем контексте. По умолчанию используется попытка создать базу данных, если она не существует. В результате вы должны убедиться, что к экземпляру, с которым вы подключаетесь, действительно есть база данных, с которой пытается работать ваше приложение.

может также просто предоставить пользователю доступ к базе данных для создания базы данных, но это была бы очень плохая идея, безопасность была бы разумной. Пользователь БД вашего веб-приложения должен всегда иметь самый ограниченный набор разрешений, в основном просто SELECT, INSERT, UPDATE и DELETE, и, возможно, даже не все из них. Возможно, вам понадобится EXECUTE в некоторых сценариях, но вы можете предоставить это на основе объекта за объектом, а не на глобальном уровне.

+0

Я создал базу данных с панели управления веб-сервера. проблема возникает, когда мое приложение хочет подключиться к базе данных и инициализировать в первый раз. – V47

+0

Либо это на самом деле не закончилось, как вы думаете, или строка соединения на самом деле не ссылается на правильный экземпляр/базу данных. В любом случае, EF вполне уверен, что у него все еще нет базы данных, так что вам нужно это выяснить. –

+0

как я могу понять, что происходит? – V47

0

Я думаю, что вам не хватает имя базы данных, т.е. исходного каталога в строке подключения

<connectionStrings> 
    <add name="application" connectionString="Data Source=.;Initial Catalog=NameOFDB; Integrated Security=false; User ID=admin;Password=#slfsl$4554sll%" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 
+0

Извините, я пропустил имя записи в базе данных. – V47

Смежные вопросы