none
Permissão de acesso RRS feed

  • Pergunta

  • Olá, tenho um banco de dados "bdX" e preciso que o usuário apenas faça um "select" na tabela "tabX"

    estou usando o SQL Server 2005 e a conexão do usuário é Windows Authentication (DOMINIO\user),

    Adicionei o usuário no banco (Security > Logins) e na opção User Mapping escolhi o banco "bdX" e marquei a opção bd_datareader. Com isso ao acessar a opção Security > User do banco "bdX" o meu usuário DOMINIO\user está lá com a propriedade db_datareader na opção Database role membership está marcada.

     

    Porém quando o usuário tenta acessar a tabela (apenas leitura - select) é exibido a seguinte mensagem:

     

    SELECT permission denied on object 'tabX', database 'bdX', schema 'dbo'.

     

    o pior é que exitem diversos usuários no domínio que foi feita a mesma opção e funciona normalmente, apenas esse usuário está o problema... o que pode ser ? pode ter algo a ver com o grupo que esse usuário pertence no Active Directory ? há como existir um bloqueio no banco apenas para esse usuário/grupo, onde eu vejo isso no SQL Server ?

     

    Já fiz de tudo, exatamente como está com os demais usuários e não consegui...

    a única forma que encontrei foi setar a opção sysadmin lá na propriedade ServerRoles do Security > User do Servidor

    mas porque apenas para esse usuário (é um usuário comum e não gostaria de marcar essa opção)

     

    aguem poderia me explicar oque pode estar acontecendo ???

     

    muito obrigado,

     

    Eli Candido Jr

     

    sexta-feira, 16 de janeiro de 2009 17:49

Respostas

  • Eli,

     

    Provavelmente o que esta acontecendo é uma incompatibilidade entre versões do SQL Server!!!


    Como você migrou o banco de dados para o SQL Server 2005, para que possa utilizar as funcionalidades e recursos do SQL Server 2005 sobre este banco de dados, é necessário alterar o nível de compatibilidade para 90.

    segunda-feira, 19 de janeiro de 2009 15:42
  • Eli, porque vc utiliza a versão do SQL 2005 com compatibilidade para a versão 7.0, sua aplicação exige?

    vc só irá saber realmente se uma mudança para compatibilidade 9.0 irá afetar a sua aplicação se vc realizar uma avaliação minuciosa em busca de procedures, visões, objetos que sua aplicações referenciem quem possam não existir mais na versão 9.0(SQL 2005).

     

    Eu recomendo que vc realize um trace, nesse banco por um período de tempo 1 a 3 dias, e utilize o "SQL SERVER UPDATE ADVISIOR" 

     

    Existem 2 formais ´basicas de vc utilizar o "Upgrade Advisor":

    - A primeira é selecionando o banco de dados que vc deseja analisar, mas essa análise não é dinâmica.

    - A segunda é usando um arquivo trace gerado pelo profiler que pode avaliar todos os objetos e as fuções que estão descontinuadas. É claro que essa opção se enquadra melhor para o seu caso, visto que vc poderá efetivamente ser advertido das funções e objetos que a sua aplicação está usando e estão descontinuados. Assim, vc pode corrigire sua aplicação, procedures, funções ou views para que vc possa modificar o nível de compatibilidade do banco para 9.0.

     

    http://www.microsoft.com/downloads/details.aspx?familyid=1470e86b-7e05-4322-a677-95ab44f12d75&displaylang=en

     

     

       

    segunda-feira, 19 de janeiro de 2009 22:31

