2016-10-30 2 views
0

Я взял класс MySQL пару лет назад, когда преподаватель создал для нас отдельных пользователей с разными разрешениями в качестве последней линии защиты от атак типа SQL-инъекций. Пользователи будет в основном быть созданы таким образом:MySQL отдельные пользователи для чтения, записи и администрирования

CREATE USER 'read'@'localhost' IDENTIFIED BY 'password'; 
GRANT SELECT ON * TO 'read'@'localhost'; 

CREATE USER 'write'@'localhost' IDENTIFIED BY 'password'; 
GRANT SELECT, INSERT, UPDATE, DELETE ON * TO 'write'@'localhost'; 

CREATE USER 'admin'@'localhost' IDENTIFIED BY 'password'; 
GRANT ALL ON * TO 'admin'@'localhost'; 

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

Есть ли лучшие практики для этого? Это что-то на самом деле? Препятствует ли она подготовленным и дезинформированным заявлениям?

+0

FYI: Обычный набор разрешений - «SELECT, INSERT, UPDATE, DELETE». – duskwuff

+0

Я забыл о DELETE. Я добавил его. – AkBKukU

ответ

1

Я не думаю, что это лучшая практика сама по себе. Конечно, правильные разрешения - это, безусловно, лучшая практика. И доступ к чтению только для чтения - это хорошо.

Простейшим методом предотвращения инъекций является использование параметризованных запросов. Это ваша первая линия обороны. Если все ваши запросы - select запросов, то соединение с пользователем с доступом только для чтения - это победа.

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

Существуют и другие преимущества использования хранимых процедур вместо insert/update/delete отчетов напрямую. Например: вы можете регистрировать операции, вы можете запускать дополнительную логику, вы можете одновременно изменять несколько таблиц, транзакции могут быть скрыты от приложения.

+0

Я видел параметризованные запросы как способ во многих местах. Я начал обматывать свои запросы в хранимых процедурах в проектах для домашних животных некоторое время назад только для переносимости. Но я не смотрел, как между ними разные разрешения и регулярные запросы. – AkBKukU

Смежные вопросы