J'ai un utilisateur de serveur SQL qui a la possibilité de supprimer n'importe quelle base de données. J'ai exécuté le code ci-dessous pour vérifier les droits que l'utilisateur a sur SQL Server mais je n'ai pas pu identifier comment l'utilisateur a la possibilité de supprimer des bases de données. Existe-t-il un script SQL qui peut m'aider à identifier comment cet utilisateur peut supprimer des dbs? Existe-t-il une commande pour leur refuser de supprimer des bases de données? (SSMS n'affiche pas l'utilisateur dans le cadre du rôle 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
La sortie de la requête ci-dessus fournit les trois enregistrements suivants pour l'utilisateur si cela est utile
class_desc nom_objet permission_name permission_state_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE GRANT
la source
Réponses:
La requête que vous y avez répertoriera uniquement les autorisations pour la base de données sur laquelle vous l'exécutez. Une façon d'obtenir l'autorisation de supprimer une base de données est ALTER ANY DATABASE, qui est une autorisation au niveau du serveur. Pour les vérifier, essayez cette requête:
En d'autres termes, l'utilisateur peut obtenir l'autorisation de supprimer des bases de données au niveau de la connexion au serveur plutôt qu'au niveau de l'utilisateur de la base de données.
la source
Je suggère d'exécuter cette requête sur le maître
Cela devrait vous donner une assez bonne idée des rôles qui ont accès à votre base de données principale et voir la météo ou non, l'utilisateur n'a aucun de ces rôles. Vous pouvez également l'exécuter sur n'importe laquelle de vos autres bases de données pour vérifier les autorisations de l'utilisateur sur une base de données par niveau de base de données. Cela devrait être un outil important pour aider à retrouver cette trace.
la source
Je l'ai utilisé plusieurs fois avec de bons résultats, la source du code ci-dessous peut être trouvée ici :
En poursuivant la documentation ici , les exigences de sécurité pour qu'un utilisateur supprime une base de données sont les suivantes:
Vous pouvez explicitement refuser l'autorisation à l'un mentionné ci-dessus, mais comprenez que le niveau auquel vous le refusez peut ne pas avoir d'effet comme vous le pensez. Je me souviens d'avoir lu un livre blanc qui expliquait comment SQL Server procédait à la validation des autorisations d'un utilisateur lors de la connexion, mais ne pouvait pas le localiser pour le moment. Si je me souviens, je peux leur refuser la connexion à une base de données, mais le fait que l'utilisateur fasse partie du
sysadmin
rôle prime.J'examinerais l'audit spécifiquement pour que la
DROP DATABASE
commande soit sûre.la source