SQL Server: грант выполняется без гранта dml - PullRequest
0 голосов
/ 02 января 2011

У меня есть пользователь db, у которого есть только разрешение db_reader.(У него есть SELECT на все).

У меня есть 100 хранимых процедур.Я хочу, чтобы он имел возможность выполнять только SELECT SP, а не DML.К сожалению, предоставление ему «выполнить» на всех - позволяет ему также выполнять DML (INSERT / UPDATE / DELETE).

Есть ли способ обойти это?

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

Ответы [ 3 ]

1 голос
/ 03 января 2011
  • Создание роли в базе данных
  • используйте код ниже, чтобы добавить роль к каждой из "избранных" хранимых процедур

    использовать [YourDBNameHere] GO GRANTВЫПОЛНИТЬ НА [TheSchemaNameHere]. [YourSPNameHere] В [YourRoleNameHere] GO

  • Добавить использование к роли

  • удалить разрешение пользователя «выбратьот всего "

1 голос
/ 03 января 2011

Умного пути нет, неважно, если это боль, как в других комментариях

  • разрешение отдельно (в других ответах)
  • использование схем (в других ответах)
  • используйте триггер на всех ваших таблицах

И DENY или db_denydatareader не будут работать на уровне таблицы

Хранимый процесс может запустить любойкод: нет способа различить выбор или процесс DML.

0 голосов
/ 03 января 2011

Разрешения в SQL Server могут применяться для каждой схемы. Поместите ваши процессы SELECT в отдельную схему и разрешите для нее разрешения EXEC.

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