Seite 1 von 1

ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Mo, 13. Nov 2023 16:46
von Tom
Huhu.

In einer Topologie, die (u.a.) auf einem Terminal Server läuft, haben alle Nutzer, die sich auf den ADS verbinden, unter den meisten Installationsumständen den gleichen Nutzernamen. Wenn man mit sp_mgGetConnectedUsers() weitere Informationen hierzu abruft, bekommt man z.B. den tatsächlichen Benutzernamen, mit dem die Windows-Anmeldung erfolgt ist, außerdem die IP und noch ein paar Infos. Leider ist zumindest bei mir die "ConnNumber" immer und in allen Fällen 0 (Null), und das ist leider auch die einzige andere Möglichkeit, über sp_mgGetUserTables() herauszufinden, wer welche Tabellen geöffnet hält. Also: Ich habe "TERMINAL SERVER USER" dreimal als ADS-Benutzer, und alle drei haben Connection Number 0. Ich sehe zwar drei unterschiedliche Verbindungen, aber über sp_mgGetUserTables() mit "TERMINAL SERVER USER" bekomme ich immer dieselben Tabellen - nämlich die, die alle drei Benutzer geöffnet haben. Alternativ mit der Connection Number (0) ist es dasselbe.

Jemand eine Idee dazu?

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Mo, 13. Nov 2023 17:01
von Marcus Herz
Das Feld TSAddress ist eigentlich genau dafür da. Hab nur keinen Terminalserver um das zu verifizieren.

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 7:46
von Tom
Ja, TSAddress wechselt (es enthält Infos wie "IPC Connection <n>", wobei "n" tatsächlich eine iterierende Verbindungsnummer zu sein scheint), aber ich kann es nicht als Abrufparameter für sp_mgGetUserTables() verwenden. Das kennt, wenn ich das richtig sehe, nur UserName und ConnNumber, und die sind für alle TS-User in dieser Situation gleich.

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 9:31
von Marcus Herz
Das scheint nicht vorgesehen zu sein, über eine IP ADresse die geöffneten Tabelle abzufragen.
Ein Workaround könnte sein:
sp_mgGetAllTables => alle geöffneten Tabellen ermitteln, und dann je Tabelle

sp_mgGetTableUsers abfragen, hier kommt die TSAddress wieder ins Spiel

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 9:51
von Tom
Hallo, Marcus.

Ja, das ist der Weg. sp_mgGetTableUsers() liefert u.a. TSAddress und OSLoginUserName zu jeder Tabelle mit, und damit liegt die benötigte Information vor, wenn ich rückwärts gehe. Danke!
adsopentables.png
adsopentables.png (32.21 KiB) 2003 mal betrachtet

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 12:52
von Marcus Herz
ConnNumber (O)
NetWare connection number. (Deprecated)
um das abzuschliessen

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 13:56
von Tom
um das abzuschliessen
Danke für den Hinweis, flog gestern irgendwann auch an mir vorbei, aber in meiner gefühlten Erinnerung habe ich gelegentlich noch Connection Numbers > 0 gesehen, obwohl seit Jahrhunderten definitiv nirgendwo mehr NetWare im Einsatz ist. :wink:

Die aufeinander aufbauende Nutzung der Stored Procedures funktioniert einwandfrei, allerdings stieß ich dann ziemlich schnell auf ADS Error 7216, was mir vorher, bei der direkten Nutzung der API-Funktionen nie passiert ist. Abhilfe schaffte es, mit sp_SetStatementLimit(0) die Anzahl der Statements je Connection vom Limit auf 50 zu befreien.

Danke nochmals! :)

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 15:45
von Marcus Herz
Der Fehler 7216 macht mich stutzig. Ich kenn zwar deine Schleife nicht, aber bist du dir sicher, alle Handles wieder zu schliessen? Mehr als 50 aktive SQL Abfragen gleichzeitig je User?

Re: ADS: sp_mgGetUserTables() bei gleichen Benutzernamen

Verfasst: Di, 14. Nov 2023 15:53
von Tom
Du könntest recht haben, da stimmt möglicherweise was nicht. Danke für den Hinweis.

Edit: Stimmt, es fehlte das Schließen des Statements. Auch die Anzahl der genutzten Workareas ist vorher explodiert, jetzt ist alles fein.