Compartilhar via


Links em segurança da integração CLR

Esta seção descreve como partes do código do usuário podem chamar uma à outra no SQL Server, tanto em Transact-SQL quanto em uma das linguagens gerenciadas. Essas relações entre objetos são conhecidas como links.

Os links de invocação correspondem a uma invocação de código, em uma chamada para um objeto feita pelo usuário (como, por exemplo, uma chamada de lote Transact-SQL para um procedimento armazenado), ou um procedimento armazenado ou função CLR (Common Language Runtime). Os links de invocação fazem com que uma permissão EXECUTE no destinatário seja verificada.

Os links de acesso à tabela correspondem à recuperação ou à modificação de valores em uma tabela, exibição ou uma função de valor de tabela. Eles são semelhantes aos links de invocação, exceto por apresentarem um controle de acesso mais refinado em termos de permissões SELECT, INSERT, UPDATE e DELETE.

Os links de entrada significam que, durante a execução, as permissões, uma vez estabelecidas, não são verificadas em todas as relações de objeto. Quando há um link de entrada entre dois objetos (por exemplo, objetos x e y), as permissões no objeto y e nos demais objetos acessados no objeto y só são verificadas no momento da criação do objeto x. Durante a criação do objeto x, REFERENCE a permissão é verificada em y em comparação com o proprietário de x. Em tempo de execução, (por exemplo, quando alguém chama o objeto x), nenhuma permissão é verificada em relação a y ou outros objetos referenciados estatisticamente. Em tempo de execução, uma permissão apropriada será verificada em relação ao próprio objeto x.

Os links de entrada são sempre usados em conjunto com uma dependência de metadados entre dois objetos. Essa dependência de metadados é uma relação estabelecida nos catálogos do SQL Server que impede um objeto de ser descartado enquanto outro objeto depender dele.

Os links de entrada são úteis quando não é apropriado ou gerenciável conceder permissões a muitos objetos dependentes. Os links de entrada são introduzidos entre objetos que definem pontos de entrada Transact-SQL em assemblies do CLR (por exemplo, procedimentos CLR, gatilhos, funções, tipos e agregações) e assemblies nos quais são definidos. A segurança de entrada nesses objetos implica que, para invocar um ponto de entrada Transact-SQL definido em um assembly do CLR, o chamador só precisa de uma permissão apropriada nesse ponto de entrada Transact-SQL. Não é obrigatório que o chamador tenha permissões nesse assembly ou em qualquer outro referenciado estaticamente. As permissões no assembly são verificadas durante a criação do ponto de entrada Transact-SQL.

Segurança baseada na autorização do SQL Server

Estas são as regras básicas por trás das verificações de segurança do SQL Server para invocações de e entre objetos de banco de dados baseados no CLR; as três primeiras regras definem quais permissões são verificadas e em quais objetos; a quarta, o contexto de execução em que a permissão é verificada.

  1. Todas as invocações exigem permissões EXECUTE, a menos que essas invocações ocorram no mesmo objeto, ou seja, as chamadas dentro do mesmo assembly não exigem verificações de permissão. A permissão é verificada em tempo de execução.

  2. Os links de entrada exigem a permissão REFERENCE no destinatário durante a criação do objeto de chamada. A permissão é verificada para o proprietário do objeto de chamada quando o objeto é criado.

  3. Os links de acesso à tabela exigem as permissões SELECT, INSERT, UPDATE ou DELETE correspondentes na tabela ou exibição acessada.

  4. A permissão é verificada no contexto de execução atual. Procedimentos e funções podem ser criados com um contexto de execução diferente do chamador. Os assemblies sempre são criados com o contexto de execução do procedimento, da função, do disparador definido.

Consulte também

Conceitos

Segurança da integração CLR