Встроенная роль базы данных в SQL Server 2005 позволяет выполнять хранимые процедуры?

В SQL Server 2005 есть встроенные роли:

db_datareader

db_datawriter

и др.

Есть ли какая-либо роль, которая позволяет пользователю выполнять хранимую процедуру?

Я не хочу использовать db_owner, потому что это разрешит удаление и обновления, которые мне не нужны. Единственные разрешения, которые мне нужны:

SELECT

EXECUTE

Ответы

Ответ 1

Взгляните на статью . Это может дать вам интересную идею, чтобы сделать это быстро.

Код, используемый в этой статье:

/* Create a new role for executing stored procedures */
CREATE ROLE db_executor

/* Grant stored procedure execute rights to the role */
GRANT EXECUTE TO db_executor

/* Add a user to the db_executor role */
EXEC sp_addrolemember 'db_executor', 'AccountName'

Ответ 2

Нет, я не считаю, что есть роль базы данных или сервера - вам необходимо предоставить разрешение на выполнение пользователю для соответствующих хранимых процедур.

Ответ 3

CREATE ROLE db_executor

GRANT EXECUTE TO db_executor

Теперь, если вы перезапустите SQL Server Management Studio, когда вы нажмете на странице "Сопоставление пользователей" в разделе "Безопасность → ", вы увидите "db_executor" в списке ролей. Просто добавьте пользователя или вы можете сделать это вручную:

EXEC sp_addrolemember 'db_executor', 'AccountName'

Ответ 4

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

Set @Routines = Cursor Fast_Forward For
    Select ROUTINE_SCHEMA + '.' + ROUTINE_NAME, ROUTINE_TYPE, DATA_TYPE
    From INFORMATION_SCHEMA.ROUTINES
    Where ROUTINE_NAME NOT LIKE 'dt_%'
        Or ROUTINE_TYPE = 'FUNCTION'

Open @Routines
Fetch Next From @Routines Into @Procname, @RoutineType, @DataType

While @@Fetch_Status = 0
Begin
    Set @Msg = 'Procname: ' + @Procname + ', Type: ' + @RoutineType + ', DataType: ' + Coalesce(@DataType,'')
    Raiserror(@Msg, 10, 1) WITH NOWAIT

    If @RoutineType = 'FUNCTION' And @DataType = 'TABLE'
        Set @SQL = 'GRANT SELECT ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader'
    Else
        Set @SQL = 'GRANT EXECUTE ON OBJECT::' + @Procname + ' TO StoredProcedureDataReader'

    exec(@SQL)

    Fetch Next From @Routines Into @Procname, @RoutineType, @DataType
End

Close @Routines
Deallocate @Routines

Этот код предоставит EXECUTE хранимым процедурам и скалярным функциям и SELECT для пользовательских функций, которые возвращают тип TABLE.