Иногда я вижу вопросы, задающие вопрос, как безопасно хранить пароли пользователей для веб-приложения (используя СУБД, я не говорю о Facebook или Twitter). Обычный ответ - «посолить пароль, а затем хешировать его с помощью надежного алгоритма, такого как TDES или SHA512».
Мой вопрос: как пользователю СУБД, зачем мне вообще беспокоиться о хранении пароля, так как большинство движков имеют встроенный механизм аутентификации.
Например, если какой-то пользователь X хочет создать пароль пользователя учетной записи Y в моем веб-приложении, как неправильно выполнить следующий запрос:
CREATE USER X WITH ENCRYPTED PASSWORD Y IN GROUP baseuser;
Затем в моем приложении пользователь может открыть соединение с базой данных, используя свои учетные данные, и мне не нужно беспокоиться об управлении паролями.
Я вижу много преимуществ этого метода:
- Если СУБД решит, что алгоритм шифрования необходимо изменить, мне не нужно ничего трогать, только чтобы применить обновления безопасности;
- Мне легко управлять авторизацией пользователей. Если пользователь повышен до роли администратора, мне просто нужно добавить пользователя в соответствующую группу;
- Инъекции SQL теперь не имеют смысла, так как я управляю разрешениями, чтобы разрешить именно то, что я хочу разрешить каждому пользователю в базе данных (например, на форуме, таком как SO, добавляя новые сообщения, отвечая на сообщения, комментируя и редактируя / удаляя его собственные вопросы). / ответы / комментарии);
- Учетная запись пользователя «анонимный» может использоваться для неаутентифицированных подключений к моему приложению;
- Каждый пользователь является владельцем предоставленных им данных.
Но практически по каждому вопросу, который я вижу по этой теме, по-видимому, существует общее мнение о том, что это не так, как нужно делать. Мой вопрос: почему?
Примечание. Третий момент допускается политиками в PostgreSQL и политиками безопасности в Microsoft SQL Server. Я понимаю, что эти концепции являются новичками, но в любом случае, теперь, когда они здесь, почему описанная мною техника не становится стандартным способом обработки учетных записей пользователей?