Я очень новичок в программировании и у меня есть теоретический вопрос, касающийся управления пользователями в базах данных. Я не совсем понимаю, как это можно задать, так что, если это повторный вопрос, пожалуйста, не стесняйтесь связываться.
tldr: Основная проблема заключается в том, что новому пользователю требуется соединение с базой данных, чтобы выполнить CREATE USER … но для того, чтобы установить это соединение, он должен быть CREATE-d уже в какой-то момент.
Полный вопрос:
Если у меня есть база данных, к которой я хочу предоставить доступ нескольким пользователям, я понимаю, что администратор может создавать «серверных» пользователей (через CREATE USER) с учетными данными, выбранными пользователем. Соединение с базой данных может быть открыто каждым пользователем через страницу входа в систему путем ввода его учетных данных, которые впоследствии передаются в качестве аргументов новому соединению.
Тем не менее, что, если я хочу устранить необходимость администратора создавать новые учетные записи пользователей? То есть я хочу, чтобы конечный пользователь перешел на страницу регистрации, где он выбирает учетные данные, нажимает регистр и может получить доступ к базе данных.
Насколько я понимаю, единственный способ сделать это — создать учетные записи «псевдопользователей». т.е. регистрация просто вставляет учетные данные нового пользователя в таблицу учетных данных. Впоследствии все пользователи «входят» через одно и то же соединение, но сначала должны очистить страницу входа, которая проверяет, совпадают ли их учетные данные с данными, хранящимися в таблице учетных данных. (Для этого по-прежнему нужен администратор, чтобы создать «реального» пользователя с соответствующими правами, иначе все будут подключаться через пользователя root).
редактировать: я хотел сказать, что это через php.
Это звучит правильно?
Спасибо, сообщество.
Вы смешиваете пользователей приложения с пользователями базы данных. Они редко, если вообще когда-либо, то же самое.
Вашему приложению нужна отдельная учетная запись для mysql, но вашему приложению необходимо отслеживать своих пользователей в базе данных — обычно в таблице, называемой что-то вроде app_users
, Таблица, которая может выглядеть так:
id username email passwd_hash salt
-- -------- ----- ----------- ----
01 fred [email protected] sdfasdf3r23 asdwer32
Пользователь веб-приложения никогда не будет иметь разрешения непосредственно на базу данных, но все запросы приложения будут выполняться через учетную запись приложения. Эти запросы должны быть либо подготовленными утверждениями, либо подготовленными утверждениями, выполняющими только хранимые процедуры. Учетная запись приложения не должна изменять схему. Учетные данные приложения, которые приложению необходимо будет подключить к базе данных, должны быть зашифрованы и сохранены вне корневого веб-каталога, но в папке, которую пользователь ОС запускает веб-сервер и имеет доступ для чтения.
У вас может быть несколько учетных записей для mysql для разных уровней разрешений, но они не совпадают с учетными записями пользователей, хранящимися в базе данных.
Вам не нужно для каждого пользователя, который посещает вашу страницу, учетная запись пользователя MYSQL.
Перейдите и настройте некоторые учетные записи пользователей MYSQL для groubs, например:
PUBLIC_USER для всех пользователей, которые не вошли в систему с меньшими правами.
PROTECTED_USER для зарегистрированного пользователя с более правым.
PRIVATE_USER для пользователей с максимальными правами, но меньшими правами, чем у вашей учетной записи ROOT.
Вы можете сделать больше групп, если это необходимо, но не создавайте учетную запись пользователя MYSQL для каждого посетителя вашей страницы.
Там действительно нет необходимости.
Это очень плохая практика — разрешать посетителю запускать скрипт, который создает пользователя в / для MYSQL.
А для дырявого пользователя / посетителя Account Management создайте для него таблицу, а не основные таблицы MYSQL.
например user_account с именем пользователя, паролем, ….