2016-12-19 3 views
0

Visual Studio 2013을 사용하여 Amazon에서 호스팅되는 첫 번째 C# 응용 프로그램의 프로덕션 버전을 빌드하고 있습니다. 초기 실행 중에 첫 번째 사용자를 생성하는 동안 로그인 자격 증명이 성공적으로 연결될 수 있지만 [SqlException (0x80131904): Login failed for user 'databaseuser'.]이 발생합니다. 왜 누군가는 볼 수 있습니까? 나는 많은 분노를 느낀다. 세부 사항과 내가 시도한 내용은 다음과 같습니다.성공적인 테스트 연결을 사용하여 '사용자 로그인에 실패했습니다.'

테스트 데이터베이스는 SQL Express이고 스키마는 SQL Server Standard Edition의 인스턴스로 가져 왔습니다. 성공적으로 실행되는 테스트 Visual Studio 폴더는 Windows 탐색기를 사용하여 다른 위치로 복사되고 프로덕션을 위해 이름이 바뀌 었습니다. 프로덕션 Web.config 연결 문자열이 프로덕션 SQL 인스턴스와 해당 사용자 이름 및 암호로 변경되었습니다. 로그인은 서버 탐색기의 "연결 테스트", .edmx 모델 브라우저 추가/업데이트 저장 프로 시저 및 "databaseuser"자격 증명을 사용하여 SQL Server에 직접 로그인하여 성공적으로 테스트합니다. SQL 인스턴스는 SQL Server 및 Windows 인증 모드로 설정됩니다. "databaseuser"는 SQL 인스턴스의 두 데이터베이스 모두에 대해 읽기/쓰기 권한을가집니다.

코드

private MembershipProvider _provider; 
public MembershipCreateStatus CreateUser(string userName, string password, string email) 
{ 
    MembershipCreateStatus status; 
    _provider.CreateUser(userName, password, email, null, null, true, null, out status); 
    //FAIL ON THE ABOVE LINE!   
    return status; 
} 

의 Web.config의 연결 문자열

<connectionStrings> 
    <add name="DefaultConnection" providerName="System.Data.SqlClient" 
      connectionString="Server=[production endpoint]; 
      Database=UsersDb;User ID=databaseuser;Password=[password]; 
      Trusted_Connection=False;Connection Timeout=30;" /> 
    <add name="WorkplaceEntities" connectionString="metadata=res://*/Data.Workplace.csdl| 
      res://*/Data.Workplace.ssdl|res://*/Data.Workplace.msl; 
      provider=System.Data.SqlClient;provider connection string=&quot; 
      data source=[production endpoint];initial catalog=Workplace;user id=databaseuser; 
      password=[password];MultipleActiveResultSets=True;App=EntityFramework&quot;" 
      providerName="System.Data.EntityClient" /> 
    <add name="UsersDbEntities" connectionString="metadata=res://*/ 
      Data.UsersDb.csdl|res://*/Data.UsersDb.ssdl|res://*/ 
      Data.UsersDb.msl;provider=System.Data.SqlClient; 
      provider connection string=&quot;data source=[production endpoint]; 
      initial catalog=UsersDb;user id=databaseuser;password=[password]; 
      MultipleActiveResultSets=True;App=EntityFramework&quot;" 
      providerName="System.Data.EntityClient" /> 
</connectionStrings> 

스택 추적

