SqlCommand-class принудительно только SELECT? - PullRequest
0 голосов
/ 06 сентября 2010

Я разрабатываю приложение для SQL-наблюдения, это просто консольное приложение, которое будет запускаться каждые 5 минут на нескольких серверах. Он имеет конфигурационный файл со строкой подключения и SQL-запрос. Дело в том, что я хотел бы, чтобы программа принимала только запросы SELECT.

Мой коллега сказал мне, что он думал, что я мог бы установить что-то в классе SqlCommand, но я некоторое время гуглял без успеха. Кто-нибудь получил чистое решение по моей проблеме? Я думал о поиске в запросе разных слов, но это может привести к ошибкам.

Любые предложения приветствуются!

Ответы [ 3 ]

2 голосов
/ 06 сентября 2010

Сама таблица базы данных может быть ограничена.
Вы можете отозвать все разрешения, но выбрать пользователя вашего приложения.
поиск REVOKE/GRANT команд для SQL-SERVER.

0 голосов
/ 06 сентября 2010

Предоставление привилегий было бы лучшим способом, но вы все равно можете анализировать инструкцию, даже если она представляет собой серию команд SQL, используя что-то вроде этого:

bool OkToRun = true;
foreach(string s in TheQueryString.Split(";".ToCharArray(), StringSplitOptions.RemoveEmptyEntries))
    if (!s.Trim().ToUpper().StartsWith("SELECT "))
        OkToRun = false;
0 голосов
/ 06 сентября 2010

Это не будет возможно, если ваше приложение не создаст весь оператор SELECT.

Проблема в том, что даже если вы убедитесь, что первое слово - SELECT, ничто не остановит злонамеренного пользователя, завершившего команду, а затем введя также оператор EXEC или UPDATE.

Лучшее решение - этоубедитесь, что учетная запись пользователя, указанная в строке подключения, имеет ограниченные разрешения для объектов SQL и, таким образом, будет работать только SELECT из поддерживаемых объектов.

...