Все ленты — последние статьи

Как настроить удаленный доступ к MySQL

Во-первых, надо проверить что всё нормально с Firewall-ом.

в файле /etc/mysql/my.cnf, по умолчанию, разрешены подключение только к локальному хосту:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 127.0.0.1

прописываем адрес виртуальной машины под которой запущен MySQL:

bind-address            = 192.168.40.130

либо

 

bind-address            = 0.0.0.0

чтобы MySQL слушал на всех сетевых интерфейсах (eth0, lo, …), перезапускаем mysql:

# /etc/init.d/mysql restart

замэпливаем порты на виртуальной машине:

теперь, если мы коннектимся через telnet с удаленной машины, то получается вот такая штука:

$ telnet 192.168.1.2 3306
Trying 192.168.1.2…
Connected to 192.168.1.2.
Escape character is '^]'.
DHost '192.168.1.3' is not allowed to connect to this MySQL serverConnection closed by foreign host.

а если коннектимся через mysql, то получается вот что:

$ mysql -h 192.168.1.2 -u webadmin -p
Enter password:
ERROR 1130 (HY000): Host '192.168.1.3' is not allowed to connect to this MySQL server

создаём юзера через которого будем коннектится и даем ему права:

$ mysql -u root -p
CREATE USER 'newusername'@'%' IDENTIFIED BY '***';
GRANT SELECT ON `somedb` . * TO 'newusername'@'%';

можно также изменить существующего юзера:

$ mysql -u root -p mysql
mysql> update db set Host='202.54.10.20' where Db='webdb';
mysql> update user set Host='202.54.10.20' where user='webadmin';
 

 

  1. интересно, что у одного и того же MySQL юзера могут быть разные пароли, в зависимости от того, с какого хоста он коннектится, поэтому когда делаем GRANT нужно добавлять IDENTIFIED BY ‘***’, если делаем без него, то получается так:

    GRANT SELECT, INSERT, UPDATE ON test1.* TO test1@’%';
    SHOW GRANTS FOR ‘test1’@’%';
    +———————————————————-+
    | Grants for test1@% |
    +———————————————————-+
    | GRANT USAGE ON *.* TO ‘test1’@’%’ |
    | GRANT SELECT, INSERT, UPDATE ON `test1`.* TO ‘test1’@’%’ |
    +———————————————————-+
    2 rows in set (0.00 sec)

    тогда нужно ставить пароль для ‘%':

    SET PASSWORD FOR ‘test1’@’%’ = PASSWORD(‘12345zayats’);
    SHOW GRANTS FOR ‘test1’@’%';
    +——————————————————————————————————+
    | Grants for test1@% |
    +——————————————————————————————————+
    | GRANT USAGE ON *.* TO ‘test1’@’%’ IDENTIFIED BY PASSWORD ‘*90DEC1EAD774BD3B928A766605A42B928D77E443′ |
    | GRANT SELECT, INSERT, UPDATE ON `test1`.* TO ‘test1’@’%’ |
    +——————————————————————————————————+
    2 rows in set (0.00 sec)

    Комментарий by admin — 1 февраля 2013 @ 8:33


  2. дать привелегии на ALTER TABLE:

    GRANT ALTER ON test1.* to test1@’%';
    FLUSH PRIVILEGES;

    Комментарий by admin — 1 февраля 2013 @ 9:35


  3. вот вроде так выглядят парва для работы с таблицами:

    GRANT SELECT, INSERT, UPDATE, DELETE, ALTER ON `test1`.* TO ‘test1’@’%’

    Комментарий by admin — 11 февраля 2013 @ 12:42


  4. права на создание временных таблиц

    GRANT CREATE TEMPORARY TABLES ON test1.* to test1@’%';

    временные таблицы создаются так:

    CREATE TEMPORARY TABLE `product_order` (
    `id` INT(11) NOT NULL,
    `list` INT(11) NOT NULL
    );