2013-05-16 11 views
5

es ist meine erste Frage hier und ich habe es ehrlich nach langen Nachforschungen ohne Antworten gemacht.Mysql CREATE DEFINER

Ich habe eine Intranet-Webanwendung erstellt, die auf einem CentOS-Webserver ausgeführt wird. Die Anwendung verwendet einen anderen lokalen Server (immer CentOS) für die MySQL-Datenbank.

in der Datenbank habe ich erstellt Routinen wich evey Start wie folgt aus:

CREATE DEFINER='localuser02'@'192.168.0.5' PROCEDURE 'Createuser' 

Die IP 192.168.0.5 ist die IP-Adresse des Servers, auf dem Anwendung installiert ist.

Bis hier alles in Ordnung ist, funktioniert die Anwendung. Jetzt vor ein paar Tagen als der Server, der die Anwendung läuft eine alte, um einen anderen Server hinzufügen (ich meine Commodity-Server), was ich dachte, ist eine Verkehrsbilanz zwischen ihnen zu tun.

Jetzt habe ich richtig eingerichtet, beide Server, um die Anwendung zu starten, ist das Problem mit dem SQL-DEFINER, die nur eine IP haben.

Meine Server haben jetzt 192.168.0.5 und 192.168.0.6.

Theoretisch sollte meine neue DEFINER so aussehen:

CREATE DEFINER='localuser02'@'192.168.0.5, 192.168.0.6' PROCEDURE 'Createuser' 

Aber ich weiß nicht, wie es weitergeht.


danke für die Antwort.

Für Wildcard habe ich verstanden wie die Verwendung mit Prozent wie Sie sagten 192.168.% Oder wie von eggyal 192.168.0 vorgeschlagen.% meine Frage und Bedenken, dies zu tun, wenn es funktioniert? Da mein Netzwerk ist wie folgt verteilt:

192.168.0.1 - router 
192.168.0.2 - voip phone 
192.168.0.3 - voip phone 
192.168.0.4 - firewall 
192.168.0.5 - Server 01 
192.168.0.6 - Server 02 
192.168.0.7 - SQL Server 
192.168.0.8 - LAN Printer 
192.168.0.9 - First pc 
192.168.0.10 - Second pc 

Meine Frage IP von 192.168.0.1 ist mit bis xxx.10 reserviert, wenn ich hinzufügen Wildcard auf SQL eine Kollision mit Adresse sein könnte ich die DEFINER versuchen könnten bedeuten, zu authentifizieren zum Beispiel auf dem VoIP-Telefon oder einem Drucker oder der Firewall statt ausschließlich der beiden Server?

Auch zweite Frage, gibt es die Möglichkeit, mehr als eine IP-Liste mehr ordentlich wie zu sein:

CREATE DEFINER='localuser02'@'192.168.0.5, 192.168.0.6' PROCEDURE 'Createuser'

Vielen Dank im Voraus

+0

Der 'DEFINER' ist einfach der Benutzer, der das Verfahren" besitzt "; Wenn die Prozedur mit SQL SECURITY DEFINER definiert ist, wird sie mit den Rechten dieses Accounts ausgeführt, unabhängig vom Benutzer, der sie aufruft. Die DEFINER-Anmeldeinformationen sollten mit einem gültigen Benutzerkonto übereinstimmen, dessen Host-Teile die Maschinen angeben, von denen der Benutzer eine Verbindung herstellen kann. Daher ist es in diesem Fall nicht notwendig, den "DEFINER" zu ändern; Wenn Sie jedoch das Konto "localuser02" für die Verbindung von einem der beiden Computer aktivieren möchten, können Sie ihre Anmeldeinformationen ändern, um einen Platzhalter zu verwenden: '@ '192.168.0.%''. – eggyal

+0

Hallo Eggyal, danke für deine Antwort. Von dem, was ich richtig verstanden habe, korrigieren Sie mich, wenn ich falsch liege, wird die Prozedur funktionieren, entweder ein Benutzer verwendet die Anwendung von Server 01 oder Server 02 richtig? Ich meine auf beiden Servern die Anwendung führt Abfragen und ruft Datenbank auf, so in diesem Fall, wenn ich nur eine IP-Adresse des ersten Servers 192.168.0.5 der Benutzer verwenden, der die Anwendung auf Server 02 (192.168.0.6) verwendet wird ? Ich meine Benutzer von Server 02 wird über Server 01 authentifiziert, wenn in der Prozedur ich IP des ersten Servers hinzufügen? Danke –

+0

Für Wildcard habe ich ein Problem, weil in meinem Netzwerk habe ich 192.168.0.7 bis 192.168.0.10, die von anderen PCs gehalten werden, als 192.168.0.2 bis 192.168.0.3, die von VoIP-Telefonen und Drucker verwendet werden, in der SQL wird Nach IPs suchen, die von anderen PCs in meinem Netzwerk verwendet werden und Fehler verursachen? Kann ich zu CREATE DEFINER zwei IP-Kommas hinzufügen? danke –

Antwort

3

Die DEFINER Klausel des zur Ausführungszeit verwendete Konto steuert , außer Sie geben auch SQL SECURITY INVOKER an. Da Ihr Code derzeit geschrieben wird, wird unabhängig davon, welcher Benutzer den Code zur Laufzeit ausführt, er unter dem im DEFINER angegebenen Sicherheitskontext ausgeführt. Wenn Sie für den Definierer einen breiteren Adressbereich angeben müssen, verwenden Sie im Host-Abschnitt% selbst oder verwenden Sie etwas wie 192.168.%

+0

Ich füge den Platzhalter hinzu, das Problem ist jetzt, dass, wenn Benutzer mit Server01 verbunden ist, alles gut funktioniert, aber wenn er zu Server02 wechselt, schickt die Anwendung den Benutzer zur Anmeldungsseite, als ob er nicht geloggt wurde. Ich verwende RoundRobin, um beide Server auszubalancieren, aber es scheint, als ob der Benutzer einmal auf einem Server authentifiziert werden kann. Wie kann ich erreichen, dass Benutzer nach der Anmeldung an beiden Servern unabhängig arbeiten können? Jetzt in der Datenbank habe ich 192.168.0.%. Danke –

+0

Das klingt eher nach einem Anwendungscode-Problem als nach einem MySQL-DEFINER-Problem, nein? Ändert sich die Anwendungs-URL von einer IP zur nächsten? – udog

+0

Marcos, Wie hast du mit diesem Problem rummachen? – udog

Verwandte Themen