Propriedade de banco de dados TRUSTWORTHY

Aplica-se a: SQL Server (todas as versões com suporte)

A propriedade de banco de dados TRUSTWORTHY é usada para indicar se a instância do SQL Server confia no banco de dados e no conteúdo dentro dele. Por padrão, essa configuração é OFF, mas pode ser definida como ON usando a ALTER DATABASE instrução. Por exemplo, ALTER DATABASE AdventureWorks2012 SET TRUSTWORTHY ON;.

Observação

Para definir esta opção, é preciso ser um membro da função de servidor fixa sysadmin .

Recomendamos que você deixe a propriedade de banco de dados TRUSTWORTHY definida como OFF para atenuar determinadas ameaças que podem existir como resultado da anexação de um banco de dados que contém um dos seguintes objetos:

  • Assemblies maliciosos com um definição de permissão EXTERNAL_ACCESS ou UNSAFE. Para obter mais informações, consulte CLR Integration Security.

  • Módulos maliciosos que são definidos para serem executados como usuários com altos privilégios. Para obter mais informações, confira Cláusula EXECUTE AS (Transact-SQL).

Ambas as situações exigem um grau específico de privilégio e são protegidas por mecanismos apropriados quando são usadas no contexto de um banco de dados que já está anexado a uma instância de SQL Server. No entanto, se o banco de dados for colocado offline, se você tiver acesso ao arquivo de banco de dados, poderá anexá-lo a uma instância de SQL Server de sua escolha e adicionar conteúdo mal-intencionado ao banco de dados. Quando os bancos de dados são desanexados e anexados em SQL Server, determinadas permissões são definidas nos arquivos de dados e log que restringem o acesso aos arquivos de banco de dados.

Como um banco de dados anexado a uma instância de SQL Server não pode ser imediatamente confiável, o banco de dados não tem permissão para acessar recursos além do escopo do banco de dados até que o banco de dados seja explicitamente marcado como confiável. Portanto, se você fizer backup ou desanexar um banco de dados que tenha a opção TRUSTWORTHY ON e anexar ou restaurar o banco de dados para a mesma instância de SQL Server, a propriedade TRUSTWORTHY será definida como OFF quando a anexação ou restauração for concluída. Além disso, os módulos projetados para acessar recursos fora do banco de dados e assemblies com a configuração de permissão EXTERNAL_ACCESS e UNSAFE têm requisitos adicionais para serem executados com êxito.

Observação

Por padrão, a configuração TRUSTWORTHY é definida como ON para o msdb banco de dados. Se você alterar essa configuração de seu valor padrão, isso poderá resultar em um comportamento inesperado SQL Server componentes que usam o msdb banco de dados.

Se a configuração TRUSTWORTHY estiver definida como ON e se o proprietário do banco de dados for um membro de um grupo que tenha credenciais administrativas, como o grupo sysadmin, o proprietário do banco de dados poderá criar e executar assemblies não seguros que possam comprometer a instância do SQL Server.

Mais informações

Em um ambiente de PROVEDOR de Serviços de Internet (ISP) (por exemplo, em um serviço de hospedagem na Web), cada cliente tem permissão para gerenciar seu próprio banco de dados e é impedido de acessar bancos de dados do sistema e outros bancos de dados de usuário. Por exemplo, os bancos de dados de duas empresas concorrentes podem ser hospedados pelo mesmo ISP e existir na mesma instância de SQL Server. O código perigoso pode ser adicionado a um banco de dados de usuário quando o banco de dados é anexado à instância original e o código será habilitado na instância ISP quando o banco de dados for implantado. Essa situação torna crucial o controle do acesso entre bancos de dados.

Se a mesma entidade geral possui e gerencia cada banco de dados, ainda não é uma boa prática estabelecer uma relação de confiança com um banco de dados, a menos que um recurso específico do aplicativo, como uma comunicação entre bancos de dados do Service Broker, seja necessário. Uma relação de confiança entre bancos de dados pode ser estabelecida habilitando o encadeamento de propriedade entre bancos de dados ou marcando um banco de dados como confiável pela instância usando a propriedade TRUSTWORTHY. A is_trustworthy_on coluna da exibição de sys.databases catálogo indica se um banco de dados tem sua propriedade TRUSTWORTHY definida.

As práticas recomendadas para a propriedade e a confiança do banco de dados incluem o seguinte:

  • Tenha proprietários distintos para bancos de dados. Nem todos os bancos de dados devem pertencer ao administrador do sistema.
  • Limite o número de proprietários para cada banco de dados.
  • Confere confiança seletivamente.
  • Deixe a configuração de encadeamento de propriedade entre bancos de dados definida como OFF, a menos que vários bancos de dados sejam implantados em uma única unidade.
  • Migre o uso para a confiança seletiva em vez de usar a propriedade TRUSTWORTHY.

O exemplo de código a seguir pode ser usado para obter uma lista de bancos de dados que têm a propriedade TRUSTWORTHY definida como ON e cujo proprietário de banco de dados pertence à função de servidor sysadmin .

SELECT SUSER_SNAME(owner_sid) AS DBOWNER, d.name AS DATABASENAME 
FROM sys.server_principals r 
INNER JOIN sys.server_role_members m ON r.principal_id = m.role_principal_id 
INNER JOIN sys.server_principals p ON p.principal_id = m.member_principal_id 
INNER JOIN sys.databases 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' 

Você pode executar a consulta a seguir para determinar a propriedade TRUSTWORTHY do msdb banco de dados:

SELECT name, trustworthy_setting = 
CASE is_trustworthy_on
WHEN 1 THEN 'Trustworthy setting is ON for msdb' 
ELSE 'Trustworthy setting is OFF for msdb' 
END 
FROM sys.databases WHERE database_id = 4

Se essa consulta mostrar que a propriedade TRUSTWORTHY está definida como OFF, você poderá executar a consulta a seguir para definir a propriedade TRUSTWORTHY como ON.

ALTER DATABASE msdb SET TRUSTWORTHY ON;
GO 

Próximas etapas