Houve uma mudança nesta área no SQL Server 2008 e acima dele em comparação com o SQL Server 2005 e abaixo. Algumas delas estão documentadas abaixo.
Se eu estiver lendo o Books Online corretamente, um usuário poderá restaurar um banco de dados existente se ele for o DBO desse banco de dados; as palavras reais sã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).
Infelizmente, isso não parece estar exatamente correto ou há uma sutileza que sinto falta. Para um banco de dados específico, estou tentando fazer com que isso funcione, mas quando o usuário faz um RESTORE FILELISTONLY
para obter os arquivos no arquivo de backup, obtemos o erro:
Msg 262, Level 14, State 1, Line 1
CREATE DATABASE permission denied in database 'master'.
Msg 3013, Level 16, State 1, Line 1
RESTORE FILELIST is terminating abnormally.
É uma mensagem de erro um pouco confusa, já que neste momento estamos tentando ler o arquivo de backup, não criar nem restaurar um banco de dados existente; Portanto, só posso assumir que o SQL Server tente fazer uma verificação de permissões antes de permitir que qualquer comando RESTORE
seja executado.
Agora, o BOL não menciona nenhuma permissão extra necessária, por isso estou me perguntando qual é a correta ou se falta uma sutileza no texto. Embora eu não duvide da precisão das mensagens de erro, o que eu realmente preciso fazer para que um usuário que seja db_owner
de um banco de dados possa restaurar esse banco de dados, sem elevar suas permissões?
Meu entendimento é que você precisa ser membro da função db_creator - basicamente, o SQL Server não pode dizer se você é db_owner de um banco de dados que ainda precisa ser restaurado! Eu vejo o que você está dizendo embora ...