Другие языки программирования и технологии

PHP+MySQL. Оптимальный вариант управление пользователями.

MySQL имеет встроенную возможность управления пользователями: CREATE USER, GRANT и прочие функции. Таким образом в каждом скрипте нужно будет просто коннектиться к базе под этим пользователем.
Альтернативно можно создать таблицу из пользователей и на каждом скрипте выполнять выборку "SELECT * FROM user WHERE user='$_SESSION[name]' AND pass='$_SESSION[pass]'".
Первый способ мне кажется логичнее, но также находятся сайты, которые используют второй способ.
В чём преимущества и недостатки? Или есть какой-то более рациональный способ? Если я надеюсь, что на сервере количество пользователей будет измеряться тысячами.
Первый способ годится только для управления пользователями СЕРВЕРА БАЗ ДАННЫХ. Для управления пользователями сайтов (и вообще приложений) его НИКТО не применяет. У приложения может быть сколько угодно пользователей, но само приложение при этом, как правило, имеет только одну учетную запись в таблице mysql.user. Логика очень простая -- у приложения может быть функционал, который не зависит прямо от базы данных. Соответственно, набор прав у приложения может быть иным, нежели набор прав у базы данных. Соответственно, информацию об этих правах надо хранить отдельно от прав доступа к базе данных.

Возьмите для примера WordPress -- там права на создание поста существуют отдельно от прав на его публикацию. А кроме них, есть еще права на редактирование чужих постов.. . То есть WordPress фактически устанавливает "права собственности" на отдельные записи в таблице wp_posts.

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

Ваш второй способ -- это гарантия того, что Вас взломают. Хранить пароль открытым текстом -- это плохая привычка. Хранить надо по крайней мере хэш, а еще лучше -- хэш с "солью"...
Максим Громов
Максим Громов
36 812
Лучший ответ
Антон Алисевич Насчёт хэширования - это понятно, просто хотел пример упростить. А вот насчёт соли не знал ничего. Почитал. Спасибо!
Только второй. Первый - это не способ, это чушь, и я не знаю сайтов, которые его используют. Потому что безопасность такого сайта будет нулевой, и даже лень объяснять, почему. На пальцах: если ключи от кабинетов хранятся в сейфе, то это еще не повод выдавать всем сотрудникам ключи от сейфа.
у второго способа есть существенный недостаток например:
сразу заметь User - это системная таблица MySQL, а у них другое предназначение.
Создатели MySQL решат сделать в таблице User новое поле и тогда у тебя перестанет работать скрипт обслуживающий регистрацию пользователей. Получиш критичискую ошибку и сответственно сбой работы всего сайта.

GRANT в этом плане безопаснее и он сразу обновляет "Грантовые" системные таблицы MySQL.
И ещё GRANT позволяет делать проверку Connet User по выданному реквизиту доступа с запретом чтения всех таблиц - вот тебе 100% защита сайта от не санкционированного доступа.
Максим Громов > User - это системная таблица MySQL

Ну уж... Системная таблица MySQL -- это mysql.user. Никто не запрещает мне иметь таблицу myApplication.user, совершенно не зависящую от системы...
Если пользователи это те которые будут регистрироваться на сайте то использовать второй способ. а про первый способ - я ничего не понял. что это такое ваще)
AG
Armen Ghazaryan
2 363
Антон Алисевич Это управление пользователями и доступом к базе данных. Подключение которых к базе происходит с помощью PHP функции mysql_connect($host,$user,$pass);