Eu tenho um servidor de banco de dados (Sql Server 2008 R2 Enterprise) que oferece suporte a dois produtos de fornecedores separados, mas relacionados, cada um com seu próprio banco de dados (chame-os de X e Y)
No banco de dados XI, há muitos usuários definidos, mas seus direitos de acesso se resumem a um punhado de funções gerenciáveis. Eu gostaria de pegar uma dessas funções e usá-la para conceder acesso de seleção a algumas tabelas no banco de dados Y. Eu realmente quero evitar criar uma nova função no banco de dados Y e adicionar novamente todos os usuários, não apenas por causa do trabalho ocupado configurando essas informações de segurança, mas também devido à necessidade de manter essas funções sincronizadas ao longo do tempo, à medida que os usuários entram e saem. Realmente, a função que já existe no banco de dados X já faz um ótimo trabalho ao definir logicamente o grupo de acesso que desejo no banco de dados Y do ponto de vista comercial e quero mantê-lo assim.
Como posso conceder acesso em Y para esta função de X?
As funções de banco de dados são entidades de segurança totalmente contidas em seus respectivos bancos de dados e não são compartilhadas ou visíveis para outros bancos de dados. Portanto, quaisquer funções e usuários que estão no banco de dados X não têm conhecimento do banco de dados Y. Para atingir seu objetivo, você precisará recriar a função no banco de dados Y e adicionar todos os usuários apropriados a esse banco de dados e função. Felizmente, você pode criar um script desse processo usando as exibições do sistema:
Você pode levar esse tipo de script/processo para um trabalho em lote para manter as coisas sincronizadas, mas precisará de algum tipo de processo externo para manter essas funções sincronizadas.
Uma parte que pode ser confusa aqui é que você tem logins e outros principais de nível de servidor conectados aos principais do banco de dados, mas há uma distinção clara entre eles. Forneço algumas explicações sobre as diferenças entre esses princípios nesta resposta
Se você trabalha com Autenticação do Windows, pode adicionar seus usuários de domínio a um grupo de domínio e adicionar esse grupo como um login no SQL Server. Em seguida, dê a esse login as permissões desejadas nos bancos de dados relevantes.
Estou fazendo isso de uma nova maneira agora.
Eu configurei exibições no banco de dados X que fazem referência às tabelas que me interessam em Y e, em seguida, concedi
SELECT
permissões nessas exibições para a função que me interessa em X.Essa alteração foi feita há algum tempo e talvez eu também precise de alguma magia de servidor vinculado para lidar com a autenticação/segurança em Y para evitar a necessidade de duplicar permissões lá. Eu não me lembro. Mas hoje a visão existe em X, e gerenciar o acesso a essa visão é uma tarefa muito mais simples.