Есть ли инструмент для проверки минимальных привилегий, необходимых для набора SQL? - PullRequest
4 голосов
/ 01 февраля 2010

Если у меня есть набор SQL (т. Е. Сценарий, содержащий произвольные операторы SQL), есть ли способ узнать, какие минимальные разрешения требуются для выполнения SQL?

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

Немного фона:

Как часть приложения, у меня есть набор сценариев обновления (которые изменяют данные в таблицах, а также изменяют схему), которые будут запускаться в зависимости от базы данных клиента. Я хочу проанализировать эти сценарии обновления на предмет возможных проблем с разрешениями перед их развертыванием, поскольку клиент, выполняющий их, может иметь ограниченный доступ к SQL Server. Типы вещей, которые происходят в этих сценариях, обычно включают добавление / удаление / изменение таблиц / столбцов / индексов, но я также выбираю из представлений информационной схемы и системных таблиц.

РЕДАКТИРОВАТЬ:

У меня есть обработка ошибок, чтобы справиться с теми случаями, когда у пользователя нет необходимых прав для обновления. Я также в настоящее время проверяю, что пользователь, выполняющий обновление, db_owner, но меня больше волнуют вещи вне обновляемой базы данных. Например, сценарии довольно часто используют системные таблицы для получения информации о схеме базы данных, чтобы решить, следует ли выполнять определенное действие - я хотел бы знать, какие разрешения необходимы для доступа к этим таблицам. Другой пример - включение сжатия страниц. Нужны ли пользователю специальные разрешения для этого?

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

Ответы [ 2 ]

1 голос
/ 01 февраля 2010

Я не думаю, что такая команда существует.

Я бы рекомендовал установить для учетной записи обновления значение db_owner, чтобы они запускали скрипт. Будь проще. Или для этой цели отправьте роль в свой БД.

Может быть, вы могли бы создать фазу «pre-execute», которая пытается выполнить некоторые команды, а затем откатывает их обратно. Было бы несколько ошибок, если у вас нет доступа. Впрочем, довольно круто.

0 голосов
/ 22 сентября 2011

Я думал о том же. Было бы здорово, если бы в SQL-профилировщике была какая-то опция, которая позволяла бы вам отслеживать, какие разрешения были использованы. Таким образом, вы можете просто предоставить системному администратору логин, а затем запустить приложение / пользователя и удалить все неиспользуемые разрешения.

Как насчет ... Если вы выполнили трассировку профилировщика и сохранили его в виде сценария SQL, тогда нужно было что-то проработать в каждой инструкции трассировки, чтобы определить необходимые разрешения?

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

...