Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Riscos de segurança de configurar trusted =on no sql server 2012


O TRUSTWORTHY propriedade de um banco de dados (quando definido como ON ) declara essencialmente ao SQL Server que o código contido nesse banco de dados e executado em um contexto representado deve ter permissão para alcançar fora desse banco de dados, mantendo esse contexto de segurança representado. Também permite todos Assemblies SQLCLR nesse banco de dados a serem definidos como EXTERNAL_ACCESS e UNSAFE , se esse código alcança ou não fora do servidor (fora do significado:acesso à rede, acesso ao sistema de arquivos, acesso ao registro, acesso ao ambiente, etc).

É um meio bastante genérico de permitir isso, pois abrange todo o código dentro do banco de dados. O uso de certificados e/ou chaves assimétricas para assinar módulos - procs e/ou assemblies - permite um controle mais granular sobre qual código tem quais permissões.

Configurando um banco de dados para TRUSTWORTHY também permite que qualquer processo iniciado neste Banco de Dados alcance o nível do Servidor e/ou através de outros Bancos de Dados. Normalmente, um processo é confinado / colocado em quarentena no Banco de Dados onde foi iniciado. Se o banco de dados for de propriedade do login "sa", então qualquer processo iniciado nesse banco de dados e executado como "dbo" terá efetivamente privilégios "sa" (caramba!).

Em vez de tentar descrever aqui, na quantidade de detalhes necessária para comunicar completamente os detalhes sobre a representação, estendendo a representação, módulos de assinatura, etc., recomendo ler os seguintes recursos sobre este tópico:

Você deve evitar configurar seu banco de dados para TRUSTWORTHY tanto quanto possível. Se você realmente deve ter chamadas multithreading/assíncronas E se você tiver o código-fonte e estiver compilando o assembly, não consigo pensar em um motivo para usar o SET TRUSTWORTHY ON opção. Em vez disso, você deve assinar o assembly com uma senha e use os seguintes comandos para configurar o método preferido de permitir EXTERNAL_ACCESS e UNSAFE montagens:
USE [master];
  CREATE ASYMMETRIC KEY [ClrPermissionsKey]
    AUTHORIZATION [dbo]
    FROM EXECUTABLE FILE = 'C:\path\to\my\assembly.dll';

CREATE LOGIN [ClrPermissionsLogin]
  FROM ASYMMETRIC KEY [ClrPermissionsKey];

GRANT UNSAFE ASSEMBLY TO [ClrPermissionsLogin];

Uma vez que está no lugar, você pode ir para o banco de dados onde seu assembly foi carregado e executar:
ALTER ASSEMBLY [MyAssembly] WITH PERMISSION_SET = UNSAFE;

Ou você poderia ter incluído WITH PERMISSION_SET = UNSAFE no final do CREATE ASSEMBLY comando.