Benutzer mit den meisten Antworten
Abfrage, auf welche DBs der aktuelle User zugreifen darf

Frage
-
Hallo Zusammen,
Folgende Situation:
Ich habe ein ASP Web-Frontend und ca. 50 gleichartige (strukturgleiche) Datenbanken. Einige Benutzer dürfen auf mehrere dieser Datenbanken zugreifen, manche nur auf eine. Die Berechtigungen sind komplette über AD Gruppen zugewiesen.
Jetzt soll für die Benutzer, die auf unterschiedliche Datenbanken zugreifen dürfen, ein Kombifeld eingeblendet werden, welches die berechtigten Datenbanken (und nur die) auflistet um so einen Wechsel der Datengrundlage auswählen zu können.
Ist dies ohne eine Mapping Tabelle in einer zusätzlichen „Verwaltungs – DB“ möglich? Bzw. Kann ich auslesen, auf welche Datenbank eines Servers der aktuelle Benutzer über AD Gruppen berechtigt ist?
Grüße Volker
Antworten
-
Hallo Volker,
das wird einfacher mit HAS_DBACCESS() funktionieren, z. B. über die Abfrage:
SELECT name FROM sys.sysdatabases WHERE HAS_DBACCESS(name) = 1
Falls du es genauer brauchst, könnte auch IS_MEMBER() hilfreich sein.
Gruß Elmar
- Als Antwort markiert Volker Salzinger Dienstag, 3. Juli 2018 15:11
Alle Antworten
-
Hallo Zusammen,
Folgende Situation:
Ich habe ein ASP Web-Frontend und ca. 50 gleichartige (strukturgleiche) Datenbanken. Einige Benutzer dürfen auf mehrere dieser Datenbanken zugreifen, manche nur auf eine. Die Berechtigungen sind komplette über AD Gruppen zugewiesen.
Jetzt soll für die Benutzer, die auf unterschiedliche Datenbanken zugreifen dürfen, ein Kombifeld eingeblendet werden, welches die berechtigten Datenbanken (und nur die) auflistet um so einen Wechsel der Datengrundlage auswählen zu können.
Ist dies ohne eine Mapping Tabelle in einer zusätzlichen „Verwaltungs – DB“ möglich? Bzw. Kann ich auslesen, auf welche Datenbank eines Servers der aktuelle Benutzer über AD Gruppen berechtigt ist?
Grüße Volker
Es müssten somit nur die AD Gruppen angezeigt werden!?
Powershell:
Get-ADGroup -Filter * | Get-ADGroupMember | ? {$_.name -like "$env:username"} | Get-ADUser -Properties * | select -ExpandProperty Memberof | ? {$_ -match "Datenbankgruppenschnittmenge"}
Mit Schnittmenge ist eine Schnittmenge im Namen gemeint, zB "Gruppe" für Gruppe1, Gruppe2, Gruppe3...
Gibt das nen Anhaltspunkt?
Ansonsten können auch beliebige SQL Queries in der Art und Weise verknüpft werden.
- Bearbeitet BeatYa Dienstag, 3. Juli 2018 14:07
-
Hallo BeatYa,
vielen Dank für deine Antwort! Vor der AD Seite zu kommen funktioniert leider nicht, da viele User in hunderten von Gruppen haben und es vermutlich schwierig wird die richtig zu filtern!
Ich habe das jetzt mal wie folgt versucht - kann man (darf man) das so machen???
DECLARE @command NVARCHAR(MAX); EXEC sp_MSforeachdb @precommand = 'Create Table ##Results (db_name nvarchar(128))', @command1 = 'IF ''?'' NOT IN(''master'', ''model'', ''tempdb'', ''msdb'') BEGIN USE ? Insert into ##Results (db_name) Select TOP 1 DB_Name() from sys.sysusers End', @postcommand = 'SELECT * FROM ##Results; DROP TABLE ##Results';
Grüße Volker
-
Hallo Volker,
das wird einfacher mit HAS_DBACCESS() funktionieren, z. B. über die Abfrage:
SELECT name FROM sys.sysdatabases WHERE HAS_DBACCESS(name) = 1
Falls du es genauer brauchst, könnte auch IS_MEMBER() hilfreich sein.
Gruß Elmar
- Als Antwort markiert Volker Salzinger Dienstag, 3. Juli 2018 15:11