Po prostu przetestujmy.
Podłączanie jako administrator, a następnie:
SHOW VARIABLES LIKE "%version%";
+-------------------------+------------------------------+
| Variable_name | Value |
+-------------------------+------------------------------+
| version | 10.0.23-MariaDB-0+deb8u1-log |
a następnie
USE mysql;
Utwórz użytkownika foo
z hasłem bar
do testowania:
CREATE USER [email protected]'%' IDENTIFIED BY 'bar'; FLUSH PRIVILEGES;
Aby połączyć się z Unix domeny Gniazdo (to jest rura I/O, która jest nazwana przez wpis systemu plików /var/run/mysqld/mysqld.sock
czy coś takiego), uruchom to w wierszu poleceń:
mysql -pbar -ufoo
Aby połączyć się z TCP/IP końcowego 127.0.0.1:3306 zamiast uruchomić to w wierszu poleceń:
mysql -pbar -ufoo -h127.0.0.1
Aby sprawdź, czy połączenie odbywa się za pośrednictwem gniazda TCP/IP lub gniazda domeny uniksowej, pobierz identyfikator PID procesu klienta mysql, sprawdzając dane wyjściowe ps faux
, a następnie uruchom lsof -p$GOTPID
. będzie można zobaczyć coś takiego:
mysql [PID] quux 3u IPv4 [code] 0t0 TCP localhost:[port]->localhost:mysql (ESTABLISHED)
lub
mysql [PID] quux 3u unix [code] 0t0 [code] socket
sposób:
Case 0: Host = '10 .10.10.10' (null Test)
update user set host='10.10.10.10' where user='foo'; flush privileges;
- Podłącz do gniazda: AWARIA
- Połącz z 127.0.0.1: AWARIA
Przypadek 1: Host = '%'
update user set host='%' where user='foo'; flush privileges;
- Podłączyć do gniazda: OK
- Połącz 127.0.0.1: OK
Przypadek 2: Host = 'localhost'
update user set host='localhost' where user='foo';flush privileges;
- Podłączyć do gniazda: OK
- Połącz z 127.0.0.1: OK
Przypadek 3: Host = '127.0.0.1'
update user set host='127.0.0.1' where user='foo';flush privileges;
- Połącz z gniazdem: AWARIA
- Połącz z 127.0.0.1: OK
Przypadek 4: Host = ''
update user set host='' where user='foo';flush privileges;
- Podłączyć do gniazda: OK
- Połącz do 127.0.0.1: OK
(Według MySQL 5.7: 6.2.4 Access Control, Stage 1: Connection Verification, Pusty ciąg "" oznacza także "dowolny host", ale sortuje po "%".)
Przypadek 5: Host = '192.168.0.1' (dodatkowy test)
('192.168.0.1' jest jednym z adresów IP mojego komputera, należy zmienić odpowiednio w Twoim przypadku)
update user set host='192.168.0.1' where user='foo';flush privileges;
- Połącz z gniazdem: AWARIA
- Połącz z 127.0.0.1: AWARIA
ale
- Połącz na 192.168.0.1 z użyciem
mysql -pbar -ufoo -h192.168.0.1
: OK
krawędzi Przypadek A: Host = '0.0.0.0'
update user set host='0.0.0.0' where user='foo';flush privileges;
- Połącz z Socket: niewydolność
- Połącz z 127.0.0.1: AWARIA
Krawędź Przypadek B: Host = '255.255.255.255'
update user set host='255.255.255.255' where user='foo';flush privileges;
- Podłączyć do gniazda: AWARIA
- Połącz z 127.0.0.1: AWARIA
Cleanup
delete from user where user='foo';flush privileges;
Uzupełnienie
Aby zobaczyć, co jest w rzeczywistości w tabeli mysql.user
, który jest jednym ze stołów zezwolenia, zastosowanie:
SELECT SUBSTR(password,1,6) as password, user, host,
Super_priv AS su,
Grant_priv as gr,
CONCAT(Select_priv, Lock_tables_priv) AS selock,
CONCAT(Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) AS modif,
CONCAT(References_priv, Index_priv, Alter_priv) AS ria,
CONCAT(Create_tmp_table_priv, Create_view_priv, Show_view_priv) AS views,
CONCAT(Create_routine_priv, Alter_routine_priv, Execute_priv, Event_priv, Trigger_priv) AS funcs,
CONCAT(Repl_slave_priv, Repl_client_priv) AS replic,
CONCAT(Shutdown_priv, Process_priv, File_priv, Show_db_priv, Reload_priv, Create_user_priv) AS admin
FROM user ORDER BY user, host;
to daje:
+----------+----------+-----------+----+----+--------+-------+-----+-------+-------+--------+--------+
| password | user | host | su | gr | selock | modif | ria | views | funcs | replic | admin |
+----------+----------+-----------+----+----+--------+-------+-----+-------+-------+--------+--------+
| *E8D46 | foo | | N | N | NN | NNNNN | NNN | NNN | NNNNN | NN | NNNNNN |
Podobnie na stole mysql.db
:
SELECT host,db,user,
Grant_priv as gr,
CONCAT(Select_priv, Lock_tables_priv) AS selock,
CONCAT(Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv) AS modif,
CONCAT(References_priv, Index_priv, Alter_priv) AS ria,
CONCAT(Create_tmp_table_priv, Create_view_priv, Show_view_priv) AS views,
CONCAT(Create_routine_priv, Alter_routine_priv, Execute_priv) AS funcs
FROM db ORDER BY user, db, host;
W jakiej wersji? W MySQL 5.5.35 "%" pasuje również do localhost. – depquid
Nie tylko "localhost" łączy się za pośrednictwem lokalnego gniazda, 127.0.0.1 (które nie używa gniazda) nie dopasuje również%, ale także localhost. Widziałem to już dziś z instalacją haproxy. – Phillipp