Links em segurança da integração CLR
Esta seção descreve como partes de código de usuário podem chamar umas às outras em SQL Server, seja no Transact-SQL ou em uma das linguagens gerenciadas. Essas relações entre objetos são conhecidas como links.
Links de invocação
Os links de invocação correspondem a uma invocação de código, seja de um usuário que chama um objeto (como um lote Transact-SQL chamando um procedimento armazenado) ou de um procedimento ou função armazenado clr (Common Language Runtime). Os links de invocação fazem com que uma permissão EXECUTE
no destinatário seja verificada.
Links de acesso à tabela
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.
Links de entrada
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. No momento da criação do objeto x, REFERENCE
a permissão é verificada em y em relação ao 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 em catálogos de SQL Server que impede que um objeto seja descartado, desde que outro objeto dependa dele.
Os links de entrada são úteis quando não é apropriado ou gerenciável conceder permissões a muitos objetos dependentes. Links fechados são introduzidos entre objetos que definem pontos de entrada Transact-SQL em assemblies CLR (por exemplo, procedimentos CLR, gatilhos, funções, tipos e agregações) e os assemblies dos quais são definidos. A segurança restrita contra esses objetos implica que, para invocar um ponto de entrada Transact-SQL definido em um assembly 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 no momento da criação do ponto de entrada Transact-SQL.
Segurança baseada na autorização do SQL Server
Veja a seguir as regras básicas por trás do SQL Server verificações de segurança para invocações de e entre objetos de banco de dados baseados em CLR; as três primeiras regras definem quais permissões são verificadas e em relação a qual objeto; a quarta regra define em qual contexto de execução a permissão é verificada.
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.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.Os links de acesso à tabela exigem as permissões
SELECT
,INSERT
,UPDATE
ouDELETE
correspondentes na tabela ou exibição acessada.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.