Использование % для хоста при создании пользователя MySQL
моя база данных MySQL нуждается в двух пользователях: appuser и support.
Один из разработчиков приложения настаивает на том, что я создаю четыре учетные записи для этих пользователей:
appuser@'%'
appuser@'localhost'
support@'%'
support@'localhost'
6 ответов:
знак процента означает, что все ip-адреса so localhost являются излишними ... Нет необходимости во второй записи с localhost .
EDIT
на самом деле есть, "localhost" является Специальным в mysql, это означает соединение через сокет unix (или именованные каналы на windows, я считаю) в отличие от сокета TCP/IP. использование % в качестве хоста не включает 'localhost'
как указал @nos в комментариях к принятому в настоящее время ответу на этот вопрос, принятый ответ неверен.
Да, есть разница между использованием
%иlocalhostдля хоста учетной записи пользователя при подключении через сокет connect вместо стандартного TCP/IP connect.хоста стоимостью
%не входитlocalhostдля сокетов и, следовательно, должны быть указаны, если вы хотите подключиться с помощью этого метода.
собираюсь дать немного другой ответ на те, которые предоставлены до сих пор.
Если у вас есть строка для анонимного пользователя из localhost в таблице пользователей
''@'localhost'тогда это будет рассматриваться как более конкретный, чем ваш пользователь с wildcard'D host'user'@'%'. Вот почему необходимо также обеспечить'user'@'localhost'.вы можете увидеть это объясняется более подробно в нижней части на этой странице.
символ процента означает: любой хост, включая удаленные и локальные соединения.
localhost разрешает только локальные соединения.
(Так что для начала, если вам не нужны удаленные подключения к базе данных, вы можете избавиться от пользователя appuser@'%' сразу)
Итак, да, они перекрываются, но...
...существует причина для установки обоих типов учетных записей, это объясняется в mysql доктора: http://dev.mysql.com/doc/refman/5.7/en/adding-users.html.
Если у вас есть анонимный пользователь на вашем локальном хосте, который вы можете определить с помощью:
select Host from mysql.user where User='' and Host='localhost';и если вы просто создаете пользователя appuser@ ' % '(а вы не appuser@ 'localhost'), то когда пользователь mysql appuser подключается с локального хоста,учетная запись анонимного пользователя используется (он имеет приоритет над вашим пользователем appuser@'%').
и исправление для этого (как можно догадаться) для создания appuser@'localhost' (что более конкретно, что локальный хост анонимный пользователь и будет использоваться, если ваш appuser подключается из localhost).
давайте просто проверим.
подключение в качестве суперпользователя, а затем:
SHOW VARIABLES LIKE "%version%"; +-------------------------+------------------------------+ | Variable_name | Value | +-------------------------+------------------------------+ | version | 10.0.23-MariaDB-0+deb8u1-log |а то
USE mysql;Setup
создать с паролем
barдля теста:CREATE USER foo@'%' IDENTIFIED BY 'bar'; FLUSH PRIVILEGES;Connect
для подключения к сокету домена Unix (т. е. канал ввода-вывода, который называется записью файловой системы
/var/run/mysqld/mysqld.sockили что-то подобное), запустите в командной строке (используйте чтобы убедиться вдвойне)mysql -pbar -ufoo mysql -pbar -ufoo --protocol=SOCKETожидается, что выше соответствует "пользователь приходит из localhost", но, конечно, не "пользователь приходит из 127.0.0.1".
чтобы подключиться к серверу из "127.0.0.1" вместо этого, запустите это в командной строке
mysql -pbar -ufoo --bind-address=127.0.0.1 --protocol=TCPесли вы покидаете
--protocol=TCPнаmysqlкоманда по-прежнему будет пытаться использовать сокет домена Unix. Вы также можете сказать:mysql -pbar -ufoo --bind-address=127.0.0.1 --host=127.0.0.1две попытки подключения в одном линия:
export MYSQL_PWD=bar; \ mysql -ufoo --protocol=SOCKET --execute="SELECT 1"; \ mysql -ufoo --bind-address=127.0.0.1 --host=127.0.0.1 --execute="SELECT 1"(пароль устанавливается в среде так, что он передается в
Comments