SQL Query работает в SSMS, но не в C #: SELECT запрещен - PullRequest
0 голосов
/ 20 ноября 2018

Для начала: это не конкретное утверждение, которое не работает.SELECT * FROM [TABLE]; тоже не работает.Когда я запускаю его в SSMS от имени пользователя A, он работает отлично.Когда я использую его в C # следующим образом:

string sqlCommand = "SELECT * FROM [TABLE];"

using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Name"].ToString()))
using (var command = new SqlCommand(sqlCommand, conn))
{
    conn.Open();

    using (var dataReader = command.ExecuteReader())
    {
        while (dataReader.Read())
        {
            // work with results
        }
    }
}

Я регистрирую этот блок кода с помощью try-catch и получаю следующее сообщение об ошибке: System.Data.SqlClient.SqlException (0x80131904): The SELECT permission was denied on the object 'TABLE', database 'MyDb', schema 'dbo'.

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

Моя строка подключения выглядит так:

Data Source=Server\Something;Initial Catalog=MyDb;User ID=DOMAIN\username;Password=verySecurePassword;Trusted_Connection=True;

Пользователь A имеет роль администратора данных на всей базе данных.

У вас есть идеи, почему это может быть?Мои администраторы БД также не могут мне помочь, и, похоже, это не проблема сети, так как соединение работает.

1 Ответ

0 голосов
/ 20 ноября 2018

Если в строке подключения указано следующее:

Trusted_Connection=True;

Эта часть строки подключения игнорируется:

User ID=DOMAIN\username;Password=verySecurePassword;

Надежные подключения и встроенная защита означают, что вы всегда подключиться к серверу в качестве учетной записи, на которой запущен процесс вашей программы.Вы не можете указать пароль;вместо этого программа передаст токен аутентификации, выданный для пользователя, выполняющего процесс, и база данных будет проверена по этому токену.

Если вам нужно использовать доменное имя, вы должны запустить вашу программу от имени этого пользователя.Если вам нужно использовать имя пользователя / пароль, вы должны использовать Sql-аутентификацию с не доменной учетной записью, определенной в Sql Server.

...