none
Mapear usuário RRS feed

  • Pergunta

  • Tenho um cenário que possuem 2 bases de dados. Cada base de dados tem usuários das demais bases de dados devido a restrições no acesso de alguns objetos. Fiz o restore e queria mapeá-los novamente. Veja exemplo do cenário:

    MODELO:

    -- BD 1 -> login  U1

    ----- U1 -- dbo (BD 1)

    ----- U2 -- BD 2

    -- BD 2 -> login : U2

    ----- U1 -- BD 1

    ----- U2 -- dbo (BD 2)

    A base de dados BD 1 acessa a BD 2 pelo usuário U1 que está na BD 2.

    Como faço para fazer o mapeamento dos usuários "estrangeiros" à cada base após o restore?

    Não achei nada que me ajudasse nesse problema. Alguém aí teria a solução para isso?

    Resumindo: como fazer para mapear usuários para o mesmo login de uma base de dados após o restore. Existe algum comando para isso?

    Obrigado.


    Felipe Ribeiro
    Onde está logo a jactância? É excluída. Por qual lei? Das obras? Não; mas pela lei da fé. Concluímos, pois, que o homem é justificado pela fé sem as obras da lei (Rm.3:27-28). Obras se tornam resultado da fé.



    sábado, 11 de agosto de 2018 15:56

Respostas

  • Felipe,

    Veja se o script abaixo poderá lhe ajudar:

    SELECT
     'CREATE LOGIN ' + QUOTENAME(NAME) +
     CASE
      WHEN TYPE_DESC LIKE 'WINDOWS%' THEN ' FROM WINDOWS'
     ELSE ' WITH PASSWORD = ' + 
      SYS.FN_VarBinToHexStr(CAST(LOGINPROPERTY(NAME,'PasswordHash') As VARBINARY(MAX))) + ' HASHED' +
      ' , SID = ' + SYS.FN_VarBinToHexStr(CAST(SID As VARBINARY(MAX))) + ' , '
     END +
     
     CASE
      WHEN TYPE_DESC LIKE 'WINDOWS%' THEN ' WITH '
     ELSE '' END +
     
     'DEFAULT_DATABASE = ' + default_database_name + ', ' + 
        'DEFAULT_LANGUAGE = ' + default_language_name
    FROM SYS.server_principals
    WHERE TYPE_DESC IN ('SQL_LOGIN','WINDOWS_LOGIN','WINDOWS_GROUP')
    
     
    A parte de privilégios pode ser montada programaticamente também com o script abaixo:
     
    SELECT state_desc + ' ' + permission_name + ' TO ' +
    QUOTENAME(Name) COLLATE Latin1_General_CI_AS_KS_WS,
    p.permission_name,
    p.state_desc, s.name
    FROM sys.server_permissions p
    INNER JOIN sys.server_principals s ON
    p.grantee_principal_id = s.principal_id
    


    Pedro Antonio Galvão Junior [MVP | MCC | MSTC | MIE | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitário | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]

    terça-feira, 14 de agosto de 2018 13:03
    Moderador