Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Datenbankzuordnung vom Benutzer auslesen

580 views
Skip to first unread message

markus...@java-concepts.com

unread,
Oct 10, 2008, 8:19:37 AM10/10/08
to
Hallo NG!

Ich habe eine Problem:

Ich brauche eine Möglichkeit alle Datenbankrollen eines Benutzers
auslesen zu können, also ob er db_owner, db_accessadmin usw. ist.

Für Serverrollen eines Benutzers war ich schon erfolgreich, dort gibt
es die syslogins-Sicht. In den jeweiligen Spalten der Sicht kann man
erkennen ob der Benutzer sysadmin, bulkadmin usw. ist.

Gibt es etwas vergleichbares für Datenbankrollen?

Für einen kleinen Tipp wär ich sehr danbar
Markus Gries

Olaf Helper

unread,
Oct 10, 2008, 1:11:45 PM10/10/08
to
Hallo Markus,

da hast Du 2 Möglichkeiten: Per SP oder über die SYS.Views selbst
selektieren; beides natürlich in der jeweiliger DB:

exec sp_helpuser 'DBUserName'

select *
from sys.sysusers AS USR
INNER JOIN sys.sysmembers AS MEM
ON USR.uid = MEM.memberuid
AND USR.issqlrole = 0
INNER JOIN sys.sysusers AS GRP
ON MEM.groupuid = GRP.uid
AND GRP.issqlrole = 1
where USR.name = 'DBUserName'

Olaf Helper.

<markus...@java-concepts.com> schrieb im Newsbeitrag
news:3f5abc5e-ddd7-41b9...@b1g2000hsg.googlegroups.com...

markus...@java-concepts.com

unread,
Oct 13, 2008, 1:32:12 AM10/13/08
to
Hallo Olaf!

Erstmal vielen Dank für deine Mühen, dein Beispiel hat mir schon sehr
geholfen!

Jetzt kann ich in jeder Datenbank die zugeordneten Benutzer mit
Rechten auslesen.
Geht das evtl. auch für Benutzer, also alle Datenbanken die einem
Benutzer zugeordnet sind?

MfG
Markus Gries

On 10 Okt., 19:11, "Olaf Helper" <olafhel...@web.de> wrote:
> Hallo Markus,
>
> da hast Du 2 Möglichkeiten: Per SP oder über die SYS.Views selbst
> selektieren; beides natürlich in der jeweiliger DB:
>
> exec sp_helpuser 'DBUserName'
>
> select *
> from sys.sysusers AS USR
>      INNER JOIN sys.sysmembers AS MEM
>          ON USR.uid = MEM.memberuid
>             AND USR.issqlrole = 0
>      INNER JOIN sys.sysusers AS GRP
>          ON MEM.groupuid = GRP.uid
>             AND GRP.issqlrole = 1
> where USR.name = 'DBUserName'
>
> Olaf Helper.
>

> <markus.gr...@java-concepts.com> schrieb im Newsbeitragnews:3f5abc5e-ddd7-41b9...@b1g2000hsg.googlegroups.com...

Christoph Muthmann

unread,
Oct 15, 2008, 2:32:00 AM10/15/08
to
markus...@java-concepts.com wrote:
> Hallo Olaf!
>
> Erstmal vielen Dank für deine Mühen, dein Beispiel hat mir schon sehr
> geholfen!
>
> Jetzt kann ich in jeder Datenbank die zugeordneten Benutzer mit
> Rechten auslesen.
> Geht das evtl. auch für Benutzer, also alle Datenbanken die einem
> Benutzer zugeordnet sind?

