Как изменить хост пользователя mysql

I have the following grants for a user/database mysql> SHOW GRANTS FOR 'username'@'localhost'; +---------------------------------------------------------------------------+ | Grants for username@

I have the following grants for a user/database

mysql> SHOW GRANTS FOR 'username'@'localhost';
+---------------------------------------------------------------------------+
| Grants for username@localhost                                             |
+---------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'username'@'localhost' IDENTIFIED BY PASSWORD 'xxx' |
| GRANT ALL PRIVILEGES ON `userdb`.* TO 'username'@'localhost'              |
+---------------------------------------------------------------------------+

To enable external access to the database, I need to change localhost to %. One way to do this is REVOKE all permissions and set it again. The problem is, that there is a password set which I don’t know, so if I revoke the permission, I can’t set it back.

Is there a way to change the hostname localhost to % (and back again) without revoking the permission itself?

asked Feb 28, 2013 at 9:20

f00860's user avatar

If you’ve got access to the mysql database, you can change the grant tables directly:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';

…and an analogous UPDATE-statement to change it back.

Also you might need to make changes to the mysql.db table as well:

UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';

and then flush to apply the privileges:

FLUSH PRIVILEGES;

Leahkim's user avatar

answered Feb 28, 2013 at 10:31

nickgrim's user avatar

nickgrimnickgrim

4,3761 gold badge17 silver badges27 bronze badges

6

Best answer on Stackoverflow suggesting to use RENAME USER which copy the user privileges.

Using Data Control Language (statements as GRANT, REVOKE, RENAME and so on) does not require FLUSH PRIVILEGES; and is required in architecture like Galera or Group Replication in MySQL versions having MyISAM tables in mysql database because MyISAM tables are not replicated.

answered Oct 4, 2017 at 14:16

Antonio Bardazzi's user avatar

I stumbled across this one, too, and the proposed solution didn’t work, since the database specific privileges wouldn’t be moved as well. what I did:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

answered Apr 19, 2016 at 15:46

Roman Haefeli's user avatar

1

To change privileges, first revoke all the permission to user

 revoke all privileges on *.* from 'username'@'localhost';

 grant SELECT,INSERT,UPDATE,DELETE ON `db`.* TO 'username'@'%';

 flush privileges;

answered Feb 28, 2013 at 9:59

Abhishek Anand Amralkar's user avatar

2

Missing a lot of the tables if you have privileges other than simply db (like tables or columns etc). Depending on what grants your user has, you may need to update all these tables or some:

UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.db SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.tables_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.columns_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.procs_priv SET Host='%' WHERE Host='localhost' AND User='username';
UPDATE mysql.proxies_priv SET Host='%' WHERE Host='localhost' AND User='username';
FLUSH PRIVILEGES;

answered Oct 13, 2016 at 16:43

mikew's user avatar

mikewmikew

1211 silver badge3 bronze badges

Редко, но бывают ситуации, когда требуется подключение к базе MySQL с любого хоста.
Для того чтобы это было возможно, нужно сначала изменить конфигурацию самого MySQL сервера.
Ее мы меняем в файле /etc/mysql/my.cnf
Там нужно найти строки bind-address и закомментировать их.
Должно получиться что-то похожее на:

#bind-address = 127.0.0.1
#bind-address = 192.168.0.201

Теперь нужно создать пользователя (или изменить существующего), где в записи пользователя в поле host будет % , что означает любой хост.

Список пользователей и прав доступа с хоста можно посмотреть сделав сделав выборку по таблице user в базе mysql.

Для этого подключаемся к базе от имени пользователя, который имеет привелегии на просмотр и редактирование данной таблицы (например пользователь root)

mysql -uroot -p

и выполняем следующие команды.

use mysql;
select host, user from user;

На выходе получаем список пользователей


+--------------+------------------+
| host | user |
+--------------+------------------+
| % | malinina |
| 127.0.0.1 | root |
| 192.168.0.96 | falc |
| ::1 | root |
| localhost | |
| localhost | debian-sys-maint |
| localhost | falc |
| localhost | malinina |
| localhost | phpmyadmin |
| localhost | root |
| web-server | |
| web-server | root |
+--------------+------------------+

Далее изменяем нужного пользователя (для примера взят пользователь falc с хостом 192.168.0.96):

update user set host=’%’ where user=’falc’ and host=’192.168.0.96’;
flush privileges;

Теперь пользователь falc может подключиться с любого IP.

Заказать создание и поддержку безопасной IT-инфраструктуры любой сложности

Быть уверенным в своей IT-инфраструктуре – это быть уверенным в завтрашнем дне.

Для того, чтобы сделать заказ:

Безопасные и надежные IT решения

0 / 0 / 0

Регистрация: 21.07.2013

Сообщений: 23

1

27.12.2013, 20:18. Показов 10885. Ответов 8


Здравствуйте . У хостера не стандартный хост для mysql (localhost) а какой то типа user.local.com . На винде я справлялся с этим просто создав такой домен в openserver и подключался к базе без проблем . Сейчас пробую на linux’е (Xubuntu) , но просто создание домена не помогло . Подскажите , что и как нужно настроить , уже пол вечера копаюсь в google но толи я с ним не умею разговаривать толи он со мной не хочет . Пробовал удалять строку bind-address = 127.0.0.1 в my.cnf , подставлял свою , но чет все не то .

__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь



0



407 / 361 / 141

Регистрация: 09.04.2011

Сообщений: 1,028

27.12.2013, 21:06

2

Хост это составная часть аккаунта в mysql, подробнее см тут



0



0 / 0 / 0

Регистрация: 21.07.2013

