Подтвердить что ты не робот

Почему я не должен предоставлять сторонним пользователям доступ к моей базе данных?

Сегодня на многих сайтах есть API, которые позволяют пользователям получать данные с сайта как XML или JSON с помощью HTTP-запроса GET. Flickr и del.icio.us являются примером сайтов с API. Эти API требуют от сервера доступа к базе данных, а затем выводят результат как XML или JSON.

Зачем нам этот перевод? Почему бы просто не создать пользователя в базе данных (например, MySQL)? Пользователю будет предоставлен ограниченный доступ к базе данных, только разрешение SELECT и только определенные таблицы и определенные столбцы в этих таблицах. Разве это не было бы намного более эффективным для сервера (ему не пришлось бы обрабатывать HTTP-запрос), и разработчикам было бы проще, кто мог бы теперь получить доступ к тем данным, которые им нужны, как им это нужно.

4b9b3361

Ответ 1

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

Ответ 2

Можете ли вы запретить вредоносному человеку создавать суперкомплексный SQL-запрос, который привяжет процессор базы данных на 100%? Можете ли вы запретить многим невинным программистам создавать неэффективные запросы, которые никогда не будут оптимизированы, что будет делать то же самое?

Ответ 3

API:

  • Это упрощает контроль и контроль использования (реализация "ограниченных запросов на X" для пользователей БД может быть сложнее).
  • Позволяет представлять пользователю более простые структуры, чем может использоваться в БД.
  • означает, что пользователю не нужно понимать структуру вашего БД.
  • Позволяет переносить DB. (О, вы выросли, и теперь вам нужно реализовать: оштрафовать, перейти на большой стол и т.д. - с API, пользователю не нужно знать)
  • Позволяет использовать кэширование запросов (лучше?/переменная?).
  • означает, что вам не нужно платить за дополнительных пользователей БД (если это лицензируется БД.)

Ответ 4

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

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

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

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

Ответ 5

Переносимость тоже. Скажем, по причинам лицензирования и масштабированию вы делаете бизнес-решение переходить с MSSQL на MySql. Синтаксис не совсем то же самое, и ваши клиенты все должны изменить свой код.

Намного лучше просто откупорить все это и сохранить абстрагирование реализации. Чьи вы говорите, что вы не сохраняете состояние приложения, используя обученные обезьяны, царапающие метки на бутылках?

Ответ 6

Безопасность - причина номер 1, но я надеюсь, что эти причины очевидны. Другим веским основанием является пользователь, связывающий драгоценные ресурсы с плохими запросами.

Кроме того, хотя, почему слой абстракции?

  • Можете ли вы когда-нибудь добавить некоторые регистрации в запросы базы данных для диагностики скорости или для отладки?
  • Возможно, вы когда-либо переходите от MySQL к MS SQL или наоборот, где SQL, отличный от чистого ANSI, может сломаться?
  • Если клиент действительно должен узнать вашу схему, а не более логичную абстракцию?
  • Когда новый программист узнает о нормализации и теперь может видеть всю вашу схему, включая ваши тщательно сбалансированные денормализации, вы хотите смириться с любой неосведомленной критикой?
  • Когда более опытный db человек указывает на улучшения, хотите ли вы застрять в своей старой схеме?

Почему использовать API - это вопрос, почему использовать абстракции, и мой список здесь едва царапает поверхность.

Ответ 7

веб-сервер предоставляет вам буфер, который вы можете контролировать. если на вашем сервере sql есть какая-то ошибка, вы не хотите, чтобы он был открыт непосредственно в Интернете. true, если у веб-сервера есть ошибки, это может быть так же плохо... кроме того, что у вас есть дополнительный слой между данными и миром.

-don

Ответ 8

Это не столько "почему бы и нет", сколько "почему ты должен". Обработка HTTP-запросов - это небольшой штраф за полный контроль над тем, какие данные вы разрешаете или запрещаете пользователям получать доступ. Кроме того, если в будущем будет изменяться характер/количество/уровень безопасности данных, вам будет лучше с ответом JSON/XML, чем разрешить общий доступ.

Ответ 9

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

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

Ответ 10

API - это своего рода Wrapper вокруг базы данных. Пользователи ничего не знают о внутреннем представлении данных в базе данных, ему нужно только отправить несколько унифицированных запросов и получить на него единый ответ. Как и когда данные будут обрабатываться на сервере - это не его головная боль.