Я хочу создать несколько пользователей mysql для разных веб-сайтов, но запретить им интерактивные соединения.
Если злоумышленник получает учетные данные mysql для входа на веб-сайт, создание соединения с терминала на сервер довольно просто, но загрузка PHP-скрипта на сервер - это другая проблема. Думаю, это ограничение не лишнее.
Короче говоря, как я могу запретить интерактивное соединение для определенного пользователя?
Обычно вы справляетесь с этим одним из двух способов или обоими, если хотите. Вы устанавливаете местоположение предоставления, чтобы разрешить пользователю подключаться только с IP-адреса, диапазона IP-адресов или имени хоста, с которого вы хотите, чтобы пользователь подключился к
Так например
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'127.0.0.0.1';
Чтобы предоставить выбор и вставку только с локального хоста. Или скажите, что ваши веб-серверы подключены к отдельному vlan
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'10.128.10.%';
Это позволит выбрать и вставить из 10.128.10.0/24
Вы также можете отключить порт mysql брандмауэром, чтобы разрешить mysql-соединения только с хостов, с которых вы хотите, чтобы соединения приходили.
Вы не можете. MySQL не может различать сеанс CLI и соединение из библиотеки или, по крайней мере, не имеет модели разрешений, чтобы действовать в соответствии с этой разницей.
Как правило, вы должны сделать разрешения как можно более конкретными. Соединение, которое должно быть разрешено с определенного веб-сервера, должно быть ограничено только этим сервером. Это значительно снижает поверхность атаки.
Также по возможности не устанавливайте mysql
Программа CLI на этом сервере, чтобы еще больше ограничить поверхность атаки.