Ich habe einen SQL Server-Benutzer, der jede Datenbank löschen kann. Ich habe den folgenden Code ausgeführt, um die Rechte des Benutzers in SQL Server zu überprüfen, konnte jedoch nicht feststellen, wie der Benutzer Datenbanken löschen kann. Gibt es ein SQL-Skript, mit dem ich feststellen kann, wie dieser Benutzer dbs löschen kann? Gibt es einen Befehl, um das Löschen von Datenbanken zu verweigern? (SSMS zeigt den Benutzer nicht als Teil der dbcreator-Rolle an.)
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
Die Ausgabe der obigen Abfrage enthält die folgenden drei Datensätze für den Benutzer, wenn dies hilfreich ist
class_desc Objektname Berechtigungsname Berechtigungsstatus_desc OBJECT_OR_COLUMN xp_cmdshell EXECUTE GRANT DATABASE NULL CONNECT GRANT
DATABASE NULL CREATE DATABASE GRANT
quelle
Antworten:
In der Abfrage, die Sie dort haben, werden nur Berechtigungen für die Datenbank aufgelistet, für die Sie sie ausführen. Eine Möglichkeit, die Berechtigung zum Löschen einer Datenbank zu erhalten, ist ALTER ANY DATABASE, eine Berechtigung auf Serverebene. Versuchen Sie diese Abfrage, um diese zu überprüfen:
Mit anderen Worten, der Benutzer erhält möglicherweise die Berechtigung, Datenbanken auf der Serveranmeldungsebene und nicht auf der Datenbankbenutzerebene zu löschen.
quelle
Ich würde vorschlagen, diese Abfrage auf dem Master auszuführen
Dies sollte Ihnen eine ziemlich gute Vorstellung von den Rollen geben, die Zugriff auf Ihre Master-Datenbank haben und sehen, ob der Benutzer eine dieser Rollen hat oder nicht. Sie können dies auch für jede Ihrer anderen Datenbanken ausführen, um die Berechtigungen des Benutzers für eine Datenbank nach Datenbankebene zu überprüfen. Dies sollte ein wichtiges Instrument sein, um dies aufzuspüren.
quelle
Ich habe dies einige Male mit einigen guten Ergebnissen verwendet. Die Quelle des folgenden Codes finden Sie hier :
In der Dokumentation hier werden die Sicherheitsanforderungen für einen Benutzer zum Löschen einer Datenbank wie folgt angegeben:
Sie können die oben genannte Erlaubnis explizit verweigern, aber verstehen, dass die Ebene, auf der Sie sie verweigern, möglicherweise keine Auswirkungen hat, wie Sie denken. Ich erinnere mich, dass ich ein Whitepaper gelesen habe, in dem beschrieben wurde, wie SQL Server die Berechtigungen eines Benutzers bei einer Verbindung überprüft, es jedoch derzeit nicht finden kann. Wenn ich mich erinnere, kann ich ihnen die Verbindung zu einer Datenbank verweigern, aber die Tatsache, dass der Benutzer Teil der
sysadmin
Rolle ist, hat Vorrang.Ich würde mir die Prüfung speziell ansehen, um sicherzustellen, dass der
DROP DATABASE
Befehl sicher ist.quelle