Как обеспечить безопасность базы данных и ее данных?
Помогите с таким вопросом, стоит задача в написании корпоративного приложения, в качестве базы данных будет или MYSQL или MS SQL, на данном этапе выбор не завершен. Приложение будет взаимодействовать с базой данных через хранимые процедуры, пользователь базы данных доступ будет иметь только к ним. Для доступа к хранимым процедурам базы данных будет использоваться единственный пользователь, таково желание руководства и, к сожалению, обсуждению не подлежит.
Вопрос, как организовать по умному авторизацию пользователя? Если через хранимые процедуры при каждом запросе проверять некий хеш логина/пароля то как обезопасить себя от перебора хешей? (Мало ли кто заведется в сети)
посмотрите "Top 10 OWASP" - все придумано до нас. Что до перебора - то это замечательно лечится таймаутом при вводе и блокировкой на время при превышении порога неверных вводов.
Спасибо, сейчас посмотрю. А вот с блокировкой сложнее, для подключения к sql серверу будет использоваться одна учетка на всех (так хочет руководство, не обсуждается), а вот с помощью хранимых процедур надо уже разделять пользователей и их права. С этим проблем нет, а вот как с помощью этих же процедур обеспечить невозможность банального брутфорса если злоумышленник уже знает учетные данные для доступа к хранимкам... не представляю.
Макс: да, сразу не догадался, видимо этот вариант и приму, но теперь надо придумать как обезопасить пользователей от хулиганства, например Маша не дала Пете и он раз 20 неудачно залогинился под ее пользователем и заблокировал. Возможно блокировать пользователя на час а айпи пользователя из-за которого произошла блокировка на более длительное время.
Денис Борисов: не дала - это отвратительно. Пишите IP, дрючьте "в offline" по результатам разборок. Идея блокировать вход только с определенного IP неплохая, хотя на мой вкус переусложняет процесс - просто блокировать на 10 минут должно быть вполне достаточно.
Если я правильно понимаю, то коннект 1 а пользователей все таки с логинами и паролями много.
Как идея, создайте много логинов MSSQL а потом проверяйте их через
и PWDCOMPARE ( 'clear_text_password' , LOGINPROPERTY ( 'login_name' , PasswordHash ) )
А от перебора, можно в табличку писать сколько раз по одному логину неудачно стучались и проверять за какой промежуток времени.
Денис Борисов: ну использоваться для подключения только 1 будет. Остальные вообще бесправные можно сделать, если боятся, что под остальными учетками что то произойдет. А права уже по таблицам разложить...
Опа, а за табличку это идея, надо подумать, правда в таком случае желательно имя пользователя посложнее, типа GUID чтоб обезопасить от специальной блокировки. Надо сообразить как бы это с удобством пользователей скрестить....
Денис Борисов: ну как обычно, хэши паролей с логинами хранить в таблице. Кстати у MSSQL еще есть extended stored procedures https://technet.microsoft.com/ru-ru/library/ms1752... правда они пишут "В будущей версии Microsoft SQL Server эта возможность будет удалена." но если версия выбрана то можно попробовать. Там можно развернуться посерьезнее....