Todas as Respostas

  • Olá Eli,

     

    Se o usuário deve ter permissão apenas em tabX você não deve colocá-lo na role db_datareader, pois, isso fará com que ele consiga ler não somente tabX como qualquer outra tabela nesse banco. O ideal é dar as permissões apenas nessa tabela.

     

    Se ele está na role e ainda não consegue ler a tabela é porque possivelmente ele está em algum grupo em que a permissão é explicitamente negada. Como negar tem precedência sobre permitir, não será possível acessar. Você pode criar um usuário específico para esse login de rede e mapear as permissões para esse usuário. Ex:

     

    Code Snippet

    USE BANCO

    GO;

    CREATE USER [Dominio\NomeDoUsuarioNoAD] FROM [Dominio\NomeDoUsuarionoAD]

    GO

    GRANT SELECT ON tabX TO [Dominio\NomeDoUsuarioNoAD]

    GO

     

    Esse comando irá funcionar mesmo que não haja um login específico para o usuário do AD no SQL Server.

     

    [ ]s,

     

    Gustavo Maia Aguiar

    http://gustavomaiaaguiar.spaces.live.com

     

    sexta-feira, 16 de janeiro de 2009 18:14
  • Olá Gustavo, muito obrigado pelo retorno...

     

    eu fiz o procedimento que vc mencionou no entando continua sem permissão... nem consigo identificar se há alguma restrição exclusiva para o grupo que o usuário pertence...

     

    sexta-feira, 16 de janeiro de 2009 18:28
  • Eli,

     

    Você executando o comando para criar o Login e dar permissão não funcionou!!!

     

    Por acaso você já verificou se este usuário não este relacionado com algum grupo de trabalho ou schema?

    sexta-feira, 16 de janeiro de 2009 18:32
  • Oi Junior, não ão acredito que possa ser a questão de schema diferente, pois se fosse o caso o erro seria outro("object cannot be found...")

     

    Eli, o primeiro passo que vc deve realizar e verificar as permissões que estão configuraras nessa tabela.

     

    Execute:

    Code Snippet

    sp_helprotect [nome_tabela]

     

     

    Não vejo necessidade de explicitar a negação em um objeto, basecamente basta remover o acesso do public e explicitar as permissões, por isso, não vejo necesidade de se explicitar a negação, salvo, se por exemplo, vc der uma permissão para uma role que contenha um grupo de usuários ou roles e desse grupo vc deseje negar para alguns(explicitamente), mas não acredito que esse seja o cenário referido desse tópico.

     

    Use o comando grant para configurar a permissão desejada.

    exemplo:

    grant [COMANDO] on [tabela] to [login/role]

     

    os comando a ser permitido podem ser:

    * select, insert, execute, update, delete, references...

    sexta-feira, 16 de janeiro de 2009 22:59
  • Olá Emanuel,

     

    Executei e olha o retorno

     

    Incorrect syntax near 'collate'. You may need to set the compatibility level of the current database to a higher value to enable this feature. See help for the stored procedure sp_dbcmptlevel.

     

    lembrando que esse usuário que estou usando é conectado por Windows Atuthentication e pertence a um grupo do Domínio.

     

    já tentei adicionar a permissão através do comando GRANT e tbm não deu certo..

    segunda-feira, 19 de janeiro de 2009 12:52
  • Eli,

     

    Você esta utilizando qual versão do SQL Server?

     

    Por acaso esta banco de dados foi migrado de alguma outra versão do SQL Server?

     

    segunda-feira, 19 de janeiro de 2009 13:03
  • Olá Jr,

    estou usando o SQL Server 2005, mas realmente essa base foi migrada do SQL Server 7.

     

    Na verdade ela vem do 7 > 2005 > 2005 (SP - 64bits)

     

    as propriedades do banco são:

     

    Collation: SQL_Latin1_General_CP1_CI_AS
    Compability level: SQL Server 7.0

     

    isso tem a ver com as permissões ? o que eu poderia fazer ?

     

    segunda-feira, 19 de janeiro de 2009 15:39
  • Eli,

     

    Provavelmente o que esta acontecendo é uma incompatibilidade entre versões do SQL Server!!!


    Como você migrou o banco de dados para o SQL Server 2005, para que possa utilizar as funcionalidades e recursos do SQL Server 2005 sobre este banco de dados, é necessário alterar o nível de compatibilidade para 90.

    segunda-feira, 19 de janeiro de 2009 15:42
  • Existe algum "risco" alterar esse nível de compatibilidade ??? Em que essa alteração poderia afetar (negativamente),

     

    Desde já muito obrigado pela atenção,

     

    segunda-feira, 19 de janeiro de 2009 15:46
  • Eli,

     

    Risco é muito dificil afirmar, a mudança do nível de compatibilidade permiti utilizar os recursos disponíveis no SQL Server 2005, mas a partir do momento que você realizar este alteração, funcionalidades específicas que existem no SQL Server 7 não estaram mais disponíveis.

     

     

    segunda-feira, 19 de janeiro de 2009 16:00
  • Eli, porque vc utiliza a versão do SQL 2005 com compatibilidade para a versão 7.0, sua aplicação exige?

    vc só irá saber realmente se uma mudança para compatibilidade 9.0 irá afetar a sua aplicação se vc realizar uma avaliação minuciosa em busca de procedures, visões, objetos que sua aplicações referenciem quem possam não existir mais na versão 9.0(SQL 2005).

     

    Eu recomendo que vc realize um trace, nesse banco por um período de tempo 1 a 3 dias, e utilize o "SQL SERVER UPDATE ADVISIOR" 

     

    Existem 2 formais ´basicas de vc utilizar o "Upgrade Advisor":

    - A primeira é selecionando o banco de dados que vc deseja analisar, mas essa análise não é dinâmica.

    - A segunda é usando um arquivo trace gerado pelo profiler que pode avaliar todos os objetos e as fuções que estão descontinuadas. É claro que essa opção se enquadra melhor para o seu caso, visto que vc poderá efetivamente ser advertido das funções e objetos que a sua aplicação está usando e estão descontinuados. Assim, vc pode corrigire sua aplicação, procedures, funções ou views para que vc possa modificar o nível de compatibilidade do banco para 9.0.

     

    http://www.microsoft.com/downloads/details.aspx?familyid=1470e86b-7e05-4322-a677-95ab44f12d75&displaylang=en

     

     

       

    segunda-feira, 19 de janeiro de 2009 22:31