Проблема с подключением к базе данных ASP.NET Membership Services - PullRequest
0 голосов
/ 26 июля 2010

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

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

Однако после перемещения приложения в прод.сервер, я вообще не могу получить доступ к БД.

Я написал простое тестовое приложение для проверки моих conn-строк.

Сбой AuthenticationConnectionString.AppDBConnString успешно подключается.

Я могу войти в Management Studio, используя того же пользователя, которого я использую в conn-строках, могу открыть обе базы данных и успешно выполнить запросы.

<add connectionString="Server=****\**;Database=FNAuthentication;User ID=***;Password=***" name="AuthenticationConnectionString" />
<add connectionString="Server=****\**;Database=AppDB;User ID=***;Password=***" name="AppDBConnString" />

Я получаю сообщение об ошибке:

[SqlException (0x80131904): Cannot open database "FNAuthentication" requested by the login. The login failed.
Login failed for user '***'.]
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +6244425
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +245
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2811
   System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) +53
   System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject) +248
   System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart) +6260362
   System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) +6260328
   System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) +354
   System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) +703
   System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) +54
   System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) +6261592
   System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) +81
   System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) +1657
   System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) +88
   System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) +6265031
   System.Data.SqlClient.SqlConnection.Open() +258
   System.Web.DataAccess.SqlConnectionHolder.Open(HttpContext context, Boolean revertImpersonate) +82
   System.Web.DataAccess.SqlConnectionHelper.GetConnection(String connectionString, Boolean revertImpersonation) +3986458
   System.Web.Security.SqlMembershipProvider.GetPasswordWithFormat(String username, Boolean updateLastLoginActivityDate, Int32& status, String& password, Int32& passwordFormat, String& passwordSalt, Int32& failedPasswordAttemptCount, Int32& failedPasswordAnswerAttemptCount, Boolean& isApproved, DateTime& lastLoginDate, DateTime& lastActivityDate) +3053172
   System.Web.Security.SqlMembershipProvider.CheckPassword(String username, String password, Boolean updateLastLoginActivityDate, Boolean failIfNotApproved, String& salt, Int32& passwordFormat) +213
   System.Web.Security.SqlMembershipProvider.ValidateUser(String username, String password) +164
   System.Web.UI.WebControls.Login.AuthenticateUsingMembershipProvider(AuthenticateEventArgs e) +75
   System.Web.UI.WebControls.Login.AttemptLogin() +152
   System.Web.UI.WebControls.Login.OnBubbleEvent(Object source, EventArgs e) +124
   System.Web.UI.Control.RaiseBubbleEvent(Object source, EventArgs args) +70
   System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +29
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +2981

Сообщение об ошибке заставляет меня думать, что с разрешениями для базы данных что-то не так, но я понятия не имею, что нужно изменить.

Мы пытались включить все роли, но безрезультатно.

Вся помощь очень ценится!

С уважением

Фрэнсис

Ответы [ 2 ]

0 голосов
/ 26 июля 2010

Спасибо!

Строка подключения уже установлена ​​для членства и roleManager.

<membership defaultProvider="ASPSqlMembershipProvider" userIsOnlineTimeWindow="15">
            <providers>
                <remove name="AspNetSqlMembershipProvider" />
                <add name="ASPSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" connectionStringName="AuthenticationConnectionString" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" applicationName="/" requiresUniqueEmail="false" passwordFormat="Hashed" maxInvalidPasswordAttempts="5" passwordAttemptWindow="10" minRequiredPasswordLength="5" minRequiredNonalphanumericCharacters="0" passwordStrengthRegularExpression="" />
            </providers>
        </membership>
        <roleManager defaultProvider="ASPSqlRoleProvider" enabled="true" cacheRolesInCookie="true" cookieName=".ASPXROLES" cookiePath="/" cookieTimeout="30" cookieRequireSSL="false" cookieSlidingExpiration="true" createPersistentCookie="false" cookieProtection="All">
            <providers>
                <remove name="AspNetSqlRoleProvider" />
                <remove name="AspNetWindowsTokenRoleProvider" />
                <add connectionStringName="AuthenticationConnectionString" applicationName="/" name="ASPSqlRoleProvider" type="System.Web.Security.SqlRoleProvider, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
            </providers>
        </roleManager> 

Моя проблема в том, что я вообще не могу войти в базу данных.

Я написал следующее тестовое приложение для проверки соединений:

namespace TestConnStrings
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            using (SqlConnection testConn0 = new SqlConnection())
            {
                testConn0.ConnectionString = ConfigurationManager.ConnectionStrings["AuthenticationConnectionString"].ConnectionString;
                try
                {
                    testConn0.Open();
                }
                catch(Exception ex)
                {
                    Response.Write(ex.ToString());
                }

                if (testConn0.State == System.Data.ConnectionState.Open)
                {
                    Response.Write("AuthenticationConnectionString works");
                    testConn0.Close();
                }   
            }
            Response.Write("<br /><br /><br /><br /><br />");
            using (SqlConnection testConn1 = new SqlConnection())
            {
                testConn1.ConnectionString = ConfigurationManager.ConnectionStrings["AppDBConnString"].ConnectionString;
                try
                {
                    testConn1.Open();
                }
                catch (Exception ex)
                {
                    Response.Write(ex.ToString());
                }

                if (testConn1.State == System.Data.ConnectionState.Open)
                {
                    Response.Write("AppDBConnString works");
                    testConn1.Close();
                }
            }
        }
    }
}

AppDBConnString успешно подключается, AuthenticationConnectionString - нет.

С уважением

Фрэнсис:)

0 голосов
/ 26 июля 2010

Я думаю, что вы должны проверить поставщика членства и поставщика ролей в вашем файле web.config и установить для него строку подключения

<membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="30">
        <providers>
            <add connectionStringName="MyConnectionString" applicationName="MyApp" enablePasswordRetrieval="true" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" passwordAttemptWindow="5" minRequiredNonalphanumericCharacters="0" minRequiredPasswordLength="5" passwordFormat="Clear" name="MyMembershipProvider" type="DBIndependent.Providers.SqlMembershipProvider"/>
        </providers>
    </membership>
    <roleManager enabled="true" defaultProvider="MyRoleProvider">
        <providers>
            <add connectionStringName="MyConnectionString" applicationName="MyApp" name="MyRoleProvider" type="DBIndependent.Providers.SqlRoleProvider"/>
        </providers>
    </roleManager>
...