locked
Problema em executar uma stored procedure como outro usuário RRS feed

  • Pergunta

  • Estou tentando executar essa stored procedure, mas meu usuário acessa o sistema por approle, e é totalmente bloqueado o acesso aos dados, e ainda preciso adicionar esse insert em outro banco, que não é o que está executando a stored procedure, tentei como owner, mas diz que o "sa" não está hábil a executar essa tarefa sobre esse contexto de segurança.
    Segue a query da procedure:
    CREATE PROCEDURE [dbo].[Changes_Add_X] @Type_DBC smallint, @Tabe_DBC varchar(100), @RegisterID char(30), @Desc_DBC varchar(8000), @Desc_before_dbc VARCHAR(8000), @Keywords varchar(8000)
    WITH EXECUTE AS OWNER
     
    AS BEGIN
    INSERT INTO [Banco_Aux].[dbo].[Changes] (Time_DBC, Type_DBC, UserID, Tabe_DBC, RegisterID, Desc_DBC, Desc_before_dbc) 
    VALUES ( getdate(), @Type_DBC, SYSTEM_USER, @Tabe_DBC, @RegisterID, CONVERT(nvarchar(4000), @Desc_DBC), @Desc_before_dbc)
    END
    quarta-feira, 10 de agosto de 2011 15:22

Respostas

  • Boa Tarde,

    A Approle tem escopo de banco e não permitirá acesso externo com o mesmo contexto. Uma boa prática para acessar recursos de outros bancos via SP, é usar a assinatura de SP com certificados. Possivelmente a AppRole consiga trabalhar dessa forma:

    [ ]s,

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


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 10 de agosto de 2011 19:34

Todas as Respostas

  • Boa Tarde,

    A Approle tem escopo de banco e não permitirá acesso externo com o mesmo contexto. Uma boa prática para acessar recursos de outros bancos via SP, é usar a assinatura de SP com certificados. Possivelmente a AppRole consiga trabalhar dessa forma:

    [ ]s,

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


    Classifique as respostas. O seu feedback é imprescindível
    quarta-feira, 10 de agosto de 2011 19:34
  • Rodrigo,

    Você esta executando esta sp através de uma aplicação que se encontra em outro servidor?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    sexta-feira, 12 de agosto de 2011 12:11
    Moderador
  • Maia,

    Mas o certificado deve ficar no servidor ou ser adicionado as estações de trabalho?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    sexta-feira, 12 de agosto de 2011 12:11
    Moderador
  • A Stored Procedure, está no banco principal do meu programa, e a tabela em q a minha SP está tentando adicionar é em outro banco, mas como estou conectado com approle, eu não tenho permissão pra isso, eu estou fazendo outras coisas no momento e ainda não tentei implementar a idéia de certificado do Gustavo Maia Aguiar mas acho que vai dar certo. Assim que tiver respostas posto aqui. Abraços!
    sexta-feira, 12 de agosto de 2011 15:50
  • Rodrigo,

    Mas realmente é necessário utilizar approle?

     

    Será que através do comando sp_configure fazendo a liberação de execução de stored procedure remotas não poderia resolver o seu problema?


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário | MSIT.com]
    sábado, 13 de agosto de 2011 20:41
    Moderador
  • Bom Dia Jr.

    O recurso de certificados não é para validar a autenticação do usuário no banco, mas para validar o contexto da SP em outros bancos. Não é necessário distribuir nenhum certificado para os clientes (isso seria terrível (rs)).

    Para que um recurso de um banco possa ser acessado por outro banco é necessário trabalhar com o Cross Database Ownership ou o uso de certificados. Escrevi alguns artigos sobre os dois:

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

    Certificados, Cross Database Ownership Chaining e Segurança
    http://gustavomaiaaguiar.wordpress.com/2009/07/05/certificados-cross-database-ownership-chaining-e-seguranca/

    Agora confesso que não sei se irão funcionar com Application Roles. O Cross Database Ownership provavelmente não, mas o uso de certificados pode funcionar 

    [ ]s,

    Gustavo Maia Aguiar
    Blog: http://gustavomaiaaguiar.wordpress.com
    Vídeos: http://www.youtube.com/user/gmasql


    Classifique as respostas. O seu feedback é imprescindível
    domingo, 14 de agosto de 2011 13:50
  • Eu estou usando approle no programa, e o meu usuário não tem acesso a nada no banco. Não tenho como tirar essa approle, pq os usuários do nosso sistema, são usuários nativos do SQL, isso quer dizer que eles podiam acessar o banco direto pelo sql e fazer o que bem entendessem.

    Como que funciona a questão de sp_configure, seria como um grant?

    segunda-feira, 15 de agosto de 2011 13:03
  • Obrigado denovo Gustavo, vou testar assim que tiver tempo e posto o resultado aqui.

    Grato!

    segunda-feira, 15 de agosto de 2011 13:04