Из вашего вопроса непонятно, почему вы не просто используете для этого разрешения: предоставляйте пользователям права 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 и т. Д.
Разрешения (возможно, используемые с хранимыми процедурами) являются реальным решением здесь, потому что предложенная вами альтернатива будет трудной для написания и поддержки и почти наверняка будет иметь дыры в ней.