none
Execute as Self, Caller, Owner. RRS feed

  • Pergunta

  • Galera, criei uma procedure:

    alter procedure teste_grant 

    with execute as caller

    as

    declare @t varchar(max)

    select @t = 'select dbo.Teste_Grant222(500)'

    exec (@t)

    Eu fazendo dessa forma, o execute as ... funciona sempre da forma que eu quero.
    o Caller, pega os "direitos" do chamador.
    Self de quem criou,  e owner do owner do banco.
    Mas se eu tiro exec(@t) e coloco o select direto na função.
    E coloco execute as caller.
    O chamador que não tem permissão na função, consegue executar normalmente.
    por que?
    Na verdade, quando estou dando um select em uma tabela, select em uma função, etc
    Não consegui fazer funcionar o execute as ...
    Não muda em nada.
    Se coloco o exec(), funciona corretamente.


    Estudando certificação 70-433
    • Movido Gustavo Maia Aguiar sexta-feira, 5 de agosto de 2011 21:58 (De:SQL Server - Desenvolvimento Geral)
    sexta-feira, 5 de agosto de 2011 20:33

Respostas

  • Boa Noite,

    O uso da function nesse caso está diretamente relacionado ao conceito de Ownership chain. Possivelmente o Owner da procedure e o Owner da function são o mesmo (ou melhor dizendo pertencem ao mesmo esquema e portanto são objetos do mesmo dono). Nesse caso, como o Owner é dono dos dois objetos e já deu permissão na SP, fica subentendido que ele gostaria que o acesso à function fosse concedido. Se a SP fosse de um esquema diferente da function e os owners dos esquemas fossem diferentes, então sim teríamos owner diferente e a ownership seria quebrada o que forçaria uma verificação do Caller na function também.

    O uso de SQL dinâmicas também é uma estrutura que provoca quebra de ownership chain e por isso você está usando o EXECUTE AS USER para funcionar sem conceder permissão diretamente.

    Vale a pena lembrar que a opção OWNER não é o OWNER do banco, mas sim do objeto. Caso queira entender um pouco mais sobre Ownership, dê uma olhada no link abaixo:

    O que é Cross Database Ownership Chaining ?
    http://gustavomaiaaguiar.wordpress.com/2009/06/28/o-que-e-cross-database-ownership-chaining/

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaguiar.wordpress.com


    Classifique as respostas. O seu feedback é imprescindível
    sexta-feira, 5 de agosto de 2011 21:57