2011-01-02 3 views
0

У меня есть пользователь db, который имеет только разрешение db_reader. (У него ВЫБОР на все).SQL Server: выполнить грант без гранта dml

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

Есть ли способ вокруг него?

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

+0

Не понимаю, почему у меня есть -1. Думал, что это законный вопрос. – Faruz

+0

Я тоже не понимаю, поэтому я поддержал это. – Amy

ответ

0

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

+0

Тогда я должен отбирать СП. Это боль для будущего развития. – Faruz

+0

Ну, вот что вам нужно делать. – Amy

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

    использование [YourDBNameHere] GO GRANT EXECUTE ON [ TheSchemaNameHere]. [YourSPNameHere] к [YourRoleNameHere] GO

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

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

+0

Тогда я должен вручную выбрать SP. Это боль для будущего развития. – Faruz

+0

@Faruz, добавив группу, вам нужно будет только выбрать sp. Добавьте пользователей в группу. Никогда не работайте с пользователями только группами, но вы знаете, что –

+0

Благодарим вас за ответ. Проблема в том, что SPs изменяют каждую сборку, появляются новые, обновленные и редко даже удаленные. Поэтому мне нужно поддерживать этот список в каждой сборке, которая является болью. – Faruz

1

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

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

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

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