Встроенная роль базы данных в 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.