Jump to content

aktuellen User bestimmen


Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Empfohlene Beiträge

Leider fiel mir keine beschreibendere Überschrift ein als diese. Ich mache eine SQL Server Verbindung über die Windows Authentifizierung mit PHP sqlsrv_connect. Das funktioniert auch (endlich) jedoch weiß ich gar nicht wer sich angemeldet hat. ich bekomme naturlich raus wer alles auf dem SQL Server angemeldet ist aber ich würde gern wissen wer der Domain User ist der sich gerade über sqlsrv_connect mit PHP angemeldet hat. Dabei geht es mir um den Namen im weiteren Verlauf den ich in einem Cookie anderen Skripten zur Verfügung stellen will.

 

Kann hier vielleicht jemand mir helfen?

 

danke schon mal

Link zu diesem Kommentar

Ich kann hier nur  allgemein antworten:

 

Bei PHP gehe ich mal von  einer Web-Anwendung aus.

Es ist ein ganz schlechtes Design, wenn ein User  sich über ein Web-Frontend direkt  auf  einen Datenbankserver  anmeldet.

Hier sollte nach Möglichkeit immer mit  technischen Usern gearbeitet werden, deren Konten nicht weiter bekannt sind.

Zum Session-Sharing zwischen anderen Anwendungen gibt es  genügend Lösungen. Man schreibt  die (User).Daten aber nicht ein Cookie.

 

Selbstverständlich ist das auch Abhängig von der konkreten Anwendung. 

Link zu diesem Kommentar

Einwand zur Kenntnis genommen! Aber die Anforderung ist genau jene das die Nutzer sich eben ohne zusätzliches Login bei der Anwendung anmelden sollen. Um den gegen zu wirken, habe ich versucht die Rechte so extrem wie möglich zu beschneiden, damit nur das nötigste gemacht werden kann! Es geht mir außerdem nur um den User Name aus Komfortgründen damit in diversen Formularen nicht immer der Name eingegeben werden muss.


anmelden tut sich der User nur über seine Windows Authentifizierung sprich er meldet sich in Windows an (an der Domain). Wenn er über ein Windowsauthentifizierungs Login am SQL Server hat kann er die Anwendung nutzen wenn nicht kommt eine Meldung und er kann ein Workflow starten um eine Anmeldung zu erhalten.

 

Diese Applikation läuft intern in einem Netzwerk mit Domain. Damit sollten doch auch Cookies gehen! Somal darin ja nur der Name des Users stehen soll.

bearbeitet von tutter
Link zu diesem Kommentar

Auch wenn die Anwendung sich per Browser-SSO anmeldet, sollt diese Anmeldung nicht  an den SQL-Server durchgereicht  werden.

Nur als Beispiel: SharePoint macht  das  auch nicht.

So etwas kann eine erhebliche Sicherheitslücke öffnen. Speziell wenn die Anwendung auch eine alternative  Anmeldemöglichkeit bietet.

Sie Anwendung selbst kenne ich nicht. Normalerweise kann man aber bei Web-Anwendungen via SSO den Usernamen aus den Servervariablen extrahieren.

Bei ASP (vbscript) wäre dies  Request.ServerVariables("AUTH_USER")

Link zu diesem Kommentar

Was für Formulare denn? Ich hoffe es sind keine Anmeldungen für anderen Applikationen.

 

PHP kennt auch den Authentifizierten User:

http://php.net/manual/de/reserved.variables.server.php

echo $_SERVER['PHP_AUTH_USER'];

 

EDIT:

Es spricht prinzipiell nichts dagegen sich an einer DB zu authentifizieren. Dabei kann man direkt an der Quelle Rechte vergeben und muss das nicht in einer Zwischenschicht (auf dem Applikationsserver) machen.

Mit SharePoint gibt es auch die Möglichkeit mit einem User auf externe Datenquellen (u.A. SQL Server) zuzugreifen. Dies wird mit Kerberos Delegation umgesetzt.

bearbeitet von Dukel
Link zu diesem Kommentar

 

Es spricht prinzipiell nichts dagegen sich an einer DB zu authentifizieren. Dabei kann man direkt an der Quelle Rechte vergeben und muss das nicht in einer Zwischenschicht (auf dem Applikationsserver) machen.

