【问题标题】:CREATE DATABASE permission denied in database 'master'. when publishing to web server数据库“master”中的 CREATE DATABASE 权限被拒绝。发布到 Web 服务器时
【发布时间】:2017-02-13 20:05:29
【问题描述】:

我知道这个问题被问了很多次,但没有一个主题对我有用。 我已将 mvc 网站发布到 plesk 控制面板 Web 服务器,但我不断收到此错误:

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

【问题讨论】:

  • 错误说它正在尝试连接到不应使用的主数据库 r 为您的应用程序更改它被 sql 服务器用于其目的,因此您需要在连接字符串中添加您的数据库名称
  • 我忘记写有问题的数据库名称但数据库名称没有问题。
  • 如果没有问题,那么尝试创建新数据库的用户应该在 sql server 中具有正确的权限来创建数据库
  • 不,我也检查过了,我从 Microsoft SQL Server Management Studio 中为该用户创建了一个表。

标签: asp.net asp.net-mvc asp.net-mvc-4 sql-server-2012


【解决方案1】:

错误完全是直截了当的。您的应用程序正在尝试创建数据库,而与之连接的数据库用户没有该权限。至于发生这种情况的原因,很难用所提供的信息来说明。假设您实际上并未尝试在代码中显式创建数据库,这很可能是由于在您的上下文中设置了数据库初始化策略。默认设置是在数据库不存在时尝试创建数据库。因此,您应该确保您连接的实例确实拥有您的应用程序正在尝试使用的数据库。

您也可以简单地授予 DB 用户创建数据库的权限,但从安全角度来看,这将是一个非常糟糕的主意。您的 Web 应用程序的 DB 用户应该始终拥有最有限的权限集,基本上只有 SELECT、INSERT、UPDATE 和 DELETE,甚至可能不是所有这些权限。在某些情况下,您可能还需要 EXECUTE,但您可以逐个对象授予它,而不是全局授予。

【讨论】:

  • 我从 Web 服务器控制面板创建了数据库。当我的应用程序第一次想要连接到数据库并进行初始化时,问题就出现了。
  • 要么没有像你想象的那样真正完成,要么连接字符串实际上没有引用正确的实例/数据库。无论哪种方式,EF 都非常确定它仍然没有数据库,所以这就是您需要弄清楚的。
  • 我怎样才能知道发生了什么?
【解决方案2】:

我认为您缺少数据库名称,即连接字符串中的初始目录

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

【讨论】:

  • 对不起,我错过了写数据库名称。
猜你喜欢
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 2011-08-03
  • 1970-01-01
  • 2019-12-15
相关资源
最近更新 更多