2013-05-16 12 views
5

to moje pierwsze pytanie tutaj i szczerze zrobiłem to po długim dochodzeniu bez odpowiedzi.MYSQL CREATE DEFINER

Stworzyłem aplikację internetową w intranecie, która działa na serwerze internetowym CentOS, aplikacja korzysta z innego serwera lokalnego (zawsze CentOS) dla bazy danych mysql.

Wewnątrz bazy danych stworzyłem procedury wich Evey początek tak:

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

192.168.0.5 IP to IP serwera, na którym jest zainstalowana aplikacja.

Do tego czasu wszystko jest w porządku, aplikacja działa. Kilka dni temu jako serwer, który uruchamia aplikację, jest stary, aby dodać kolejny serwer (mam na myśli serwer towarowy), myślałem o zrobieniu równowagi między nimi.

Teraz poprawnie skonfigurowałem oba serwery do uruchomienia aplikacji, problem polega na DEFINERZE SQL, które mają tylko jeden adres IP.

Moje serwery mają teraz 192.168.0.5 i 192.168.0.6.

Teoretycznie mój nowy DEFINER powinno być tak:

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

Ale nie wiem, jak postępować.


dzięki za odpowiedź.

Dla symboli wieloznacznych rozumiem, jak używać z procentem, jak powiedziałeś 192.168.% Lub jak sugeruje eggyal 192.168.0.% moje pytanie i obawy w tym przypadku, jeśli to zadziała? Ponieważ moja sieć jest rozprowadzany tak:

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 

Moje pytanie jest o IP od 192.168.0.1 do xxx.10 zastrzeżone, jeśli dodam wieloznaczny na SQL może być kolizja z adresem Znaczy z ewentualnego DEFINER próbować uwierzytelnić na przykład na telefonach VoIP, drukarce lub zaporze sieciowej, a nie tylko na dwóch serwerach?

także pytanie drugie, istnieje możliwość, aby podać więcej niż jeden adres IP, aby być bardziej uporządkowane jak:

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

góry dzięki

+0

'DEFINER' to po prostu użytkownik, który" posiada "procedurę; jeśli procedura jest zdefiniowana za pomocą 'SQL SECURITY DEFINER', to zostanie uruchomiona z uprawnieniami tego konta niezależnie od użytkownika, który go wywoła. Dane uwierzytelniające 'DEFINER' powinny odpowiadać ważnemu kontu użytkownika, którego części hosta wskazują maszyny, z którymi użytkownik może się połączyć. Dlatego nie ma szczególnej potrzeby zmiany "DEFINER" w tym przypadku; Jeśli jednak chcesz włączyć konto 'localuser02' do połączenia z dowolnego komputera, możesz zmienić swoje poświadczenia, aby użyć symbolu wieloznacznego:' @ '192.168.0.%' '. – eggyal

+0

Cześć Eggyal, dziękuję za odpowiedź. Z tego, co zrozumiałem, popraw mnie, jeśli się mylę, procedura zadziała, albo użytkownik korzysta z aplikacji z serwera 01 lub serwera 02, prawda? Chodzi mi o to, że na obu serwerach aplikacja wykonuje zapytania i wywołuje bazę danych, więc w tym przypadku, jeśli użyję tylko jednego adresu IP, jeden z pierwszego serwera 192.168.0.5 będzie działał na użytkowniku korzystającym z aplikacji na serwerze 02 (192.168.0.6) ? Mam na myśli użytkownika serwera 02 będzie uwierzytelniony na serwerze 01, jeśli w procedurze dodaję IP pierwszego serwera? Dzięki –

+0

Dla wildcard mam problem, ponieważ w mojej sieci mam 192.168.0.7 do 192.168.0.10, które są przechowywane przez inne komputery, niż 192.168.0.2 do 192.168.0.3, które są używane przez telefony VoIP i drukarkę, w teorii SQL wyszukać IP, które są używane przez inne komputery w mojej sieci i spowoduje błędy? Czy mogę dodać do CREATE DEFINER dwa oddzielone przecinkami IP? dzięki –

Odpowiedz

3

Klauzula DEFINER kontroluje konto używane w czasie wykonywania , chyba że podasz także SQL INWERTER zabezpieczeń. Ponieważ Twój kod jest aktualnie zapisywany, niezależnie od tego, który użytkownik wykona kod w czasie wykonywania, zostanie wykonany w kontekście zabezpieczeń określonym w DEFINER. Jeśli chcesz określić szerszy zakres adresów dla definiującego, użyj% sam w części hosta lub użyj czegoś takiego jak 192.168.%

+0

Dodaję symbol wieloznaczny, problem polega na tym, że gdy użytkownik jest połączony z serwerem01, wszystko działa dobrze, ale kiedy przełączy się na serwer02, aplikacja wysyła użytkownika na stronę logowania, tak jakby nie był zalogowany. Używam RoundRobin do równoważenia obu serwerów, ale wygląda na to, że użytkownik może zostać uwierzytelniony na jednym serwerze. Jak mogę osiągnąć, że użytkownik może pracować na obu serwerach niezależnie po zalogowaniu? Teraz w bazie danych mam 192.168.0.%. Dzięki –

+0

To brzmi bardziej jak problem z kodem aplikacji, niż problem z MySQL DEFINER, nie? Czy adres URL aplikacji zmienia się z jednego adresu IP na kolejny? – udog

+0

Marcos, Jak sobie radziłeś z tym problemem? – udog

Powiązane problemy