Mit SharePoint gibt es auch die Möglichkeit mit einem User auf externe Datenquellen (u.A. SQL Server) zuzugreifen. Dies wird mit Kerberos Delegation umgesetzt.

 

Das sehe ich ein wenig anders. Bei BCS meldet man sich optimaler weise mit einem im Secure Store hinterlegten Konto bei einer externen Datenquelle an.

Die Zugriffsrechte  auf diesen BCS kann man dann  im BCS konfigurieren.

Bei einem Webservice mag das  im Speziellen anders sein. Bei Datenbanken sollte man das aber eher vermeiden.

Direkt durchgereichte Datenbank-Anmeldungen  wurden schon oft zum Hacken von (DB)-Servern verwendet.

Link zu diesem Kommentar

Es gibt ja nicht nur BCS (wobei man das mit der Claims Authentifizierung dann so machen muss, da Kerberos Constraint Delegation nicht mehr geht).

 

Ich finde es erhöht die Sicherheit, wenn man das ganze in einem gescheiten Konzept umsetzt. Oft hat ein DB User, welcher viel zu viel Rechte besitzt (z.B. DB Owner) und wenn man (wie auch immer) an diesen User kommt kann man mehr machen als wenn man nur mit den User Daten an die DB kommt und dort ganz wenig Rechte besitzt.

Wenn man einen DB Server hacken kann ist es eh ein prinzipielles Problem. Ich denke nicht, dass das grundsätzlich mit durch gereichten Anmeldungen zu tun hat.

 

Aus dem PHP Umfeld kenne ich das auch, dass man einen DB User hat und dort ist es oft auch so, dass dessen Credentials unverschlüsselt im FileSystem liegen und dort ist es in jedem Fall sicherer wenn nirgends Credentials gespeichert werden.

Link zu diesem Kommentar

Sorry ich verstehe nicht ganz die Thematik mit dem Passwort. Nehmen wir an ich führe eine Datenbank in welcher die Logindaten hinterlegt sind und der User logt sich ein mit einer HTTP Authentifizierung. Auch hier kann das Passwort abgegriffen werden und der User hat eventuelle Rechte die den SQL Server gefährden. Klar der User kann sich nicht direkt am SQL Server sondern nur an der Datenbank/Tabelle anmelden (über ein Service-Konto) aber mit SQL injection oder php injection kann er dann doch genau den gleichen Schaden anstellen, als wenn er sich direkt am SQL Server anmeldet und dort innerhalb seiner Rechte Schaden anrichtet oder sehe ich hier was falsch? 

 

@Dukel habe deinen Tipp mal umgesetzt aber er bringt mir die Fehlermeldung : Undefined index: PHP_AUTH_USER . Wenn ich das richtig gelesen habe funktioniert doch echo $_SERVER['PHP_AUTH_USER']; nur unter HTTP Authentifizierung oder?

Link zu diesem Kommentar

deswegen ja die Thematik mit der User Identifikation. Problematisch wäre es aber bei der Anwendung auch nicht, da hierauf keinerlei wert gelegt wird (ja richtig gelesen! solche Anforderungen soll es geben :D  ) aber wie schon geschrieben es ist leider Pflicht das es eine Authentifizierung sein soll die ohne zusätzliche Passworteingabe stattfindet am besten eben AD. Naja und das tut es ja auch :wink2:

Link zu diesem Kommentar

puh das müsste ich mir erst mal ganz genau anschauen, vor allem infrastrukturtechnisch wäre das hier ein Großprojekt wahrscheinlich!

declare @1 nvarchar(50);
set @1 = cast((select [Function] = CONVERT(sql_variant, ORIGINAL_LOGIN())) as nvarchar(50));


select substring(@1,7,50) as Benutzername;

werde jetzt erstmal das nutzen je nach Domainnamenlänge muss der Substring angepasst werden aber ansonsten sollte es passen

bearbeitet von tutter
Link zu diesem Kommentar
Der letzte Beitrag zu diesem Thema ist mehr als 180 Tage alt. Bitte erstelle einen neuen Beitrag zu Deiner Anfrage!

Schreibe einen Kommentar

Du kannst jetzt antworten und Dich später registrieren. Falls Du bereits ein Mitglied bist, logge Dich jetzt ein.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor-Fenster leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

×
×
  • Neu erstellen...