2016-04-06 3 views
0

Я пишу sql-процедуру, где почти все будет динамичным, включая выбор, группировку, упорядочение и где предложения с использованием операторов IN. Что касается повторного использования кода, его удобочитаемости и обслуживания, имеет смысл просто передать запрос sql в виде строки и выполнить ее. Я пишу свою процедуру прямо сейчас, чтобы все соответствующие данные были объединены и отформатированы в статическом запросе, а затем вставлены в переменную таблицы. Затем я хочу передать в sql-запросы, которые будут выполняться против переменной таблицы.Можно ли ограничить разрешения для каждой процедуры?

Это открывает мне до инъекции sql в большой путь. Я мог бы создавать параметры табличного значения для каждого из многих типов параметров, которые я передаю, но я не хочу этого делать. То, что я действительно хотел бы сделать sandbox моей процедурой таким образом, что на уровне процедуры можно делать только те вещи, которые я хочу разрешить; т.е. выбирать из определенных таблиц, но не предоставлять разрешения или что-то смешное. Это можно сделать?

+8

* Что касается повторного использования кода, его удобочитаемости и обслуживания, имеет смысл просто передать в sql-запрос в виде строки и выполнить его. * ** Я категорически не согласен. ** –

+1

Начните читать эти ссылки: http://www.sommarskog.se/dyn-search.html и http://www.sommarskog.se/dynamic_sql.html – HLGEM

+0

Не так много криков «кошмар обслуживания» громче, чем хранимая процедура, обобщенная для «сделать все». –

ответ

0

Конечно, это можно сделать. Это простой вопрос программирования. Вы должны хранить правила в таблицах и писать логику в своей хранимой процедуре для запроса таблиц правил и следовать правилам.

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

Я бы этого не сделал, но вам не нужно позволять этому останавливать вас.

Смежные вопросы