emeriks
Goto Top

SQL-Abfrage mit unterschiedlichen Ergebnissen

Hi,
ich habe hier ein Problem mit einer SQL-Abfrage, bei welcher ich auf verschiedenen Wegen verschiedene Ergebnisse bekomme, und stehe deswegen jetzt auf dem Schlauch.

Gegeben ist ein MS SQL Server 2016 auf Windows Server 2016.
Die Abfrage erfolgt über ein dediziertes SQL-Konto, welches nur die notwendigen Rechte hat.
Abgefragt werden soll der verfügbare Festplattenplatz der SQL Instanz.

Dafür habe ich im Internet folgende Abfrage recherchiert:
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

Diese Abfrage funktioniert auch, wenn ich
  • im SQL Server Management Studio
  • mit o.g. dedizierten SQL Benutzer eine Verbindung zur Instanz herstelle
  • die o.g. Abfrage ausführe

Dann kommt als Ergebnis z.B.
volume_mount_point                    available_bytes
L:\                                   434136416256
L:\MSSQL11.xxxxx\MSSQL\DATA\yyyy\     86200115200


Führe ich jedoch
  • dieselbe Abfrage
  • in derselben Instanz
  • mit demselben Benutzerkonto
  • jedoch mit .Net (VB.Net) aus
bekomme ich einen DataReader ohne Datenzeilen. Also keine Daten.
Und ich bekomme keinen Fehler, von wegen Zugriff verweigert o.ä.

(Die genannten Variablen mDbServerInstance, mDatabaseName, mUserName, mPassword sind auf Klassen-Ebene definiert und haben auch die korrekten Werte.)
Dim µReturnValue As SqlDataReader = Nothing

Dim µConnectionString = String.Format(
      "Server={0};DataBase={1};uid={2};pwd={3}",  
      mDbServerInstance, mDatabaseName, mUserName, mPassword
    )

Dim µQueryString = "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"  

Dim µCon As New SqlConnection(µConnectionString)
µCon.Open()
Using µCmd As New SqlCommand(µQueryString, µCon)
  µReturnValue = µCmd.ExecuteReader(CommandBehavior.CloseConnection)
End Using

Und das verstehe ich nicht.
Muss ich unter .Net noch irgendwas aktivieren, damit diese Abfrage dort auch funktioniert?


E.

Content-Key: 1486427314

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

Printed on: April 18, 2024 at 00:04 o'clock

Member: emeriks
Solution emeriks Nov 09, 2021 updated at 11:57:06 (UTC)
Goto Top
Nein, vergesst es. Das scheint ein Bug des SQL Management Studios zu sein.
Das Studio hat mich ausgetrickst und noch mit den alten Berechtigungen gearbeitet.

Also
  1. Studio gestartet
  2. mit Instanz verbunden als Admin-User (sysadmin)
  3. Abfrage funktioniert
  4. Instanz getrennt
  5. mit Instanz verbunden als Nicht-Admin-User (dedizierter SQL-Benutzer)
  6. Abfrage funktioniert !
  7. Studio beendet
  8. Studio gestartet
  9. Instanz gleich als Nicht-Admin-User (dedizierter SQL-Benutzer) verbunden
  10. Abfrage funktioniert nicht !

Wie bescheuert ist das denn?

Ergo - Ich habe hier offensichtlich ein Berechtigungsproblem.

Siehe neue Frage: MS SQL - minimal nötige Berechtigungen für System-Abfragen