Eu tenho um usuário do servidor sql que tem a capacidade de descartar qualquer banco de dados. Estou executando o código abaixo para verificar os direitos que o usuário possui no SQL Server, mas não consegui identificar como o usuário tem a capacidade de descartar bancos de dados. Existe um script sql que possa me ajudar a identificar como esse usuário pode descartar dbs? Existe um comando para negar a eliminação de qualquer banco de dados? (SSMS não está mostrando o usuário como parte da função dbcreator)
select USER_NAME(p.grantee_principal_id) AS principal_name,
dp.type_desc AS principal_type_desc,
p.class_desc,
OBJECT_NAME(p.major_id) AS object_name,
p.permission_name,
p.state_desc AS permission_state_desc
from sys.database_permissions p
inner JOIN sys.database_principals dp
on p.grantee_principal_id = dp.principal_id
order by principal_name
A saída da consulta acima fornece os três registros a seguir para o usuário, se for útil
class_desc object_name permission_name permission_state_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE GRANT
Eu sugeriria executar esta consulta no mestre
Isso deve lhe dar uma boa ideia das funções que têm acesso ao seu banco de dados mestre e ver se o usuário tem ou não alguma dessas funções. Você também pode executar isso em qualquer um dos seus outros bancos de dados para verificar as permissões do usuário em um banco de dados por nível de banco de dados. Esta deve ser uma ferramenta importante para ajudar a rastrear isso.
Eu usei isso algumas vezes com bons resultados, a fonte do código abaixo pode ser encontrada aqui :
Indo para a documentação aqui , os requisitos de segurança para um usuário descartar um banco de dados são declarados como:
Você pode negar explicitamente a permissão a alguém mencionado acima, mas entenda que o nível em que você nega pode não afetar como você pensa. Lembro-me de ter lido um white paper que explicava como o SQL Server valida as permissões de um usuário na conexão, mas não consegue localizá-lo agora. Se bem me lembro, posso negar a eles a conexão com um banco de dados, mas o fato de o usuário fazer parte da
sysadmin
função tem precedência.Eu examinaria a auditoria especificamente para o
DROP DATABASE
comando ser seguro.A consulta que você obteve listará apenas as permissões para o banco de dados no qual você a executa. Uma maneira de obter permissão para descartar um banco de dados é ALTER ANY DATABASE, que é uma permissão no nível do servidor. Para verificá-los, tente esta consulta:
Em outras palavras, o usuário pode estar obtendo permissão para descartar bancos de dados no nível de login do servidor em vez do nível de usuário do banco de dados.