Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения: SQL Server Управляемый экземпляр SQL Azure
Свойство TRUSTWORTHY базы данных указывает, доверяет ли экземпляр SQL Server базе данных и её содержимому. По умолчанию эта настройка — OFF, но вы можете установить его ON , используя оператор ALTER DATABASE .
Рассмотрим пример.
ALTER DATABASE AdventureWorks2025 SET TRUSTWORTHY ON;
Примечание.
Чтобы задать этот параметр, необходимо иметь CONTROL SERVER разрешение или быть членом фиксированной роли сервера sysadmin.
Чтобы снизить определённые угрозы, оставьте свойство TRUSTWORTHY базы данных на OFF. Эти угрозы могут возникать в результате прикрепления базы данных, содержащей один из следующих объектов:
Вредоносные сборки с
EXTERNAL_ACCESSнастройками разрешения илиUNSAFE. Для получения дополнительной информации см. раздел безопасность интеграции CLR.Вредоносные модули, определённые для работы как высокопривилегированные пользователи. Для получения дополнительной информации см. EXECUTE AS пункт о пункте.
Обе ситуации требуют определённой степени привилегий и защищены соответствующими механизмами, когда используются в контексте базы данных, уже подключённой к экземпляру SQL Server. Однако если база данных отключена, если у вас есть доступ к файлу базы данных, вы можете подключить его к экземпляру SQL Server вашего выбора и добавить вредоносное содержимое в базу данных. При отключении и присоединении баз данных в SQL Server определенные разрешения задаются в файлах данных и журналах, ограничивающих доступ к файлам базы данных.
Поскольку база данных, подключённая к экземпляру SQL Server, нельзя сразу доверять, ей не разрешается получать доступ к ресурсам за пределами её объёма, пока она не будет явно признана надёжной. Поэтому, если вы делаете резервную копию или отделяете базу данных с такой TRUSTWORTHYON опцией и прикрепляете или восстанавливаете базу данных на тот же или другой экземпляр SQL Server, свойство TRUSTWORTHY устанавливается на OFF момент завершения присоединения или восстановления. Кроме того, модули, предназначенные для доступа к ресурсам вне базы данных, и сборки с разрешением EXTERNAL_ACCESSUNSAFE или имеют дополнительные требования для успешной работы.
Примечание.
По умолчанию TRUSTWORTHY настройка установлена на ON для msdb базы данных. Если изменить этот параметр с его значением по умолчанию, это может привести к неожиданному поведению компонентов SQL Server, использующих msdb базу данных.
Если вы установите TRUSTWORTHY параметр на ON, и если владелец базы данных является членом группы с административными учетными данными, например, в группе системного администратора, владелец базы данных может создавать и запускать небезопасные сборки, которые могут навредить экземпляру SQL Server.
Примечания
В среде интернет-провайдера (ISP), например, веб-хостинге, каждый клиент управляет собственной базой данных и не может получить доступ к системным или другим пользовательским базам данных. Например, провайдер может размещать базы данных двух конкурирующих компаний в одном экземпляре SQL Server. Если вы прикрепите пользовательскую базу данных к её исходному экземпляру, вы можете добавить опасный код в пользовательскую базу. Когда вы развернули базу данных в экземпляре провайдера, код становится активным. Такой сценарий делает контроль доступа между базами данных ключевым.
Если одна и та же общая организация владеет и управляет каждой базой данных, установление доверительных отношений с базой данных всё равно не является хорошей практикой, если только не требуется специфическая функция приложения, например, кросс-база данных Service Broker, не требует этого. Вы устанавливаете доверительные отношения между базами данных, позволяя цепочку владения между базами данных или отмечая базу данных как доверенную экземпляром с этим TRUSTWORTHY свойством.
is_trustworthy_on Столбец представления sys.databases каталога показывает, имеет ли база данных набор TRUSTWORTHY свойств.
Ниже приведены рекомендации по управлению базами данных и доверию.
Назначайте разные базы данных разным владельцам. Не все базы данных должны принадлежать системным администратором.
Ограничение количества владельцев для каждой базы данных.
Доверяйте выборочно.
Оставьте настройку цепочки владения между базами данных,
OFFесли только не развёртаете несколько баз данных как одну единицу.Переведите использование на выборочное доверие вместо использования свойства
TRUSTWORTHY.
Следующий Transact-SQL пример возвращает список баз данных, у TRUSTWORTHY которых свойство установлено как ON и чей владелец базы данных принадлежит системному администратору фиксированного сервера.
SELECT SUSER_SNAME(owner_sid) AS DBOWNER,
d.name AS DATABASENAME
FROM sys.server_principals AS r
INNER JOIN sys.server_role_members AS m
ON r.principal_id = m.role_principal_id
INNER JOIN sys.server_principals AS p
ON p.principal_id = m.member_principal_id
INNER JOIN sys.databases AS d
ON suser_sname(d.owner_sid) = p.name
WHERE is_trustworthy_on = 1
AND d.name NOT IN ('msdb')
AND r.type = 'R'
AND r.name = N'sysadmin';
GO
Следующий пример определяет TRUSTWORTHY свойство msdb базы данных.
SELECT name,
CASE is_trustworthy_on
WHEN 1 THEN 'Trustworthy setting is ON for msdb'
ELSE 'Trustworthy setting is OFF for msdb'
END AS trustworthy_setting
FROM sys.databases
WHERE database_id = 4;
GO
Если этот запрос показывает, что свойство TRUSTWORTHY установлено на OFFmsdb, вы можете выполнить следующий запрос, чтобы восстановить его до значения по умолчанию .ON
ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO
Предупреждение системы безопасности
Когда TRUSTWORTHY свойство естьON и владелец базы данных является членом роли системного администратора фиксированного сервера, член роли db_owner фиксированной базы данных может повысить свои права до статуса системного администратора. Оба условия обязательны. Будьте осторожны с TRUSTWORTHY недвижимостью.
Следующий Transact-SQL код возвращает список пользователей базы данных, которым присвоена db_owner фиксированная роль.
SELECT roles.principal_id AS RolePrincipalID,
roles.name AS RolePrincipalName,
database_role_members.member_principal_id AS MemberPrincipalID,
members.name AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members
INNER JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id
WHERE roles.name = 'db_owner'
AND members.name <> 'dbo';
GO