Есть ли список ключевых слов выполнения SQL, например. ВСТАВИТЬ, ИЗМЕНИТЬ - PullRequest
1 голос
/ 14 февраля 2012

У меня есть программа, которая позволяет пользователю выполнять сценарии SQL. У меня есть логин пользователя к программе, но появилось требование, чтобы предотвратить любое выполнение, даже если это пользователь с правами администратора.

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

Я хочу определить ключевые слова, которые пользователь может выполнить, например / INSERT, UPDATE, ALTER и надеялся, что где-то был определенный список.

Ответы [ 2 ]

4 голосов
/ 14 февраля 2012

Из вашего вопроса непонятно, почему вы не просто используете для этого разрешения: предоставляйте пользователям права SELECT и / или INSERT по мере необходимости. Вы также можете обернуть важные операции в хранимых процедурах и назначать EXECUTE только для процедур, если это лучше соответствует вашим потребностям.

Синтаксический анализ фактического SQL труден, потому что вы не можете просто искать определенные слова, вы также должны установить их контекст. Используя «DELETE» в качестве примера:

-- I guess you don't want this
delete from dbo.SomeTable
-- but maybe you do want this?
select * from dbo.SomeTable where Status = 'deleted'

И злонамеренные (или просто любопытные) пользователи наверняка получат удовольствие от тестирования ограничений вашего кода синтаксического анализа, чтобы увидеть, что они могут делать с EXEC, sp_executesql, OPENQUERY и т. Д.

Разрешения (возможно, используемые с хранимыми процедурами) являются реальным решением здесь, потому что предложенная вами альтернатива будет трудной для написания и поддержки и почти наверняка будет иметь дыры в ней.

2 голосов
/ 14 февраля 2012

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

Разрешено ли им запускать только SELECT?

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