[SqlException (0x80131904): Login failed for user 'databaseuser'.] 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean allowCreate, Boolean onlyOneCheckConnection, DbConnectionOptions userOptions, DbConnectionInternal& connection) +347 
    System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) +78 
    System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource`1 retry, DbConnectionOptions userOptions, DbConnectionInternal oldConnection, DbConnectionInternal& connection) +191 
    System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +154 
    System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource`1 retry, DbConnectionOptions userOptions) +21 
    System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource`1 retry) +141 
    System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource`1 retry) +362 
    System.Data.SqlClient.SqlConnection.Open() +96 
    System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.<Open>b__36(DbConnection t, DbConnectionInterceptionContext c) +36 
    System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch(TTarget target, Action`2 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed) +138 
    System.Data.Entity.Infrastructure.Interception.DbConnectionDispatcher.Open(DbConnection connection, DbInterceptionContext interceptionContext) +477 
    System.Data.Entity.SqlServer.<>c__DisplayClass33.<UsingConnection>b__32() +520 
    System.Data.Entity.SqlServer.<>c__DisplayClass1.<Execute>b__0() +34 
    System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Func`1 operation) +251 
    System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute(Action operation) +196 
    System.Data.Entity.SqlServer.SqlProviderServices.UsingConnection(DbConnection sqlConnection, Action`1 act) +276 
    System.Data.Entity.SqlServer.SqlProviderServices.UsingMasterConnection(DbConnection sqlConnection, Action`1 act) +546 
    System.Data.Entity.SqlServer.SqlProviderServices.CreateDatabaseFromScript(Nullable`1 commandTimeout, DbConnection sqlConnection, String createDatabaseScript) +151 
    System.Data.Entity.SqlServer.SqlProviderServices.DbCreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) +287 
    System.Data.Entity.Core.Common.DbProviderServices.CreateDatabase(DbConnection connection, Nullable`1 commandTimeout, StoreItemCollection storeItemCollection) +111 
    System.Data.Entity.Core.Objects.ObjectContext.CreateDatabase() +236 
    System.Data.Entity.Migrations.Utilities.DatabaseCreator.Create(DbConnection connection) +143 
    System.Data.Entity.Migrations.DbMigrator.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +207 
    System.Data.Entity.Migrations.Infrastructure.MigratorBase.EnsureDatabaseExists(Action mustSucceedToKeepDatabase) +42 
    System.Data.Entity.Migrations.DbMigrator.Update(String targetMigration) +136 
    System.Data.Entity.Migrations.Infrastructure.MigratorBase.Update() +33 
    System.Data.Entity.Internal.DatabaseCreator.CreateDatabase(InternalContext internalContext, Func`3 createMigrator, ObjectContext objectContext) +175 
    System.Data.Entity.Internal.InternalContext.CreateDatabase(ObjectContext objectContext, DatabaseExistenceState existenceState) +150 
    System.Data.Entity.Database.Create(DatabaseExistenceState existenceState) +445 
    System.Data.Entity.Database.Create() +31 
    System.Web.Providers.ModelHelper.EnsureDatabaseCreated(DbContext db) +160 
    System.Web.Providers.ModelHelper.CreateMembershipContext(ConnectionStringSettings setting) +115 
    System.Web.Providers.DefaultMembershipProvider.Membership_CreateUser(String applicationName, String userName, String password, String salt, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, DateTime& createDate, Boolean uniqueEmail, Int32 passwordFormat, Object& providerUserKey) +193 
    System.Web.Providers.DefaultMembershipProvider.CreateUser(String username, String password, String email, String passwordQuestion, String passwordAnswer, Boolean isApproved, Object providerUserKey, MembershipCreateStatus& status) +1401 
    FirstApp.Controllers.AccountMembershipService.CreateUser(String userName, String password, String email) in c:\My Stuff\FirstApp\FirstApp\firstapp.mvc\Controllers\AccountController.cs:473 
    FirstApp.Controllers.HomeController.Index() in c:\My Stuff\FirstApp\FirstApp\firstapp.mvc\Controllers\AccountController.cs:98 
    lambda_method(Closure , ControllerBase , Object[]) +101 
    System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters) +59 
    System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters) +435 
    System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters) +60 
    System.Web.Mvc.Async.ActionInvocation.InvokeSynchronousActionMethod() +76 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.<BeginInvokeSynchronousActionMethod>b__39(IAsyncResult asyncResult, ActionInvocation innerInvokeState) +36 
    System.Web.Mvc.Async.WrappedAsyncResult`2.CallEndDelegate(IAsyncResult asyncResult) +73 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult) +49 
    System.Web.Mvc.Async.AsyncInvocationWithFilters.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3d() +117 
    System.Web.Mvc.Async.<>c__DisplayClass46.<InvokeActionMethodFilterAsynchronouslyRecursive>b__3f() +323 
    System.Web.Mvc.Async.<>c__DisplayClass33.<BeginInvokeActionMethodWithFilters>b__32(IAsyncResult asyncResult) +44 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +47 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +136 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +102 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethodWithFilters(IAsyncResult asyncResult) +50 
    System.Web.Mvc.Async.<>c__DisplayClass2b.<BeginInvokeAction>b__1c() +72 
    System.Web.Mvc.Async.<>c__DisplayClass21.<BeginInvokeAction>b__1e(IAsyncResult asyncResult) +185 
    System.Web.Mvc.Async.WrappedAsyncResult`1.CallEndDelegate(IAsyncResult asyncResult) +42 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeAction(IAsyncResult asyncResult) +40 
    System.Web.Mvc.Controller.<BeginExecuteCore>b__1d(IAsyncResult asyncResult, ExecuteCoreState innerState) +34 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 
    System.Web.Mvc.Controller.EndExecuteCore(IAsyncResult asyncResult) +44 
    System.Web.Mvc.Controller.<BeginExecute>b__15(IAsyncResult asyncResult, Controller controller) +39 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +62 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 
    System.Web.Mvc.Controller.EndExecute(IAsyncResult asyncResult) +39 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.EndExecute(IAsyncResult asyncResult) +39 
    System.Web.Mvc.MvcHandler.<BeginProcessRequest>b__5(IAsyncResult asyncResult, ProcessRequestState innerState) +39 
    System.Web.Mvc.Async.WrappedAsyncVoid`1.CallEndDelegate(IAsyncResult asyncResult) +70 
    System.Web.Mvc.Async.WrappedAsyncResultBase`1.End() +133 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +56 
    System.Web.Mvc.Async.AsyncResultWrapper.End(IAsyncResult asyncResult, Object tag) +37 
    System.Web.Mvc.MvcHandler.EndProcessRequest(IAsyncResult asyncResult) +40 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result) +38 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +9744373 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 
+0

_databaseuser_를 사용하여 로그인을 테스트 할 때 _UsersDb_ 데이터베이스로 변경할 수 있습니까? 연결을 테스트하기 위해 UDL 파일을 사용해 보시기 바랍니다. https://blogs.technet.microsoft.com/michaelgriswold/2014/01/06/the-easy-way-to-test-sql-connectivity/ –

+0

감사합니다. 응답, 닉! 이전에 UDL 파일에 대해 들어 본 적이 없으므로 그 부분을 살펴 보았습니다. 그러나 "데이터베이스 UsersDb 변경"을 명확히 해두시겠습니까? "databaseuser"는 SQL에 직접 로그인하여 두 데이터베이스 모두를 쿼리 할 수 ​​있으며 두 데이터베이스의 "연결 테스트"를 통해 서버 탐색기의 연결이 성공적으로 수행됩니다. – jle

+0

나는 '로그인 실패'라고 말했지만 실제로는 로그인이 정상적으로 작동했을 때이 오류를 발견했습니다. 사용자가 기본 데이터베이스에 액세스 할 수 없습니다. 그러나 당신의 설명에서 이것은 문제가 아닌 것처럼 들립니다. –

답변

0
public class AccountMembershipService : IMembershipService 여기에 실패

나는 이것이 왜 효과가 있었는지 확신 할 수 없지만, 분명히이 문제를 해결 한 것 같습니다 : "databaseuser"의 Web.config 자격 증명을 읽기/쓰기 액세스 만 제거하고 데이터베이스 관리자 자격 증명으로 대체했습니다. 응용 프로그램이 성공적으로 테스트되었습니다. 그런 다음 관리자 자격 증명은 원래 "databaseuser"자격 증명으로 대체되었으며 모든 것이 작동합니다. 어떤 이유로 응용 프로그램에서 처음으로 연결에 액세스해야하는 것처럼 보이면 읽기/쓰기 사용자가 이후에 동일한 작업을 수행 할 수 있습니다.

Nick.McDermaid에게 답변 해 주셔서 감사합니다. 그들은 모두 정확하고 일을 마쳤지 만, 어떤 이유로 프로그램은 관리자에게 먼저 그것을 보여줘야했습니다.

관련 문제