Mapeamento de Vários Logons do Servidor para um Usuário de Banco de Dados

11

Esta parece ser uma pergunta estúpida, mas, apesar de algumas pesquisas, não consegui encontrar nenhuma informação sobre isso apenas (possivelmente devido ao uso da terminologia errada).

É possível registrar vários logins de servidor (autenticação de servidor sql) em um único usuário de banco de dados (que possui permissões atribuídas por ser membro de uma função de banco de dados)?

Eu tenho dezenas de logons sql (autenticação do servidor sql) que precisam ler uma configuração de um banco de dados central e prefiro mapear todos esses logons para um único usuário do banco de dados no banco de dados de destino do que criar um usuário de banco de dados próprio para cada logon.

Se sim, qual seria a sintaxe correta do T-SQL?

leepfrog
fonte
Quando você diz "logons de servidor", você quer dizer contas do Windows ou contas do SQL Server?
Phil Sumner
Estou falando de contas do servidor SQL. Vai editar a pergunta para esclarecer
leepfrog
Que tal criar um ROLEe adicionar usuários à função. Dessa forma, você apenas concede permissões para a função. Isso ajudará você a gerenciar a segurança de uma maneira melhor. Além disso, qual é a versão do servidor sql - 2008R2, 2012?
Kin Shah

Respostas:

19

Primeiro para garantir a terminologia. Um Login é um principal de segurança no nível da instância ( sys.server_principals) e um Usuário é um principal de segurança no nível do banco de dados ( sys.database_principals). Eles são unidos por um SID (identificador de segurança). Se você observar as visualizações do sistema acima, poderá ver como elas são unidas em um formato 1: 1 pelo SID. Isso é 1 Login para 1 Usuário em um banco de dados. Um logon pode ter vários usuários, mas eles devem estar em bancos de dados diferentes.

Portanto, você precisará criar um Usuário no seu banco de dados para cada Login que você deseja ter acesso a ele. É um comando bastante simples.

CREATE USER [UserName] FROM LOGIN [LoginName]

A partir daí, você pode colocar todos os seus usuários em uma única função (ou várias). Uma função é um contêiner que possui permissões e as compartilha com cada Usuário (para funções de banco de dados) ou Login (para funções de instância). Existe uma função de banco de dados incorporada chamada db_datareaderque fornece acesso de leitura a todas as tabelas e visualização no banco de dados. Você pode adicionar todos os seus usuários a essa função. No entanto, uma idéia melhor seria criar uma nova função e adicioná-la à db_datareaderfunção. Em seguida, adicione todos os seus usuários à nova função. O benefício aqui é que, se você deseja adicionar permissões adicionais ao grupo, basta alterá-las na função.

Crie a função:

CREATE ROLE RoleName

Adicionar um usuário a uma função (ou uma função para outra)

EXEC sp_addrolemember 'RoleName','UserName'

ou se você estiver em 2012 ou superior

ALTER ROLE [RoleName] ADD MEMBER [UserName]
Kenneth Fisher
fonte
Obrigado pela explicação detalhada e por fornecer informações básicas sobre Kenneth, o que eu não sabia ao certo era That's 1 Login to 1 User in a database.
precisa saber é o seguinte