none
DUVIDAS SOBRE CONCEITO DE PERMISSAO RRS feed

  • Pergunta

  • Senhores  ,
      Estou com uma missao na empresa de cotexto de seguranca onde tenho uns 15 Logins que nao tem permissao de Acesso em um determinada View de um  banco de dados e nem posso dar acesso para os mesmo , mas eles tem que acessar o conteudo dessas Views, entao sei que tem como fazer mas nao estou acertando

     Olhem o que eu fasso no Exemplo

    ---================================================================
    Aqui estou logado com sa

     

    USE

    MASTER

    GO

    --CRIA O USUARIO Andre_01

    Create Login

    Andre_01 With PassWord= 'damoco'

    Go

    --CRIA O USUARIO Andre_02

    Create Login

    Andre_02 With PassWord= 'damoco'

    Go

    --GRANT NO O BANCO db_Template_01

    USE

    db_Template_01

    Go

    Exec

    sp_GrantdbAccess 'Andre_01'

    --GRANT NO O BANCO db_Template_02

     

    USE t

    b_Template_02

    Go

    Exec

    sp_GrantdbAccess Andre_02

    Go


    USE

    MASTER

     

    Exec

    sp_Configure

    'cross db ownership chaining', 1

    Go

    Reconfigure

     

     

    Go



    use db_Template_02

    EXEC

    sp_dboption 'db_Template_02', 'db chaining', 'ON'
    GO
    USE
    MASTER
    GO

    GRANT
    IMPERSONATE ON LOGIN:: Andre_02 TO Andre_01

     

     

    -===============================================================

     Agora eu abro uma outra sessao e faco o login como  ( Andre_02 )  e crio uma View para teste

    USE [db_Template_02]
    GO
    /****** Object:  View [dbo].[vw_Template]    Script Date: 06/14/2009 15:24:32 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO

     

    Create View [dbo].[vw_Template]
     As

      Select coluna   = 'TESTE DE VIEW '
    Go

     Grant Select , References On vw_Template To Andre_02


    --===============================================================

     Agora eu abro uma outra sessao e faco o login como  ( Andre_01 ) 


     Quando eu executo uma consulta


    USE

    DB_TEMPLATE_01

    GO

    SELECT

    * FROM vw_Template

    Msg 208, Level 16, State 1, Line 1

    Invalid object name 'vw_Template'.

     



    Goandre

    • Movido Gustavo Maia Aguiar segunda-feira, 6 de julho de 2009 12:22 (De:SQL Server - Desenvolvimento Geral)
    domingo, 14 de junho de 2009 18:38

Respostas

  • Boa Tarde,

    Se você está utilizando o SQL Server 2005 é preciso "esquecer" certos hábitos do SQL Server 2000.

    No SQL Server 2005, não se utiliza mais sp_grantdbaccess para adicionar usuários a um banco de dados. Ao invés disso você deve utilizar "CREATE USER" e não sp_grantdbaccess. Se você utilizar a sp_grantdbaccess, você estará criando não somente um usuário, mas também um SCHEMA com o mesmo nome do usuário e esse schema será o schema Default e será o Schema onde a View será "procurada".

    Outro ponto é que você está criando a view em DB_TEMPLATE_02 e necessita chamá-la a partir de DB_TEMPLATE_01. Você deve então chamar o nome triplamente qualificado como DB_TEMPLATE_02.dbo.vw_Template ou criar um sinônimo em DB_TEMPLATE_01 que chame DB_TEMPLATE02.dbo.vw_Template

    Até que apareça uma mensagem de Access Denied não estaremos com problemas de permissão. Invalid Object Name refere-se a problemas de resolução de nomes.

    [ ]s,

    Gustavo Maia Aguiar
    http://gustavomaiaaguiar.spaces.live.com

    Como importar e exportar imagens entre o SQL Server e o File System ? – Parte I
    http://gustavomaiaaguiar.spaces.live.com/blog/cns!F4F5C630410B9865!601.entry


    Classifique as respostas. O seu feedback é imprescindível
    • Sugerido como Resposta Diogo A. Di Pietro segunda-feira, 15 de junho de 2009 16:26
    • Marcado como Resposta Arodrigues32 segunda-feira, 6 de julho de 2009 16:25
    domingo, 14 de junho de 2009 21:36

Todas as Respostas