Realizando restore com permissionamento mínimo

Olá Pessoal,

A alguns dias atrás precisei realizar a criação de um usuário que pudesse além de realizar restore de sua própria base de dados, também poderia restaurar a base criando uma nova. Sabemos que para algumas operações necessitamos da Server Role sysadmin, mas será que para esse caso também é necessário?

De acordo com a documentação de restore do BOL existem duas situações. Vou colocar em inglês conforme retratado na documentação.

  • If the database being restored does not exist, the user must have CREATE DATABASE permissions to be able to execute RESTORE.
  • If the database exists, RESTORE permissions default to members of the sysadmin and dbcreator fixed server roles and the owner (dbo) of the database (for the FROM DATABASE_SNAPSHOT option, the database always exists).

Pelo o que podemos entender aqui é se a base existe basta você ter as Server Roles dbcreator  e Sysadmin e também ser owner da base de dados em questão. Se não existe você precisa ter permissões de Create Database que nesse caso também se traduz a dbcreator. Vamos ver na pratica como funciona.

1) Criação do login com a permissão necessaria.

USE [master]
GO
CREATE LOGIN [UserRestore] WITH PASSWORD=N'UserRestore', 
CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
ALTER SERVER ROLE [dbcreator] ADD MEMBER [UserRestore]
GO

Feito isso vamos realizar a criação de uma nova base de dados.

CREATE DATABASE TesteRestore
GO
USE TesteRestore
GO
CREATE TABLE tblteste (id INT IDENTITY, nome CHAR(500))
GO
INSERT INTO tblteste
VALUES
('SQL Server 2012') 
GO 500

Para continuar nossos testes vamos realizar a criação de um backup. Lembramos aqui que estou ainda com o usuário que é Sysadmin e somente no momento do restore utilizarei o usuário que criei acima.

BACKUP DATABASE TesteRestore 
TO DISK = 'C:\temp\TesteRestore.bak'

Como é possível visualizar abaixo executamos o backup com sucesso.

image

Antes de nos conectarmos na instancia com o usuario UserRestore, vamos conceder as permissões necessarias na base criada.

USE [TesteRestore]
GO
CREATE USER [UserRestore] FOR LOGIN [UserRestore]
GO
USE [TesteRestore]
GO
ALTER ROLE [db_owner] ADD MEMBER [UserRestore]
GO

Conectados na instancia com o usuario UserRestore vamos realizar o processo de restore.

Ao iniciar os comandos para o restore recebemos o seguinte erro.

image

Porque recebemos esse erro? Simples, a ação de pesquisar os arquivos em diretórios somente é concedida a membros da Server Role Sysadmin e como o usuario somente pertence a role dbcreator a ação não é executada.

Qual a saida para este problema?

Executar o restore via Transact-SQL ou T-SQL.

RESTORE DATABASE TesteRestore 
FROM DISK = 'C:\temp\TesteRestore.bak' WITH replace, RECOVERY, STATS = 5

Como é possivel visualizar abaixo, a ação é concluida com sucesso.

image
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, “Courier New”, courier, monospace;

Outro questionamento seria: É possivel realizar o restore criando uma nova base de dados?

Resposta: Via interface grafica não!! Mas via T-SQL é possivel utilizando a seguinte instrução.

USE [master]
GO
RESTORE DATABASE [TesteRestore_NewDatabase] 
FROM  DISK = N'C:\temp\TesteRestore.bak' WITH 
MOVE N'TesteRestore' 
TO N'D:\Program Files\Bases\TesteRestore_NewDatabase.mdf',  
MOVE N'TesteRestore_log' 
TO N'D:\Program Files\Bases\TesteRestoreNewDatabase_log.ldf',  
NOUNLOAD,  STATS = 5

E recebemos a seguinte mensagem de sucesso.

image

image

Como podemos ver é possivel sim, realizar restore do banco de dados sem necessitar da Server Role Sysadmin.

Acredito que a documentação do BOL está um pouco enganada a respeito disso, ou eu estou entendendo de uma maneira diferente o que a mesma está propondo.

Espero que tenham gostado e até a proxima.

Abraços,
Marcos Freccia
[MCTS|MCITP|MCT SQL Server 2008]

Sobre Marcos Freccia

MVP em SQL Server (Data Plataform) , especialista em SQL Server, e atualmente trabalhando com Microsoft Azure!

Publicado em dezembro 11, 2012, em Administração, SQL Server, VirtualPass e marcado como , , , . Adicione o link aos favoritos. 3 Comentários.

  1. Fala aí Freccia….bacana o artigo!
    Então, meu entendimento é que o BOL está correto! Caso o banco já exista a permissão de RESTORE “já está atribuida por default” aos membros de sysadmin, dbcreator e para o owner da base! Ou seja, desde que o usuário executando o RESTORE seja membro de uma destas roles ou ainda o owner da base…conseguirá executar o RESTORE.

    abs

  1. Pingback: Segurança no SQL Server « Alex Souza

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: