Если у меня есть пара пользователь / хост «root @ », нужно ли сохранять «root @ localhost» в таблица хоста / пользователей mysql? (составной Q)

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

root@dexwin10 

root@% 

root@localhost

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

Вопросы:

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

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

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

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

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

1
задан 24 August 2019 в 15:14
1 ответ

"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)

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

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@'%';

без каких-либо GRANT эффективно позволяет «root» из любого места, но не дает ему никаких разрешений. Это что-то вроде знака «Не допускать».

Взгляните на

SELECT * FROM mysql.user;

и имейте в виду, что N означает «запрещено». Вероятно, вы увидите все N для user = root host =%. Для user = root host = localhost вы, вероятно, увидите все Y, включая Grant_priv , который поступает из WITH GRANT OPTION .

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

0
ответ дан 4 December 2019 в 02:43

Теги

Похожие вопросы