Eu tenho um usuário do servidor sql que tem a capacidade de descartar qualquer banco de dados. Fiz 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 pode me ajudar a identificar como esse usuário pode eliminar o dbs? Existe um comando para negar que eles descartem algum banco de dados? (O 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 nome_do_objeto nome_da_objeção permission_state_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE GRANT
fonte
Respostas:
A consulta que você obteve lá listará apenas permissões para o banco de dados no qual você o 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á-las, tente esta consulta:
Em outras palavras, o usuário pode estar obtendo a permissão para descartar bancos de dados no nível de logon do servidor, e não no nível de usuário do banco de dados.
fonte
Eu sugeriria executar esta consulta no mestre
Isso deve lhe dar uma boa idéia das funções que têm acesso ao seu banco de dados mestre e ver se o tempo está ou não em que o usuário tem uma 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. Essa deve ser uma ferramenta importante para ajudar a rastrear isso.
fonte
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 entender que o nível em que você nega pode não afetar o que você pensa. Lembro-me de ler um white paper que explicava como o SQL Server validava as permissões de um usuário na conexão, mas não pode localizá-lo agora. Se bem me lembro, posso negar 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 que o
DROP DATABASE
comando fosse seguro.fonte