Параметр TRUSTWORTHY
может быть довольно опасным, если вы не будете осторожны, и, за исключением определенных обстоятельств, рекомендуется держать его выключенным. Однако по умолчанию MSDB
база данных TRUSTWORHTY
установлена ON
по умолчанию. Мне интересно, почему?
Я прочитал эту запись в BOL
Примечание. По умолчанию для параметра TRUSTWORTHY установлено значение ON для базы данных MSDB. Изменение этого параметра по умолчанию может привести к непредвиденному поведению компонентов SQL Server, которые используют базу данных MSDB.
Но меня интересует конкретика. Почему конкретно MSDB
нужно TRUSTWORTHY
включить? Какие функции это используют?
TRUSTWORTHY
выключить,msdb
чтобы увидеть, что перестает работать, и у вас будет хотя бы часть ответа :). Я подумал, что у BACKUP будут проблемы, но я просто попытался, и это удалось.Ответы:
Есть десятки объектов в
msdb
этом обращении кmaster
базе данных.Если бы msdb не были помечены как
TRUSTWORTHY
, пользователям потребовалось бы разрешение как наmsdb
объект, с которым они взаимодействуют, так и наmaster
объект, на который ссылается.Например, пользователям msdb, которые получают разрешения через роль базы данных SQLAgentUserRole, разрешается выполнение
msdb.dbo.sp_enum_sqlagent_subsystems
. Стек вызовов для этой процедуры в конечном итоге достигаетmaster
:Если
msdb
не помечено какTRUSTWORTHY
, то пользователям, которые являются частью роли базы данных SQLAgentUserRole, ТАКЖЕ потребуется разрешение на выполнениеmaster.dbo.xp_instance_regread
.Технически говоря, возможно, возможно удалить
TRUSTWORTHY
параметр вmsdb
и вместо этого предоставить определенные разрешения вmaster
. Однако эти необходимые разрешения не документированы и не поддерживаются.источник