Я работаю над продуктом, который запускает SQL-сервер, который позволяет некоторым приложениям входить в систему, а их логинам предоставляется разрешение на запуск хранимой процедуры - И НИЧЕГО НЕ ЕЩЕ. Хранимая процедура принадлежит администратору; хранимая процедура берет запрос и выполняет его, затем результаты возвращаются в приложение.Пользователь предоставил доступ к хранимой процедуре, но не может выполнить запрос
К сожалению, я не могу понять, почему приложение может вызывать хранимую процедуру, к которой ему предоставлен доступ, но хранимая процедура не может выполнить инструкцию SQL, которая была передана в нее.
Хранимая процедура выполняет переданный запрос при входе в систему как администратор, но когда я вхожу в систему как ограниченный пользователь, он выдает исключение в инструкции execute.
Например:
EXEC [Admin].[STORED_PROC] @SQL_STATEMENT = 'SELECT * FROM table_x'
STORED_PROC выглядит примерно так:
BEGIN TRY
EXEC (@SQL_STATEMENT)
END TRY
BEGIN CATCH
-- some logging when an exception is caught, and the exception is caught here!!!
END CATCH
Там нет ничего внутри заявлении попытка поймать за исключением того, что EXEC ... и sql_statement работает, когда я m зарегистрирован как Admin, но не тогда, когда я вошел в систему как Пользователь.
Может ли кто-нибудь помочь мне выяснить, какие разрешения мне необходимо установить, чтобы позволить Пользователю выполнять запросы только через хранимую процедуру?
Так был несколько комментариев о позволяя сырые операторы SQL, которые будут выполняться с помощью хранимой процедуры поражения цели с помощью хранимого прока ... но на самом деле то, что мы на самом деле делаем, мы пропускание зашифрованный SQL-запрос в хранимый proc, а сохраненный proc получает расшифрованный оператор и THEN он выполняет его.
Так что да, на самом деле необработанные SQL-запросы не являются безопасными, и они преследуют цель хранимых процессов, но я не знаю, как шифровать SQL-запросы, которые передаются через ODBC и запускаться с SQL Server до 2005 года.
В любом случае, я попытался установить некоторые минимальные меры предосторожности, чтобы иметь хотя бы базовую безопасность.