Использование % для хоста при создании пользователя MySQL



моя база данных MySQL нуждается в двух пользователях: appuser и support.

Один из разработчиков приложения настаивает на том, что я создаю четыре учетные записи для этих пользователей:



appuser@'%'
appuser@'localhost'
support@'%'
support@'localhost'
454   6  

6 ответов:

знак процента означает, что все ip-адреса so localhost являются излишними ... Нет необходимости во второй записи с localhost .

EDIT

на самом деле есть, "localhost" является Специальным в mysql, это означает соединение через сокет unix (или именованные каналы на windows, я считаю) в отличие от сокета TCP/IP. использование % в качестве хоста не включает 'localhost'

как указал @nos в комментариях к принятому в настоящее время ответу на этот вопрос, принятый ответ неверен.

Да, есть разница между использованием % и localhost для хоста учетной записи пользователя при подключении через сокет connect вместо стандартного TCP/IP connect.

хоста стоимостью % не входит localhost для сокетов и, следовательно, должны быть указаны, если вы хотите подключиться с помощью этого метода.

Если вы хотите подключиться к user@'%' от использования localhost mysql -h192.168.0.1 -uuser -p.

собираюсь дать немного другой ответ на те, которые предоставлены до сих пор.

Если у вас есть строка для анонимного пользователя из 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

    Ничего не найдено.