locked
Permissões Base de Dados RRS feed

  • Pergunta

  • Pessoal, tenho um SQL Server 2000 SP4.

    Ha alguns dias trocamos nosso servidor por um mais novo.

    Tinha varias bases usadas por diversos programas diferentes nesse antigo servidor. Essas bases foram transferidas por meio de um RESTORE para esse novo servidor.

    Todas funcionam perfeitamente, porem uma delas quando eu faço o RESTORE, ela nao da acesso aos usuarios.

    Qaundo crio uma base me branco, ou melhor o programa que eu uso cria a base automaticamente em branco, os usarios a acessam normalmente, porem quando faço um RESTORE da base antiga, esses usuarios perdem a conexão, e me aparece um erro de falha no Login.

    Eu gostaria de restaurar essa base sem a configurações de segurança que ela tinha.

    Isso é possivel?? Alguem tem alguma ideia??

     

    aguardo.

    segunda-feira, 24 de julho de 2006 18:20

Respostas

  • Olá Yuri,

    O que está acontecendo é que embora vc tenha um login no novo servidor com o mesmo nome do login do servidor antigo, quando vc restaura o banco de dados, o usuário dentro do banco de dados não possui uma associação com o login existente no novo servidor. Mesmo tendo o login o mesmo nome que o usuário. Na prática o que acontece é que seu usuário (o existente dentro do banco de dados fica órfão).

    O que vc pode fazer é executar os procedimentos já passados pelos colegas ou então usar um script para fazer a associação do usuário existente dentro da base de dados com o seu novo login, que na maioria das vezes possui o mesmo nome.

    Existe uma procedure chamada sp_change_users_login que vc pode estar usando para fazer esta reassociação do usuário do db com seu novo login.

    Segue um exemplo tirado do BOL do SQL Server 2000. Este exemplo associa o usuário Mary do banco de dados Pubs com o seu novo login NewMary.

    B. Change the login for a user

    This example changes the link between user Mary in the pubs database and the existing login, to the new login NewMary (added with sp_addlogin).

    --Add the new login.
    USE master
    go
    EXEC sp_addlogin 'NewMary'
    go
    
    --Change the user account to link with the 'NewMary' login.
    USE pubs
    go
    EXEC sp_change_users_login 'Update_One', 'Mary', 'NewMary'
    

     um abraço

    segunda-feira, 24 de julho de 2006 22:49
    Moderador

