Назад | Перейти на главную страницу

If I have user/host pair “root@<mymachinename>», Необходимо ли сохранять« root @ localhost »в таблице mysql host / users? (составной Q)</mymachinename>

На компьютере dexwin10 пара user @ host выглядит следующим образом:

root@dexwin10 

root@% 

root@localhost

Когда люди устанавливают наше программное обеспечение, мы хотим, чтобы они могли получить доступ к базе данных с компьютеров, отличных от их собственных. Это говорит мне, что localhost не следует указывать в качестве имени хоста, но я не уверен, какой из двух других использовать.

Вопросы:

1А.) root@dexwin10 такой же как root@localhost если имя моего компьютера dexwin10? Или делает root@dexwin10 означает, что я могу войти / получить доступ к базе данных только с машины dexwin10, что имеет смысл, поскольку вы можете входить в систему только на root @ localhost с локального хоста.

Б.) Если я должен использовать root@dexwin10 и нет root@localhost, это значит root@localhost можно удалить? Или мне нужен localhost для предотвращения проблем?

2.) Должен ли я указать имя хоста «%» во время установки нашего программного обеспечения, когда оно запрашивает у нас имя хоста, содержащего базу данных, которую мы хотим использовать, или мне следует ввести «dexwin10»? Какие могут быть побочные эффекты от ввода просто "%" в качестве имени хоста?

3. (необязательно), если root@(MachineName) и root@% одинаковы, почему установщик MySQL не делает хостом по умолчанию имя вашего компьютера, а не некоторую, казалось бы, случайную строку с именем "localhost"?

Я попытался выяснить, почему было 3 хоста для root (один с именем моего компьютера, один с% и один с localhost), и все ответы говорят о пользователях / хостах mysql по умолчанию. Это не пользователи по умолчанию.

"localhost" - особое имя. name@localhost подразумевает соединение "сокет". Это можно использовать только от клиента на тем же машина как сервер mysql.

Все остальное предполагает соединение TCP / IP, которое может быть к разные машина.

При проверке пользователя имя и происхождение пользователя используются для поиска строки в GRANT таблицы (mysql.user, и т.д). То есть, если вы входите через TCP / IP, нет localhost запись просматривается. И наоборот.

Адрес TCP / IP для «текущего компьютера»: 127.0.0.1. Так...

mysql -h localhost  -- uses a socket and checks `localhost` entries
mysql -h 127.0.0.1 -P 13306  -- uses TCP/IP on same machine
                        (and a non-standard Port)

Несколько «безопасный» набор GRANTs будет включать:

GRANT ... TO root@localhost ...;  -- you have to get into the machine to use it
_no_ GRANT ... TO root@hostname ...;  -- don't allow access from elsewhere
GRANT ... ON dbname.* TO user@hostname ...;  -- allow a user into one database from anywhere

С помощью % (или другие спецификации подстановочных знаков) для имени хоста подвергают сервер атакам со стороны произвольных серверов. Использование IP-адресов вместо имен хостов немного более безопасно.

Также обратите внимание:

CREATE USAGE ON *.* TO root@'%';

без всяких GRANTs эффективно позволяет "root" из любого места, но не дает ему никаких прав. Это своего рода знак "держись подальше".

Взгляни на

SELECT * FROM mysql.user;

и имейте в виду, что N означают "не разрешено". Наверное ты увидишь все Ns для пользователя = корневой хост =%. Для user = root host = localhost вы, вероятно, увидите все Y, включая Grant_priv, который исходит из WITH GRANT OPTION.

Пока я бреду, REVOKE полусырой. Вы можете "отозвать" только именно что было раньше GRANTed. Вы не можете дать много разрешений, а затем удалить подмножество.