System.Data.SqlClient.SqlException:用户'用户'登录失败

问题描述:

我正在使用Amazon Web Services部署我的第一个C#应用程序。使用本地主机上的Visual Studio进行测试,该程序完美工作,但在尝试在部署服务器上运行后抛出异常System.Data.SqlClient.SqlException: Login failed for user 'dbuser'.。应用程序环境(Elastic Beanstalk)运行运行IIS 8.5的64位Windows Server 2012 R2 v1.2.0,数据库运行SQL Server Express 11.00.2100.60.v1,实例类运行Micro db.t2.small。部署的文件是应用程序主文件夹中的.sln Microsoft Visual Studio Solution文件。System.Data.SqlClient.SqlException:用户'用户'登录失败

other在同一议题SO questions似乎通过使用窗体身份验证或者解决,保证数据库的用户名和密码是否正确,或设置integrated security=False; - 所有这一切似乎已经完成。有谁知道还有什么可能造成这种情况?提前致谢!

堆栈跟踪:

[SqlException (0x80131904): Login failed for user 'dbuser'.] 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +356 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +117 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +267 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +318 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +132 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +246 
    System.Data.SqlClient.SqlConnection.Open() +122 
    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.Open(DbConnection connection, DbInterceptionContext interceptionContext) +509 
    System.Data.Entity.SqlServer.<>c__DisplayClass33.<UsingConnection>b__32() +567 
    System.Data.Entity.SqlServer.<>c__DisplayClass1.<Execute>b__0() +15 
    System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +238 
    System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action`1 act) +916 
    System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable`1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +117 
    System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) +212 
    System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection) +135 
    System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +175 
    System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +116 
    System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext) +121 
    System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +293 
    System.Web.Providers.ModelHelper.EnsureDatabaseCreated(DbContext db) +110 
    System.Web.Providers.ModelHelper.CreateMembershipContext(ConnectionStringSettings setting) +83 
    System.Web.Providers.DefaultMembershipProvider.ValidateUser(String username, String password) +122 
    Db.Controllers.AccountController.ValidateLogOn(String userName, String password) +395 
    Db.Controllers.AccountController.LogOn(String userName, String password, Boolean rememberMe, String returnUrl) +33 
    lambda_method(Closure , ControllerBase , Object[]) +298 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +209 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +35 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +39 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +71 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +72 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +386 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +30 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +186 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +38 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +29 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +67 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +53 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +36 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +38 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +44 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +67 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +38 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +399 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +157 

的Web.config连接字符串:

<connectionStrings> 
    <add name="DbEntities" connectionString="metadata=[metadata];provider=System.Data.SqlClient;provider connection string=&quot;data source=[data source].rds.amazonaws.com;initial catalog=Db;integrated security=False;user id=Dbuser;password=[password];MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    <add name="UserDbEntities" connectionString="metadata=[metadata];provider=System.Data.SqlClient;provider connection string=&quot;data source=[data source].rds.amazonaws.com;initial catalog=UserDb;integrated security=False;user id=Dbuser;password=[password];connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    <add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Server=[server].rds.amazonaws.com;Database=UserDb;User ID=Dbuser;Password=[password];Trusted_Connection=False;Connection Timeout=30;" /> 
</connectionStrings> 

答案在这里证明只部署.sln文件是不够的。我尝试创建并上传一个部署包,但这也不起作用。我拥有适用于Visual Studio的AWS工具包,并在右键单击VS中的项目文件时发现“部署到AWS”选项。点击后,按照步骤,一切正常。

在SQL Server中,用户帐户和credetials被设置在服务器级别,而不是在数据库级别。部署SQL数据库时,只有数据库信息会移过来。您需要在部署的环境中连接到数据库服务器,设置您要使用的用户名和密码,并将该帐户的相应权限授予数据库。

+0

感谢您的回应,乔尔!连接字符串中的用户标识是指SQL中的Server \ Security \ Logins下的用户。这是连接在服务器级别吗?另外,服务器级用户是否不影响本地主机,因此测试是否成功? – jle

+0

这是在服务器级别定义的。如果您在开发系统上设置了这一功能,则需要在生产中手动重新进行设置。它不会只是移动你的数据库。仅仅创建账户是不够的。您必须授予数据库的帐户权限。 –

+0

再次感谢乔尔,但我不确定自己明白。本身没有什么动作。具有读/写访问权限和AWS环境的数据库是相同的,我只是在将应用程序的.sln文件上传到“上传和部署”,然后将其与CNAME关联。 AWS和数据库中的所有服务器安全用户都保持不变,应该仍然由应用程序使用,对吗? – jle