Mais um post da série SQL Server Vida e Obra , dessa vez sobre uma role bem peculiar: dbcreator, também conhecido como filho do sa. Cuidado com essa permissão, beleza?
O que é o DBCREATOR?
A documentação oficial da Microsoft (meio datada, mas ainda vale), diz:
Members of the dbcreator fixed server role can create databases, and can alter and restore their own databases.
Em português simples traduzido no popular:
Membros da função fixa dbcreator podem criar bases de dados, e podem alterar e restaurar suas próprias bases
Bem, vamos explorar um pouco e mostrar que a role vai um pouco além do que o nome sugere (criar bases)…O que pode ser uma benção e uma maldição, dependendo do ambiente.
Aplicação
É uma conta com permissões importantíssimas. O primeiro ponto a ser observado é que um dbcreator possui permissão para criar, alterar e dropar qualquer banco, até os que não é de sua criação (sentiu o perigo?) assim como pode utilizar o comando RESTORE tanto pra banco quanto pra LOG (este porém restrito às suas bases e/ou com as permissões adequadas. Tal assunto será abordado futuramente com maiores detalhes).
Testes
Primeiramente vamos verificar as permissões que a role possui:
EXEC sp_srvrolepermission 'dbcreator'
Listando (os riscados não serão abordados neste post.):
– Add member to dbcreator (também conhecido como milagre da multiplicação)
– ALTER DATABASE
– CREATE DATABASE
– DROP DATABASE
– Extend database (Alterar o tamanho de um arquivo da base)
– RESTORE DATABASE
– RESTORE LOG
– sp_renamedb (Procedure que renomeia o banco)
Bem, vamos começar oficialmente com os testes….
1) Criação do login
-- Criação de dois usuários CREATE LOGIN DbaCriador WITH PASSWORD = '123', CHECK_POLICY = OFF CREATE LOGIN FilhoDoDbaCriador WITH PASSWORD = '123', CHECK_POLICY = OFF -- DBACriador agora é Dbcreator EXEC sp_addsrvrolemember 'DbaCriador','dbcreator' -- Ainda logado com seu login de administrador, crie um banco qualquer CREATE DATABASE meuBanco
Agora logue como DbaCriador no Management Studio (ou da forma que preferir, contanto que consiga se passar pelo login).
2) Rename e Drop
Perceba agora o quanto a role é potente no sentido de permissões:
-- Pode criar seu próprio banco CREATE DATABASE BancoDoCriador -- Pode renomear o próprio banco EXEC SP_RENAMEDB 'BancoDoCriador','BancoDoCriadorV2' -- Pode dropar o banco dos outros (dropando o banco criado por seu usuário maior) DROP DATABASE meuBanco
Consegue observar o tamanho da possível encrenca? É sempre bom reforçar que, dentro de uma instância, o maior bem é o banco de dados, e sua destruição e criação são sem dúvida uma das permissões mais sagradas que um principal pode ter.
Não precisamos comentar também a habilidade de repassar a Role para outros membros, e com o poder “milagre da multiplicação” temos mais um problema: um dbcreator criando outro dbcreator!
Veja ainda logado como dbcreator:
EXEC sp_addsrvrolemember [FilhoDoDbaCriador],'DBCREATOR'
Considerações finais
Considere essa role uma das mais próximas do sa propriamente dito (assim como a security admin). Ultimamente caiu um pouco em desuso, pois, geralmente quem tem permissão de criar bases, pelo menos nos ambientes que observei, já possuem permissão de sysadmin, logo, não possuem restrição alguma. Se realmente for necessário que um principal crie bases, existe uma abordagem muito mais esperta:
GRANT CREATE ANY DATABASE TO login
Privilégio mínimo na prática.
Pingback: Roles do SQL Server – Public | Renato Siqueira
Pingback: Roles do SQL Server – Vida e Obra | Renato Siqueira