Realizando restore com permissionamento mínimo
Posted by Marcos Freccia
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.
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.
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.
.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.
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]
About Marcos Freccia
MVP em SQL Server (Data Plataform) , especialista em SQL Server, e atualmente trabalhando com Microsoft Azure!Posted on December 11, 2012, in Administração, SQL Server, VirtualPass and tagged Permissoes, Restore com permissionamento minimo, Restore database, SQL Server. Bookmark the permalink. 3 Comments.
Leave a Reply Cancel reply
This site uses Akismet to reduce spam. Learn how your comment data is processed.
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
Pois é Niltão… olhando por esse seu ponto de vista me parece também que o BOL está correto.
Abraços,
Marcos Freccia
Pingback: Segurança no SQL Server « Alex Souza