Todas as Respostas

  • sim esse procedimento e normal, pois os ids internos dos usuarios da sua base e dos logins do sql server sao diferentes para resolver esse problema use

     

    sp_revokedbaccess 'usuario'

    go

    sp_grantdbaccess 'usuario'

     

    Abs;

    segunda-feira, 24 de julho de 2006 18:27
  • Ok, com oeu posso fazer isso?

    Nao tenho um conhecimento muito amplo em SQL.

    Obrigado.

    segunda-feira, 24 de julho de 2006 18:29
  • vc. esta usando o sql 2000 ou 2005 ?

    se for no 2000 use o query analiser para fazer isso, se for o 2005 use um new query no managment studio

    Abs;

    segunda-feira, 24 de julho de 2006 18:40
  • Yuri,

    Através da Stored Procedure sp_revokedbaccess, você esta bloqueando que o usuário determinado tenha acesso ao banco.

    Já a SP_GrantDBAccess, você estará liberando o acesso ao banco.

    segunda-feira, 24 de julho de 2006 19:08
    Moderador
  • Olá Yuri,

    O que está acontecendo é que embora vc tenha um login no novo servidor com o mesmo nome do login do servidor antigo, quando vc restaura o banco de dados, o usuário dentro do banco de dados não possui uma associação com o login existente no novo servidor. Mesmo tendo o login o mesmo nome que o usuário. Na prática o que acontece é que seu usuário (o existente dentro do banco de dados fica órfão).

    O que vc pode fazer é executar os procedimentos já passados pelos colegas ou então usar um script para fazer a associação do usuário existente dentro da base de dados com o seu novo login, que na maioria das vezes possui o mesmo nome.

    Existe uma procedure chamada sp_change_users_login que vc pode estar usando para fazer esta reassociação do usuário do db com seu novo login.

    Segue um exemplo tirado do BOL do SQL Server 2000. Este exemplo associa o usuário Mary do banco de dados Pubs com o seu novo login NewMary.

    B. Change the login for a user

    This example changes the link between user Mary in the pubs database and the existing login, to the new login NewMary (added with sp_addlogin).

    --Add the new login.
    USE master
    go
    EXEC sp_addlogin 'NewMary'
    go
    
    --Change the user account to link with the 'NewMary' login.
    USE pubs
    go
    EXEC sp_change_users_login 'Update_One', 'Mary', 'NewMary'
    

     um abraço

    segunda-feira, 24 de julho de 2006 22:49
    Moderador
  • Olá Yuri se vc quiser pode utilizar esse procedimento que tenho em tutorial no meu site..... com isso vc não ira perder as permissões....siga os procedimentos

     

    http://www.msit.com.br/publicacaoDetalhes.aspx?id=26

     

    terça-feira, 25 de julho de 2006 12:46
  • Pessoal esse é o mesmo problema que eu estou e não consigo resolver de forma, usando o artigo do Sr. Andre Hass, a associação realmente foi feita, porém meus usuários ainda não consegue acessar a base, eu preciso setar a basa na aba Database Access das propriedades do usuário que fica no security logins, mas ele fala que o usuários já existe, e realmente existe porém se eu apagar o usuário da database ele vai perder as permissões, ta dificil isso aqui.

     

    Obrigado

    sexta-feira, 25 de agosto de 2006 11:26
  • Olá Slackdi,

    Este é um dos principais motivos pelos quais sempre recomendo evitar atribuir permissões para usuários. A melhor coisa a fazer é criar database roles de acordo com as permissões dos usuários, adicionar o usuário dentro da respectiva role e atribuir as permissões às roles.

    Bom, quanto ao seu problema, se quando vc olha o usuário dentro da pasta user do seu banco de dados ele não estiver com a coluna "Login Name" preenchida, é porque ele está órfão, ou seja, embora vc tenha um login ele não está associado ao seu login.

    Para isso vc pode usar o script abaixo no Query Analyzer. Execute na instância do banco de dados onde o usuário existe.

    sp_change_users_login 'Update_One','usuario','respectivo_login'

    Neste caso o SQL irá associar o usuário da base com o login informado, onde normalmente usamos o mesmo nome.

    sp_change_users_login 'Update_One','nilton','nilton'

    Caso o proplema continue, post aqui o resultado da query abaixo e possíveis msg de erros.

    Use Seu_banco
    go
    sp_helpuser

    um abraço

    sábado, 26 de agosto de 2006 12:05
    Moderador
  • Olá Slackdi se vc ja associou os usuários usando meu tutorial, para que vc esta querendo recriar os usuário de novo ?
    segunda-feira, 28 de agosto de 2006 01:34
  • Galera obrigado . .seguindo o tutorial do Andre Hass deu certo e usando a dica do Niltom também.

    Obrigado

    sábado, 16 de setembro de 2006 06:18
  • blz.....  precisar estamos aiii...

     

    sábado, 16 de setembro de 2006 17:09
  • Ola a todos,

    O mesmo problema persiste no meu ambiente já executei os procedimentos do Nilton e do Andre, mas ele nao associa o nome de login ao user executei os seguintes passos conforme a thread

    use banco
    sp_revokedbaccess 'login'
    go
    sp_grantdbaccess 'login'
    go
    EXEC sp_change_users_login 'Update_One', 'login', 'login'

    Depois disso executei o seguinte comando conforme a dica do Nilton
    use banco
    sp_helpuser

    ---------- Começa aqui --------------------------------

    Username|GroupName |LoginName |DefDBName | UserID | SID
    login db_owner login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    login db_accessadmin login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    login db_securityadmin login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    login db_ddladmin login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    login db_backupoperator login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    login db_datareader login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    login db_datawriter login master 6 0xEC0CE6DC6FC0454EA5D59876947DA945
    BUILTIN\Administrators db_owner BUILTIN\Administrators master 9 0x01020000000000052000000020020000
    dbo db_owner NULL NULL 1 0x03D630B8AD37A04AB16BE34179DA31C6
    eis db_owner NULL NULL 8 0x7CC1CD5F2D6A394BB0ECE0A8FCB70067
    teste db_owner teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    teste db_accessadmin teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    teste db_securityadmin teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    teste db_ddladmin teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    teste db_backupoperator teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    teste db_datareader teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    teste db_datawriter teste Banco 10 0x50E438A9566A754893CBC1CF5562A59F
    WebDev db_owner NULL NULL 7 0x1B6E94C3564421489339028CD73B9E89

    ---------- Termina Aqui -------------------------------


    E dentro do banco nos user não esta preenchido o campo loginName, alguém já passou por cima tem alguma idéia para solucionar, desde já agradeço

    Atenciosamente
    quinta-feira, 31 de maio de 2007 02:19