Сообщений: 23

27.12.2013, 21:22

 [ТС]

3

retvizan
Спасибо конечно что не прошли мимо . Но че делать то ?
Создать пользователя user в phpmyadmin , задать ему хост user.local.com , пароль , даю ему права на все .
Как мне теперь к нему подключиться ?



0



407 / 361 / 141

Регистрация: 09.04.2011

Сообщений: 1,028

27.12.2013, 21:34

4

Откуда и куда вы пытаетесь подключиться? С локальной на удаленную, с локальной на локальную, с удаленной на удаленную?



0



0 / 0 / 0

Регистрация: 21.07.2013

Сообщений: 23

27.12.2013, 21:36

 [ТС]

5

Вот . Вот и у меня не получается , как то нужно создать этот user.local.com . А вот как .

Добавлено через 1 минуту
Все на локалке . мне нужно просто подключиться к базе не через localhosl а через user.local.com



0



407 / 361 / 141

Регистрация: 09.04.2011

Сообщений: 1,028

27.12.2013, 21:45

6

Обращаться к базе по tcp/ip от имени ‘user’@’user.local.com’

Но зачем вам это на локальной машине?



0



0 / 0 / 0

Регистрация: 21.07.2013

Сообщений: 23

27.12.2013, 21:51

 [ТС]

7

Попробую описать на примере .
Ставлю wordpress на локалке , мне нужно сразу настроить все под хостера , чтобу потом снять с локалки и закинуть на хост не меняя настроек . Начинаю ставить скрипт , в скрипте нужно подключение к базе , мне нужно подставить настройки хостера .
пользователь — user
сервер mysql — user.local.com
пароль — password

В базе данных уже создал пользователя
user
user.local.com
password

Но откуда взяться этому хосту user.local.com . Его ведь нужно как то создать . А вот как и где , здесь я не как .



0



407 / 361 / 141

Регистрация: 09.04.2011

Сообщений: 1,028

27.12.2013, 22:02

8

Ага, понял. Для этого вам нужно настроить на локалке вебсервер через который и будут идти запросы к базе. Т.е. чтобы сама база считала, что находится не на локальной машине, а на user.local.com

С конкретным по помочь не смогу. Имхо, проще менять настройки при переносе на хостинг.



0



0 / 0 / 0

Регистрация: 21.07.2013

Сообщений: 23

28.12.2013, 10:34

 [ТС]

9

Я на винде , на openserver просто создавал домен user.local.com ( прсто пустой домен ) и все , все работало . Подозревал конечно что на лине это будет сложнее , но надеялся на google . А тут на те , засада .

Добавлено через 1 час 38 минут
Все . Подключился .
В базе mysql таблица host отвечает за это дело . Вместо Host нужный домен и все .

Добавлено через 10 минут
С пользователем вот только лоханулся , я же с локалки к нему тянусь , а зачем то ограничил его только с user.local.com )))

Добавлено через 10 часов 34 минуты
В файле hosts добавить 127.0.0.1 user.local.com , больше не чего не нужно .
Аж стыдно



0



Для доступа к MySQL из-вне должно быть выполнено 2 условия:

  1. MySQL должен слушать все адреса, а не только 127.0.0.1
  2. У пользователя должны быть пермишены для коннекта не только с localhost (с самого сервера где установлена БД), а и других адресов.

Слушать все адреса

Во-первых, изначально mysql слушает только localhost. Нужно исправить это в конфигурационном файле my.cnf (обычно в линуксах путь /etc/mysql/my.cnf). В my.cnf находим строку:

bind-address = 127.0.0.1

И заменяем её на:

bind-address = 0.0.0.0

Теперь после service mysql restart мы можем коннектиться к mysql с любого ip (если создан пользователь). При этом для супер-пользователя root доступ из-вне под пустым паролем остаётся закрыт.

bind-address 127.0.0.1 означает, что mysql слушает соединения только с текущего хоста.

Создание пользователя для коннекта к базе данных из-вне

Во-вторых, нужно создать пользователя, под которым мы будем подключаться из-вне к mysql. У пользователя должны быть пермишены для подключения не только по localhost, но и иных адресов.

CREATE USER 'username'@'%' IDENTIFIED BY 'password'; #создаём пользователя username с паролем password
GRANT ALL PRIVILEGES ON database.* TO 'username'@'%'; #даём пользователю username все права для работы с базой данных database
FLUSH PRIVILEGES; # применяем новые права (чтобы не делать restart)

В команде CREATE USER мы создали пользователя, который может коннектиться к mysql со всех ip. Мы можем разрешать коннектиться только с определённых ip, например:

#создаём пользователя user с паролем pass, который может подключаться только с ip '10.10.50.50
CREATE USER 'user'@'10.10.50.50' IDENTIFIED BY 'pass';

Если разрешаете внешние подключения к базе данных, то нужно давать сложные пароли пользователям mysql.

В случае проблем с внешними подключениями, проверить не блокирует ли брандмауэр или фаервол MySQL-порт 3306 или другой, если используете не стандартный порт.

Узнать порт mysql:

mysql> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0,05 sec)

После изменения bind-address в MySQL и создания пользователя с пермишенами (либо грант пермишенов текущим пользователям), к базе данных можно подключиться передавая параметр -h <host>. Хост — адрес машины, на которой установлен MySQL:

mysql -u -root -p -h <ip адрес>

Дата добавления:
7 лет назад

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить холостой ход на ваз 2107 инжектор
  • Как изменить холодильник своими руками
  • Как изменить хозяина ноутбука
  • Как изменить хозяина колонки
  • Как изменить хозяина аирподс

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии