Мой интернет-провайдер предлагает только одну учетную запись пользователя для доступа к базе данных MYSQL. Насколько я знаю, мне нужно сохранить учетные данные для подключения к моей базе данных в виде открытого текста в моем PHP-коде. Следовательно, обычные пользователи моего сайта имеют административный доступ к моей базе данных. Обычно они не могут злоупотреблять этим доступом, потому что официальные бэкдоры, которые я разработал, требуют пароля. [Способ использования пароля для аутентификации пользователя заключается в поиске хеша пароля в списке пользователей базы данных, а затем в проверке, помечен ли пользователь как администратор.] Но кто-то, кто может взломать файловую систему сервера, может прочитайте код PHP и узнайте пароль для единственного пользователя, которого предоставляет мой провайдер.
Помимо наличия двух пользователей с разными правами доступа к базе данных, есть ли способ раздвоить доступ, чтобы только суперпользователи могли выполнять CREATE, ALTER и DROP?






Да, имеет смысл предоставить ограниченный набор привилегий большинству пользователей и более разрушительные привилегии пользователям-администраторам.
Вы можете прочитать https://dev.mysql.com/doc/refman/8.0/en/privacy-provided.html, чтобы увидеть отдельные типы привилегий, которые вы можете предоставить пользователям, и каким операциям они соответствуют.
Однако на самом деле это не поможет, если ваше приложение всегда подключается с использованием одних и тех же учетных данных MySQL, а затем различает пользователя путем поиска данных в вашей базе данных. GRANT MySQL ничего не знает о ваших пользователях уровня приложения, он знает только о пользователе MySQL, и этот пользователь имеет один набор привилегий.
Таким образом, вы должны контролировать привилегии для каждого пользователя приложения в своем коде.
Если ваши пользователи получают незаконный доступ и обходят ваш код, то они имеют все привилегии, предоставленные пользователю MySQL. Ты никак не можешь это контролировать.
Это относится к общей категории «что, если у пользователей есть доступ к моей файловой системе?» Если это то, что вам нужно учитывать, то вы не можете позволить им иметь доступ к вашей файловой системе. Реализуйте свою услугу как программное обеспечение как услугу (SaaS).
Я, вероятно, должен был обновить свой вопрос. Я перешел к другому интернет-провайдеру и выбрал VPS, где я могу использовать GRANT в свое удовольствие. Другая часть моего решения заключается в шифровании учетных данных подключения к MySQL с помощью секретного слова, которое я могу ввести, когда мне нужен полный доступ. Пользователи подключаются с «секретом», который раскрывается в сценарии входа в систему HTML (следовательно, не совсем секретным), но они получают только возможность выполнить SELECT для таблицы, которая позволяет им войти в систему.