Information ausblenden
Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm

select top 1 *

Dieses Thema im Forum "Microsoft SQL Server" wurde erstellt von derhenry, 1 Oktober 2015.

  1. derhenry

    derhenry Aktiver Benutzer

    Moin zusammen,

    ein Office-Adin muss beim Start überprüfen, ob der Anwender Zugriff auf eine bestimmte Datenbank-Tabelle hat. Dafür wird aktuell
    select top 1 * from
    abgesetzt. Da die Tabelle recht groß ist, dauert die Antwort recht lange, läuft manchmal in den 30-Sekunden-Timeout und bremst den Anwender aus. Leider wird offenbar trotzdem die ganze Tabelle abgefragt, auch wenn nur ein Wert zu Testzecken zurück kommen soll.

    Habt Ihr eine Idee, wie ich den Zugriff anders testen und mein Query ändern kann?
    Danke!
    derhenry
     
  2. Distrilec

    Distrilec Datenbank-Guru

    Soweit ich weiß kann jeder User in der View "sys.database_permissions" seine eigenen Zugriffsrechte sehen... Warum nicht einfach prüfen ob die Tabelle darin enthalten ist?
     
  3. ukulele

    ukulele Datenbank-Guru

    Passiert das auch, wenn du per WHERE die Datensätze z.B. auf einen PK einschränkst?

    Man könnte auch eine Sicht mit TOP 1 anlegen und diese dann Abfragen. Eventuell greifen die Berechtigungen dann entsprechend, es kommen aber nicht immer alle Daten.

    Wir hatten den Fall hier glaube ich auch schon, das scheint wirklich eine Office-Marotte zu sein.
     
  4. derhenry

    derhenry Aktiver Benutzer

    Das einschränken auf einen PK bringt es auch nicht. Wo finde ich denn die sys.database_permissions? Ist die Dynamisch für den jeweilst darauf zugreiden Nutzer?
     
  5. derhenry

    derhenry Aktiver Benutzer

    Hab jetzt mal in diese sys.database_permissions geschaut. Wüsste jetzt nicht, wie die mir weiterhelfen kann.
    Eine Anpassung des Querys zu "egal welcher Datensatz, gib mir nur irgendetwas und zwar schnell" geht nicht, was? ;)
     
  6. ukulele

    ukulele Datenbank-Guru

    Genau das macht SELECT TOP 1 * nur deine Office Anwendung setzt es offenbar falsch um. Jetzt gäbe es noch andere Möglichkeiten einzugrenzen (z.B. mit WHERE), das kann man aber auch nur durchprobieren. Welche Office Anwendung ist es denn überhaupt? Was genau tut das Addin?
     
  7. derhenry

    derhenry Aktiver Benutzer

    Mit dem Add-In (für Excel) hat das nichts zu tun, denn wenn ich das Query im SQL-Editor meiner Wahl (bspw. Toad) abfeuere, bekomme ich auch erst nach > 30 Sekunden ein Ergebnis.
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Hat die Tabelle einen PK? Frag doch einfach einen beliebigen Wert ab und schau, was passiert. Das sollte recht flott gehen.
     
  9. ukulele

    ukulele Datenbank-Guru

    Dann ist da aber irgendwas am DB Server kapott, was macht SQL Management Studio?
     
  10. derhenry

    derhenry Aktiver Benutzer

    Es handelt sich um einen View. Kein Primärschlüssel da. SQL Management Studio habe ich nicht.
    Schränke ich auf einen speziellen Wert ein, wird es auch nicht merklich schneller.
     
  11. akretschmer

    akretschmer Datenbank-Guru

    Ahhhh. Ein VIEW. Da wird natürlich erst mal das Select materialisiert. Vielleicht solltest Du schlicht die Basistabellen prüfen und nicht den View?
     
  12. Distrilec

    Distrilec Datenbank-Guru

    Oder einfach ein
    Code:
    Select Null From view Where 1 = 0
     
  13. derhenry

    derhenry Aktiver Benutzer

    Select Null From view Where 1 = 0
    Ist natürlich cool. Und sauschnell. ;)
    Wenn der Anwender da keine Rechte drauf hat, wird das ja wohl auch nicht funktionieren, was? Da ich ja Zugriff habe, kann ich das nicht gut testen. ;)
     
  14. Distrilec

    Distrilec Datenbank-Guru

    Logische Schlussfolgerung...
    Meine Annahme wäre: Das sollte mit Exceptions um sich werfen...

    Hab aber keine Ahnung ob ich richtig liege, nutze kein MS SQL Server :)
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden