2013-05-16 2 views
5

Это мой первый вопрос здесь, и я честно сделал это после долгого расследования без ответов.Mysql CREATE DEFINER

Я создал веб-приложение интрасети, которое выполняется на веб-сервере CentOS, приложение использует другой локальный сервер (всегда CentOS) для базы данных mysql.

Внутри базы данных я создал процедуры Wich Evey начала так:

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

IP-192.168.0.5 является IP сервера, на котором установлено приложение.

До сих пор все нормально, приложение работает. Теперь несколько дней назад, когда сервер, запускающий приложение, является старым, чтобы добавить другой сервер (я имею в виду товарный сервер), то, о чем я думал, - это сделать баланс трафика между ними.

Теперь я правильно настроил обе серверы для запуска приложения, проблема связана с SQL DEFINER, который имеет только один IP-адрес.

У моих серверов теперь есть 192.168.0.5 и 192.168.0.6.

Теоретически мой новый DEFINER должен быть таким:

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

Но я не знаю, как поступить.


благодарит за ответ.

Для подстановочных знаков я понимаю, как использовать с процентами, как вы сказали 192.168.% Или как предлагалось eggyal 192.168.0.% мой вопрос и проблемы при этом, если он будет работать? Так как моя сеть распределяется следующим образом:

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 

Мой вопрос, имеющий IP от 192.168.0.1 до xxx.10 зарезервирован, если добавить подстановочные на SQL может быть столкновение с адресом я имею в виду мог DEFINER попытаться проверить подлинность например, на VoIP-телефоне или принтере или брандмауэре вместо двух серверов?

Также второй вопрос, есть возможность указать несколько IP, чтобы быть более аккуратным, как:

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

Заранее спасибо

+0

«ОПРЕДЕЛЕНИЕ» - это просто пользователь, который «владеет» процедурой; если процедура определена с помощью 'SQL SECURITY DEFINER', то она будет запускаться с привилегиями этой учетной записи независимо от пользователя, который ее вызывает. Учетные данные 'DEFINER' должны совпадать с действительной учетной записью пользователя, часть узла которой указывает машину (ы), с которой пользователь может подключиться. Поэтому нет особой необходимости менять «ОПРЕДЕЛЕНИЕ» в этом случае; однако, если вы хотите включить учетную запись 'localuser02' для подключения с любого компьютера, вы можете изменить свои учетные данные для использования подстановочного знака:' @ '192.168.0.%' '. – eggyal

+0

Привет, Эггьял, спасибо за ваш ответ. Из того, что я понял, исправьте меня, если я ошибаюсь, процедура будет работать либо пользователем, либо с помощью приложения с сервера 01 или сервера 02? Я имею в виду, что на обоих серверах приложение выполняет запросы и вызовы в базе данных, поэтому в этом случае, если я использую только один IP-адрес, один из первого сервера 192.168.0.5 будет работать пользователь, который использует приложение на сервере 02 (192.168.0.6) ? Я имею в виду, что пользователь сервера 02 будет аутентифицирован по серверу 01, если в процедуре я добавляю IP-адрес первого сервера? Спасибо –

+0

Для подстановочных знаков у меня проблема, потому что в моей сети у меня есть 192.168.0.7 до 192.168.0.10, которые хранятся на других ПК, чем 192.168.0.2 до 192.168.0.3, которые используются телефонами и принтерами voip, в том случае, если SQL будет поиск IP-адресов, которые используются другими компьютерами в моей сети, и вызовет ошибки? Могу ли я добавить в CREATE DEFINER две разделенные запятой IP? спасибо –

ответ

3

Предложение DEFINER контролирует учетную запись, используемую во время выполнения , если вы также не укажете SQL SECURITY INVOKER. Поскольку ваш код в настоящее время написан, независимо от того, какой пользователь выполняет код во время выполнения, он будет выполнен в контексте безопасности, указанном в DEFINER. Если вам нужно указать более широкий диапазон адресов для определителя, используйте% самостоятельно в части хоста или используйте что-то вроде 192.168.%

+0

Я добавляю подстановочный знак, проблема в том, что когда пользователь подключен к Server01, все работает нормально, но когда он переключается на Server02, приложение отправляет пользователя на страницу входа, например, если он не был зарегистрирован. Я использую RoundRobin для балансировки обоих серверов, но кажется, что пользователь может быть аутентифицирован на одном сервере один раз. Как я могу добиться того, что пользователь может работать на обоих серверах отдельно после входа? Теперь в базе данных у меня 192.168.0.%. Спасибо –

+0

Это больше похоже на проблему с кодом приложения, а не на проблему MySQL DEFINER, нет? Изменен ли URL приложения с одного IP на другой? – udog

+0

Маркос, как вы разобрались с этой проблемой? – udog

Смежные вопросы