Подключение роли приложения к SQL Server с ошибкой «Ошибка входа» - PullRequest
0 голосов
/ 13 октября 2009

У меня есть программа, которая будет использовать роль приложения для записи данных в SQL Server 2005.

using (SqlConnection sqlCon = new SqlConnection(connectionString))
{
   SqlCommand sqlCommand = new SqlCommand();
   sqlCommand.Connection = sqlCon;
   sqlCommand.CommandType = CommandType.Text;
   sqlCommand.CommandText = "";
   sqlCommand.CommandText = "EXEC sp_setapprole 'name','password';";
   sqlCommand.CommandText += sqlComm;
   sqlCommand.CommandTimeout = 300;
   sqlCon.Open();

   int res = sqlCommand.ExecuteNonQuery();
}

Я использую этот код для подключения к SQL Server 2005 ServerA, он работает хорошо. Затем я использую тот же код для подключения к SQL Server 2005 ServerB с идентичной таблицей, роль приложения, он выдал ошибку. «Ошибка входа в систему для домена \ имя пользователя» Кто-нибудь встречал его раньше?

System.Data.SqlClient.SqlException был не обрабатывается кодом пользователя
Сообщение = "Ошибка входа пользователя 'domian \ username'. "Source =". Net SqlClient Data Provider "
ErrorCode = -2146232060 Класс = 14
Номер строки = 65536 Номер = 18456
Процедура = "" Сервер = "СерверB"
State = 1
StackTrace:
в System.Data.SqlClient.SqlInternalConnection.OnError (SqlException исключение, Boolean breakConnection)
в System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning (TdsParserStateObject stateObj)
в System.Data.SqlClient.TdsParser.Run (RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin (Boolean enlistOK)
в System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin (ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnection owningObject)
в System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover (String host, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, Int64 timerStart)
в System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist (SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
в System.Data.SqlClient.SqlInternalConnectionTds..ctor (DbConnectionPoolIdentity идентичность, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
в System.Data.SqlClient.SqlConnectionFactory.CreateConnection (DbConnectionOptions параметры, объект poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
в System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection (DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
в System.Data.ProviderBase.DbConnectionFactory.GetConnection (DbConnection owningConnection)
в System.Data.ProviderBase.DbConnectionClosed.OpenConnection (DbConnection externalConnection, DbConnectionFactory ConnectionFactory)
в System.Data.SqlClient.SqlConnection.Open ()
в ADSK.PSEB.ACRSubmitComponent.ACRSubmit.backgroundUploadWork_DoWork (Object отправитель, DoWorkEventArgs e) в C: \ Документы и Настройки \ lvlu \ Desktop \ Mulder \ Загрузить \ ADSK.PSEB.ACRSubmitComponent \ ствол \ ADSK.PSEB.ACRSubmitComponent \ Form1.cs: линия 897
в System.ComponentModel.BackgroundWorker.OnDoWork (DoWorkEventArgs е)
в System.ComponentModel.BackgroundWorker.WorkerThreadStart (Object аргумент)

Ответы [ 2 ]

3 голосов
/ 13 октября 2009

Сообщение об ошибке действительно говорит само за себя:

SqlException was unhandled by user code 
Message="Login failed for user 'domain\username'." 
Source=".Net SqlClient Data Provider" ErrorCode=-2146232060 Class=14 

Из этого вы должны увидеть, что пользователь, которого вы используете для подключения к вашему Серверу B, очевидно, не имеет учетной записи на этом втором сервере.

Это никак не связано с ролью вашего приложения или чем-то еще - ваш пользователь "домен \ имя пользователя" просто не имеет прав доступа ко второму серверу.

Добавьте логин для этого пользователя и предоставьте ему доступ и необходимые разрешения для необходимых баз данных, и у вас все будет хорошо.

Марк

1 голос
/ 20 мая 2011

возможно что-то не так с вашими цепочками соединений

формат строки подключения имеет вид:

<add name="dbconnect" connectionString="Data Source=localhost;Initial Catalog=db_name;User ID=sa;Password=....." providerName="System.Data.SqlClient" />

справочный веб-сайт: Проблемы с соединением с SQL Server в приложениях ASP.NET с использованием состояния сеанса вне процесса

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...