Не работает хранимая процедура
Если для проверки подлинности используются текущие реквизиты учетной записи Windows (Integrated Security = true), то:
SqlConnection Connection = new SqlConnection(ConnectionString)
Connection.Open();
SqlCommand Command = new SqlCommand();
Command.Connection = Connection;
Command.CommandType = System.Data.CommandType.StoredProcedure;
Command.CommandText = "dbo.USP_CashLimits_Insert";
Command.ExecuteNonQuery();
Connection.Close();
Все работает.
Если же написать в командной строке что Integrated Security=False и указать User ID с паролем:
SqlConnectionStringBuilder SB = new SqlConnectionStringBuilder(ConnectionString);
SB.UserID = "RSolanov";
SB.Password = "1234567";
SqlConnection Connection = new SqlConnection(SB.ConnectionString);
Connection.Open();
SqlCommand Command = new SqlCommand();
Command.Connection = Connection;
Command.CommandType = System.Data.CommandType.StoredProcedure;
Command.CommandText = "dbo.USP_CashLimits_Insert";
Command.ExecuteNonQuery();
Connection.Close();
То в этом случае появляется такая же ошибка "Доступ к удаленному серверу запрещен из-за отсутствия сопоставления с именем входа".
Что же может не хватать для входа под заданным логином?
Что же может не хватать для входа под заданным логином?
Настройка SQL сервера скорее всего такова, что отключена SQL-аутентификация и доступ к SQL-серверу осуществляется посредством системы безопасности Windows.
На самом деле логин "RSolanov" - SQL SERVER Authentication. Пользователь заходит в Windows под своей учетной записью и запускает программу с этим кодом.
Разрешение на запуск хранимой процедуры у логина "RSolanov" имеется.
Должна быть настройка типа "используя указанный контекст безопасности"...
Должна быть настройка типа "используя указанный контекст безопасности"...
Вы совершенно правы.
По строке соединения видно, что подключение идет с указанием того, что при проверки подлинности используются не текущие реквизиты учетной записи Windows, а самого SQL-SERVER'а. Это исходит из того, что в строке соединения явно указываются Integrated Security=False, а также логин и пароль. Теперь далее. По-умолчанию всем логинам устанавливается роль public. До кучи я еще задал Permission на execute хранимой процедуры логину "RSolanov".
А теперь вдумаемся во фразу: "Доступ к удаленному серверу запрещен из-за отсутствия сопоставления с именем входа". И действительно, я просто забыл о том что эта хранимая процедура обращается к данным из удаленных серверов! А для получения таких данных SQL-SERVER говорит что You must be a member of the sysadmin role to perform this operation. То есть логину "RSolanov" необходимо было выставить роль sysadmin, что я и сделал. После этого все заработало. Всем огромное спасибо за участие и за помощь!