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

В SQL Server 2005, там создаются в ролях:

db_datareader

db_datawriter

и т.д.

Есть ли какая-либо роль, которая позволяет пользователю выполнить сохраненный proc?

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

ВЫБРАТЬ

ВЫПОЛНИТЬСЯ

15
задан Justin Dearing 18 March 2014 в 21:41
поделиться

3 ответа

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

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

/* 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'
21
ответ дан 1 December 2019 в 02:55
поделиться

Чтобы расширить ответ, общая суть заключается в создании роли базы данных и назначении разрешений для этой роли. Для этого вам понадобится модный динамический 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.

0
ответ дан 1 December 2019 в 02:55
поделиться

Это зависит от реализации ОС, но обычно существует структура данных «планируемый поток» для повышения эффективности.

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

-121--4690605-

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

Что касается переопределения встроенной обработки ошибок Python для всех программ... Я никогда не пробовал это, но я думаю, что это будет связано с некоторыми довольно низкоуровневыми изменениями. Ты всегда можешь обернуть свой код в огромный блок, но я предполагаю, что ты не хочешь этого делать. Я предпочитаю более Unixy подход написания небольшого сценария, который делает одну вещь, и делает это хорошо: пусть он принимает входные данные и, если это след стека, колоризировать его. В противном случае пропустите текст без изменений. Использование трубы, как вы и предлагали, может быть лучшим способом. (В этом случае для pipe stderr необходимо выполнить нечто подобное, объединяющее stderr со stdout перед piping: cmd1 2 > & 1 | cmd2 )

-121--1577319-

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

2
ответ дан 1 December 2019 в 02:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: