Porque Utilizar a Opção TRUSTWORTHY

Posted on outubro 24, 2012

4


 

Possuímos diversas opções de configuração para um banco de dados. Dentre elas temos a opção TRUSTWORTHY. Essa propriedade está relacionado ao nível de confiabilidade com a instância. Esta opção serve para alguns acontecimentos como utilização de assemblies com EXTERNAL_ACCESS / UNSAFE e requisições que utilizam de grande privilêgio para ser executada. Todas as requisições que exijam um grande nível de confiança para ser executada em outro escopo por padrão não terá permissão.

 

image

(Figura 1 – Padrão da Opção TRUSTWORTHY durante a criação de um banco de dados.)

 

Agora para entendermos melhor como essa opção é de extrema importância iremos realizar a criação de dois bancos de dados e um Login. Após isso iremos mapear os usuários para os dois bancos de dados.

 

CREATE DATABASE TrustWorthy1

CREATE DATABASE TrustWorthy2

 

CREATE LOGIN UsrLuanMoreno

WITH PASSWORD = ‘@LuanMoreno!’

 

USE TrustWorthy1

go

 

CREATE USER UsrLuanMoreno

FOR LOGIN UsrLuanMoreno

 

USE TrustWorthy2

go

 

CREATE USER UsrLuanMoreno

FOR LOGIN UsrLuanMoreno

No banco de dados TRUSTWORTHY1 iremos realizar a criação de uma tabela e popular a mesma.

 

USE TrustWorthy1

go

 

CREATE TABLE DadosIntegrantes

(

    ID INT IDENTITY(1,1),

    Nome VARCHAR(50) NOT NULL,

    DataNascimento DATETIME NOT NULL,

    Sexo CHAR(2) NOT NULL,

    EstadoCivil CHAR(2) NOT NULL,

    DataCadastro DATETIME DEFAULT GETDATE()

)

 

INSERT INTO DadosIntegrantes (Nome, DataNascimento, Sexo, EstadoCivil)

VALUES (‘Luan.Maciel’,‘1988-07-20’,‘M’,‘S’),

        (‘Antonio.Padua’,‘1976-04-05’,‘M’,‘S’),

        (‘Auguimar.Junior’,‘1983-01-05’,‘M’,‘S’),

        (‘Ribamar.Junior’,‘1984-09-01’,‘M’,‘C’)

Agora no banco de dados TRUSTWORTHY2 iremos realizar a criação de uma procedure que realizará a consulta dessas informações inseridas no banco de dados TRUSTWORTHY1. Nesse caso iremos utilizar a impersonalização da execução da procedure com o usuário que criamos anteriormente para o banco de dados UsrLuanMoreno.

USE TrustWorthy2

go

 

CREATE PROCEDURE dbo.proc_DadosIntegrantesSolteiros

AS

EXECUTE AS USER = ‘UsrLuanMoreno’

SELECT  *

FROM TrustWorthy1.dbo.DadosIntegrantes

WHERE EstadoCivil = ‘S’

Com a procedure criada sabemos que temos que conceder acesso a procedure e a tabela para o usuário UsrLuanMoreno e logo após isso podemos realizar a execução da procedure, então daremos as permissões necessárias.

 

USE TrustWorthy2

go

GRANT EXECUTE ON OBJECT :: dbo.proc_DadosIntegrantesSolteiros TO UsrLuanMoreno

 

USE TrustWorthy1

go

GRANT SELECT ON OBJECT :: dbo.DadosIntegrantes TO UsrLuanMoreno

Assim temos todas as permissões necessárias para executar a procedure, portanto executando temos…

EXEC TrustWorthy2.dbo.proc_DadosIntegrantesSolteiros

Msg 916, Level 14, State 1, Procedure proc_DadosIntegrantesSolteiros, Line 5
The server principal "UsrLuanMoreno" is not able to access the database "TrustWorthy1" under the current security context.

Como a execução de uma procedure contendo a opção EXECUTE AS USER = exige um grande nível de confiabilidade entre as bases de dados temos esse erro, agora se habilitarmos a opção TRUSTWORTHY para ON….

 

ALTER DATABASE TrustWorthy2

SET TRUSTWORTHY ON

 

EXEC TrustWorthy2.dbo.proc_DadosIntegrantesSolteiros

image

(Figura 2 – Execução da Procedure Proc_DadosIntegrantesSolteiros.)

 

Como agora nosso nível de confiabilidade está habilitado podemos realizar a chamada da procedure com o outro banco.