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-Key: 1486734745

Url: https://administrator.de/contentid/1486734745

Printed on: May 4, 2024 at 06:05 o'clock

Member: sabines
sabines Nov 09, 2021 at 12:19:30 (UTC)
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
Member: emeriks
emeriks Nov 09, 2021 at 13:14:57 (UTC)
Goto Top
Falls Du das u.g. meinen solltest: Das habe ich schon gewährt.

USE MASTER
GO
GRANT VIEW SERVER STATE TO [username]
Member: sabines
Solution sabines Nov 09, 2021 updated at 14:43:32 (UTC)
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
Member: emeriks
emeriks Nov 09, 2021 updated at 14:32:00 (UTC)
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
Member: sabines
sabines Nov 09, 2021 at 14:42:16 (UTC)
Goto Top
Ehem, keine Ahnung face-wink
Mach mal Versuche ohne das ANY

USE master 
GO 
GRANT VIEW DEFINITION TO [username]
Member: MadMax
MadMax Nov 10, 2021 at 19:26:52 (UTC)
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
Member: emeriks
emeriks Nov 11, 2021 at 07:12:12 (UTC)
Goto Top
Zitat von @MadMax:
Danke!
Das werde ich trotzdem ausprobieren.