Не волнуйтесь.
Таблица mysql.user
смягчает определенные глобальные привилегии для всех баз данных.
Если пользователь ограничен определенной базой данных, вы увидите только специальные разрешения для базы данных в таблице mysql.db. Пользователь, ограниченный базой данных, не нуждается в SUPER, PROCESS, SHUTDOWN и подобных привилегиях.
Если вы создаете пользователя с глобальными привилегиями (таким образом, добавляя пользователя в mysql.user
), вы не можете отозвать глобальные привилегии только для того, чтобы понизить пользователя до конкретной базы данных. Если вы попытаетесь сделать это с помощью команд REVOKE, вы увидите пользователя в mysql.user
с исходными значениями Y во всех столбцах и того же пользователя в mysql.db
со значениями Y в привилегиях для конкретной базы данных.
Вы должны полностью удалить пользователя и создать пользователя заново с более низкими привилегиями.
Вот пример, основанный на комментариях
mysql> show grants for advdb@'%';
+-----------------------------------------------------------------------------+
| Grants for advdb@% |
+-----------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'advdb'@'%' IDENTIFIED BY PASSWORD '................' |
| GRANT ALL PRIVILEGES ON `advertpro`.* TO 'advdb'@'%' |
+-----------------------------------------------------------------------------+
GRANT USAGE просто позволяет вам узнать, какой пароль MD5 связан с аутентификацией (если пароль не пустой). Обратите внимание, что advdb может войти с любого IP-адреса и получить доступ только к базе данных advertpro.
Пользователю не нужны привилегии PROCESS , если вы не хотите, чтобы пользователь видел все процессы в списке процессов, даже те, которые принадлежат другим.
Пользователю не нужны привилегии SUPER , если вы не хотите, чтобы пользователь записывал в доступный только для чтения экземпляр mysql, запускал и останавливал репликацию, записывал двоичные журналы и тому подобное .
Пользователю не нужны привилегии SHUTDOWN , если только вы не хотите, чтобы пользователь отключил mysql от пользователя командной строки ОС клиентской программы mysqladmin.
Чтобы скопировать интересующую вас привилегию,
SHOW GRANTS FOR 'user'@'xxx.xxx.xxx.%';
- Скопировать вывод в текстовый файл
- Изменить хост на xxx.xxx.xxx.xx
- Добавить точку с запятой
- Вставьте это на другой сервер
Хорошо, давайте взломаем это:
UPDATE mysql.db
SET host='xxx.xxx.xxx.xxx'
WHERE user='myuser'
AND host='xxx.xxx.%'
AND db='somedb';
FLUSH PRIVILEGES;
Это должно быть !!!
Чтобы вывести MySQL Grants в SQL, вы можете сделать pt-show-grants
Гораздо лучше перенести гранты mysql, используя pt-show-grants .
Вот мое личное подражание тому, что делает pt-show-grants
mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql