Permissões do SQL Server para criar, restaurar, excluir apenas alguns bancos de dados

17

No MS SQL Server 2008 R2, preciso ter um usuário que possa criar, restaurar, DBCC CHECKDB e, em seguida, descartar bancos de dados. Mas ele não deve ser capaz de acessar ou excluir bancos de dados especificados no servidor (motivos de segurança). Esta configuração é possível?

Cicik
fonte
Você pode obter algumas dicas aqui: toadworld.com/platforms/sql-server/w/wiki/…
dezso

Respostas:

27

Sim, é possível através de algumas permissões.

Primeiro - para criar um banco de dados - você precisaria conceder permissão ao nível do servidor Create Any Database. Essa permissão faz exatamente o que parece - o poder de criar um banco de dados. Observe que isso não está atribuindo a função de servidor fixa do dbcreator ao logon, pois essa função de servidor fixa concede permissões de alteração / exclusão em qualquer banco de dados. Create Any Databasepermite que o logon tenha esse poder apenas sobre os bancos de dados que eles possuem. Isso também dará a capacidade de restaurar.

(Portanto, executando SOMENTE "Criar qualquer banco de dados" - você está criando a capacidade de criar um novo banco de dados, mas evitando a possibilidade de descartar ou alterar qualquer banco de dados obtido usando a função de servidor fixa dbcreator)

Para conceder essa permissão "Criar qualquer banco de dados" -

use [master]
GO
GRANT CREATE ANY DATABASE TO [LoginName]
GO

Para a capacidade de executar DBCC CHECKDBe eliminar bancos de dados - a função de banco de dados fixa db_owner é suficiente. Isso concede tudo o que você está solicitando. Observação: você também concede a este usuário a capacidade de selecionar, excluir, truncar, atualizar e inserir db_owner. Eu gosto de pensar nisso como sysadmindentro de um banco de dados.

Você só aplicará essa permissão ao banco de dados em que pretende ter essa capacidade. Isso permitirá que você controle em quais bancos de dados o usuário pode soltar, restaurar ou verificar o banco de dados. Quaisquer bancos de dados nos quais você não concedeu ao usuário essas permissões estarão protegidos contra esse usuário, executando essas ações em

Para fazer isso, primeiro mapeie o logon para um usuário do banco de dados:

USE [DatabaseName]
GO
CREATE USER [UserName] FOR LOGIN [LoginName] 
GO

E adicione esse usuário à db_ownerfunção (Funciona no SQL Server 2012 e diante):

ALTER ROLE [db_owner] ADD MEMBER [frank]
GO

Para o SQL Server 2008, você precisaria usar o procedimento armazenado do sistema para adicionar um membro da função como comentarista abaixo, corretamente apontado:

EXEC sp_addrolemember 'db_owner', 'frank';

Você também pode fazer tudo isso através da GUI. As informações de login que você faria através da pasta de segurança no SSMS no nível da instância: Clique com o botão direito do mouse no login -> Propriedades -> Segurables. Para o nível do banco de dados, você faria isso através da pasta de segurança no nível do banco de dados: clique com o botão direito do mouse e selecione novo usuário -> escolha o login que deseja usar na sua lista de logins do servidor / dê um nome ao usuário do banco de dados -> vá para a guia Associação para selecionar a associação da função.

O sistema de ajuda do SQL Server, Manuais Online, também é um recurso fantástico para a maioria das perguntas sobre permissões - se você determinar que precisa atribuir outras permissões. Basta pesquisar pelo comando T-SQL ao qual você deseja conceder permissões e normalmente há uma seção Permissões para esse comando no artigo, informando quais permissões são necessárias para executar esta ação. Você pode consultar o artigo do DBCC CHECKDB para obter um exemplo - cerca de 7/8 do caminho é a seção de permissões.

Mike Walsh
fonte
3
Eu gostaria apenas de acrescentar que ALTER ROLE [db_owner] ADD MEMBER [frank]funciona apenas a partir do SQL Server 2012. Se você estiver em SQL Server 2008 deve-se ir com o SP: EXEC sp_addrolemember 'db_owner', 'frank';(Ref aqui e aqui )
superjos