Применение минимальных привилегий к соединениям с базой данных - PullRequest
3 голосов
/ 25 июля 2011

Я заметил, что большинство приложений FOSS (например, Wordpress) используют только один набор учетных данных базы данных, которым были предоставлены все разрешения. Кажется, что это нарушает принцип наименьших привилегий.

При написании такого приложения было бы лучше использовать несколько учетных записей, например учетную запись только для запросов SELECT, другую для ОБНОВЛЕНИЯ и т. Д.?

Ответы [ 3 ]

2 голосов
/ 26 июля 2011

Это определенно нарушение принципа наименьших привилегий. Давайте вернемся к определению :

В области информационной безопасности, информатики и других областях принцип минимальных привилегий, также известный как принцип минимальных привилегия или просто минимальная привилегия, требует, чтобы в конкретном уровень абстракции вычислительной среды, каждый модуль (такой как процесс, пользователь или программа на основе слоя мы учитывая) должен иметь возможность доступа только к такой информации и ресурсы, которые необходимы для его законного назначения.

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

Риск в среде SQL - это, прежде всего, внедрение SQL. Один маленький недостаток: если у этого публичного аккаунта есть права на нанесение ущерба, у вас возникнут всевозможные проблемы. Да, входные данные должны быть проверены, да, запросы должны быть параметризованы, но это еще один дополнительный уровень защиты, который дает вам дополнительную страховку.

Я говорю об этом конкретно в OWASP Top 10 для разработчиков .NET, часть 1: Инъекция .

1 голос
/ 25 июля 2011

Я бы предположил, что было бы хуже, если бы только проблемы с обслуживанием. Один пользователь означает, что учетные данные - это одно место, и они могут быть обновлены для каждого сервера ровно в одном месте. Кроме того, большинство фреймворков работают с допущением, что для всех них установлены одни учетные данные, и хотя не так уж и сложно учесть два +, это более раздражает.

Есть некоторое преимущество в том, что если у вас есть один пользователь с привилегиями только для выбора, вам не нужно беспокоиться об SQL-инъекциях так же сильно (конечно, не на уровне Бобби ), но даже это не гарантия, так что вам все равно придется дезинфицировать ваш ввод данных (они все равно могут делать инъекционные атаки, основанные на select ...).

0 голосов
/ 25 июля 2011

Рекомендуется предоставлять привилегии хранимым процедурам, а не на уровне таблиц.

...