Hallo Markus,
hier
(http://www.insidesql.org/beitraege/administration/serverweite-berechtigungen-und-verwaiste-benutzer)
hatte ich mal etwas zu "Serverweite Berechtigungen und verwaiste Benutzer"
geschrieben. Ich bin mir sicher, dass Du mein Beispiel problemlos für Deine
Belange anpassen kannst.

Ich würde also auch hier alle Daten des Servers sammeln und anschliessend
auswerten.

Einen schönen Tag noch,
Christoph
--
Microsoft SQL Server MVP
http://www.insidesql.org


markus...@java-concepts.com

unread,
Oct 17, 2008, 3:45:27 PM10/17/08
to
Hallo Christoph!

Erstmal danke für deine Mühe!

Ich habe mir dein Script angeschaut, aber mir fällt es ziemlich schwer
es zu verstehen.
Was ich "nur" an Informationen bräuchte wären die Informationen in der
Spalte "role_name".
Also ob der Benutzer in der aktuellen Datenbank db_owner,
db_accessadmin usw. ist.

Am liebsten wäre es mir wenn ich es pro Benutzer auslesen könnte.
Ist so eine Abfrage auch auf SQL2000 möglich?

Danke für deine Hilfe
Markus Gries


On 15 Okt., 08:32, "Christoph Muthmann"
<c.muthm...@gmx.dasistzuviel.de> wrote:


> markus.gr...@java-concepts.com wrote:
> > Hallo Olaf!
>
> > Erstmal vielen Dank für deine Mühen, dein Beispiel hat mir schon sehr
> > geholfen!
>
> > Jetzt kann ich in jeder Datenbank die zugeordneten Benutzer mit
> > Rechten auslesen.
> > Geht das evtl. auch für Benutzer, also alle Datenbanken die einem
> > Benutzer zugeordnet sind?
>
> Hallo Markus,
> hier

> (http://www.insidesql.org/beitraege/administration/serverweite-berecht...)

Elmar Boye

unread,
Oct 18, 2008, 4:44:19 AM10/18/08
to

Hallo Markus,

<markus...@java-concepts.com> schrieb ...


> Was ich "nur" an Informationen bräuchte wären die Informationen in der
> Spalte "role_name".

Ein "nur" gibt es dabei nicht wirklich, denn Berechtigungen können additiv
sein,
durch die Mitgliedschaft in mehrere Rollen.
Und sich auch aufheben - dabei wäre der Vorrang von DENY zu beachten.

> Also ob der Benutzer in der aktuellen Datenbank db_owner, db_accessadmin
> usw. ist.

Die Mitgliedschaft in Rollen kannst Du mit IS_MEMBER prüfen:
<URL:http://technet.microsoft.com/de-de/library/ms186271.aspx>
(auch SQL Server 2000/2005)

> Am liebsten wäre es mir wenn ich es pro Benutzer auslesen könnte.

Ansonsten solltest Du in den meisten Fällen die Berechtigungen für das
konkrete Objekt (Tabelle, Sicht) prüfen, denn die vorgegebenen
Datenbankrollen sind nur sehr grob und für einfachste Szenarien geeignet.

> Ist so eine Abfrage auch auf SQL2000 möglich?

Dazu gibt es bei SQL Server 2000 die Funktion "PERMISSIONS"
<URL:http://msdn.microsoft.com/de-de/library/ms186915.aspx>

Ab SQL Server 2005 die leistungsfähigere und allgemeinere Funktion
"has_perms_by_name"
<URL:http://msdn.microsoft.com/de-de/library/ms189802.aspx>

Gruß Elmar

markus...@java-concepts.com

unread,
Oct 20, 2008, 5:11:22 AM10/20/08
to
On 18 Okt., 10:44, "Elmar Boye" <Elm...@gmx.net> wrote:
> Hallo Markus,
>
> <markus.gr...@java-concepts.com> schrieb ...

>
> > Was ich "nur" an Informationen bräuchte wären die Informationen in der
> > Spalte "role_name".
>
> Ein "nur" gibt es dabei nicht wirklich, denn Berechtigungen können additiv
> sein,
> durch die Mitgliedschaft in mehrere Rollen.
> Und sich auch aufheben - dabei wäre der Vorrang von DENY zu beachten.
>
> > Also ob der Benutzer in der aktuellen Datenbank db_owner, db_accessadmin
> > usw. ist.
>
> Die Mitgliedschaft in Rollen kannst Du mit IS_MEMBER prüfen:
> <URL:http://technet.microsoft.com/de-de/library/ms186271.aspx>
> (auch SQL Server 2000/2005)
>
> > Am liebsten wäre es mir wenn ich es pro Benutzer auslesen könnte.
>
Hallo Elmar!

Danke für deine Hilfe!

Ich hab mich vielleicht etwas falsch ausgedrückt mit "Berechtigungen".

Ich brauch eigentlich nur die Information welche Datenbank dem
Benutzer zugewiesen ist und welche Datenbankrolle er in dieser
einnimmt.

Siehe Bild:
http://img381.imageshack.us/img381/8229/userve0.jpg


Mit freundlichen Grüßen
Markus Gries

0 new messages