emeriks
Goto Top

MS SQL - minimal nötige Berechtigungen für System-Abfragen

Hi,
welche minimalen Rechte benötigt ein MS-SQL-Benutzer, um innerhalb der Instanz den verfügbaren Festplattenplatz auf den Laufwerken der Instanz abzufragen?
Meine u.g. Abfrage liefert mit einem sysadmin die gewünschten Ergebnisse. Die Abfrage soll aber mit einem dafür dediziertem Konto erfolgen, welche über nur die dafür absolut erforderlichen Rechte verfügen soll.

SELECT   DISTINCT([volume_mount_point]), [available_bytes] 
FROM     [sys].[master_files] AS [f] CROSS APPLY 
         [sys].[dm_os_volume_stats]([f].[database_id], [f].[file_id]) 
GROUP BY [volume_mount_point], [available_bytes] 
ORDER BY 1

Ich habe irgendwo gelesen, dass man auch eine Prozedur erstellen könnte, und dieser Prozedur dann diese Rechte erteilen könnte, statt dem Benutzer.
Stimmt das?
Und - wenn ja - wie richtet man sowas ein?

E.

Content-ID: 1486734745

Url: https://administrator.de/forum/ms-sql-minimal-noetige-berechtigungen-fuer-system-abfragen-1486734745.html

Ausgedruckt am: 10.04.2025 um 05:04 Uhr

sabines
sabines 09.11.2021 um 13:19:30 Uhr
Goto Top
Moin, ich bin nicht mehr so im MS SQL Thema, aber für die Master DB müssten view definition der Meta Daten reichen.

Über die Eigenschaften der gespeicherten Prozedur in der Seite Berechtigungen kannst Du entsprechende Berechtigungen einstellen, hier aber m.W. nur Benutzer. Was passiert denn wenn du das in eine SP verpackst (als SA) und dann eine entsprechende User Berechtigung erteilst?

Gruss
emeriks
emeriks 09.11.2021 um 14:14:57 Uhr
Goto Top
Falls Du das u.g. meinen solltest: Das habe ich schon gewährt.

USE MASTER
GO
GRANT VIEW SERVER STATE TO [username]
sabines
Lösung sabines 09.11.2021 aktualisiert um 15:43:32 Uhr
Goto Top
Hm, ich habe hier keinen MS SQL Server mehr zum Testen, daher ist das ein Blindflug für mich:

USE master 
GO 
GRANT VIEW ANY DEFINITION TO [username]

Und dann weiter einschränken
emeriks
emeriks 09.11.2021 aktualisiert um 15:32:00 Uhr
Goto Top
Zitat von @sabines:
GRANT VIEW ANY DEFINITION TO [username]
Danke, damit funktioniert es.
Und dann weiter einschränken
Ja ... Wie, wo und was? face-wink
sabines
sabines 09.11.2021 um 15:42:16 Uhr
Goto Top
Ehem, keine Ahnung face-wink
Mach mal Versuche ohne das ANY

USE master 
GO 
GRANT VIEW DEFINITION TO [username]
MadMax
MadMax 10.11.2021 um 20:26:52 Uhr
Goto Top
Moin,

ist zwar schon gelöst, aber weil Du nach der Möglichkeit gefragt hast, dem Benutzer nur die Berechtigung auf eine Prozedur zu erteilen:
create procedure testproc with execute as owner as
SELECT   DISTINCT([volume_mount_point]), [available_bytes] 
FROM     [sys].[master_files] AS [f] CROSS APPLY 
         [sys].[dm_os_volume_stats]([f].[database_id], [f].[file_id]) 
GROUP BY [volume_mount_point], [available_bytes] 
ORDER BY 1
go

grant execute on testproc to testuser
go

Statt "with execute as owner" könnte auch ein anderer Benutzer verwendet werden, es wäre dann "with execute as 'Benutzer'".

GRANT VIEW SERVER STATE ist dann überflüssig für den ausführenden Benutzer.

Gruß, Mad Max
emeriks
emeriks 11.11.2021 um 08:12:12 Uhr
Goto Top
Zitat von @MadMax:
Danke!
Das werde ich trotzdem ausprobieren.