Hallo zusammen,
gibt es eine Möglichkeit, vom SQL Server (2008 R2) den Namen des aktuell via Windows Authentication verbundenen Users als UPN (Universal Principal Name) zu erhalten?
SUSER_NAME() liefert den Namen im Format DOMAIN\User... ich bräuchte aber user@domain.de
Besten Dank schonmal für Tipps
SYK
Ich befürchte, dass es keine Entsprechende Variante gibt.
Vermutlich willst du aber auch eher SUSER_SNAME() nutzen.
Du kannst allerdings per ADSI eine Verbindung zum AD herstellen und eine Emailadresse des Nutzers dort auslesen.
Der Vorteil der Klugheit liegt darin, dass man sich dumm stellen kann - umgekehrt ist das schon schwieriger (K. Tucholsky)
Das Problem mit Internet-Zitaten ist, dass sie oftmals zu unrecht als authentisch angenommen werden. (K. Adenauer)
Vermutlich willst du aber auch eher SUSER_SNAME() nutzen.
Klar, meine ich - sorry... aber hey, wenigstens konsequent sowohl in der Überschrift als auch im eigentlichen Content vertippt 😉
Kurz zum Verständnis, was ich eigentlich machen möchte... vielleicht denke ich ja auch von hinten durch die Brust ins Auge und jemand hat eine bessere Idee.
Ich habe eine Tabelle, bei der ich Berechtigungen auf Row-Level nutze, wie in folgendem MSDN-Artikel beschrieben:
http://msdn.microsoft.com/de-de/library/bb669076.aspx
Das klappt grundsätzlich auch wunderbar, allerdings habe ich einen kleinen Extrawunsch: zusätzlich zum aktuellen User, soll auch dessen Manager den Datensatz lesen können. Den aus dem Manager-Attribut des aktuellen Users im AD auszulesen, ist grundsätzlich auch kein Problem.
Aber: der Manager ist im AD-Attribut im Format CN=Toller Chef,CN=Users,DC=meinedomain,DC=de gespeichert. Ich brauche ihn aber im gleichen Format, wie ihn mir SUSER_SNAME zurückliefert, also etwa MEINEDOMAIN\tchef.
Dummerweise gibt es aber kein Attribut am AD-User, in welchem dieses Format gespeichert wäre. Den UPN gibt es allerdings (nämlich im gleichnamigen Attribut userPrincipalName). Daher auch meine Frage, ob man SUSER_SNAME irgendwie als UPN zurückliefern lassen kann. Aber vielleicht gibts ja noch einen anderen Lösungsansatz, den mir momentan das Brett vor meinem Kopf verdeckt 😉
@Mods: sorry, das Thema schwankt etwas zwischen Daten- und Netzwerktechnologien... momentan wahrscheinlich mit etwas Übergewicht in Richtung AD/Netz... falls Ihr das Thema eher im Netzwerkbereich seht und den Thread verschieben wollt: feel free 😁
MS sei Dank 😉
Mit WMI sollte ich zum Ziel kommen...
ManagementObjectSearcher mos = new ManagementObjectSearcher("select caption from Win32_UserAccount where Name = 'tchef");
foreach (ManagementObject mobject in mos.Get())
{
Console.WriteLine(mobject["caption"].ToString());
}
Console.ReadKey();
In caption steckt MEINEDOMAIN\tchef
Muss zwar noch ein paar Kleinigkeiten umbauen, aber damit sollte es gehen.