Достаточно безопасный способ разрешить доступ к имени таблицы на стороне клиента - PullRequest
1 голос
/ 15 декабря 2009

Нам нужно подать заявку, в которой верно следующее:

  • Веб-страница использует AJAX для запроса данных с сервера.
  • Спецификация данных (например, имя таблицы), запрошенных с сервера, не будет известна до времени выполнения.
  • Конфигурация представления данных сама управляется данными и настраивается администратором.
  • Должны поддерживаться обновления данных и вставки, а не только просмотры.

Создание прототипа было очень простым - мы могли передать соответствующую информацию (имя таблицы, набор изменений и т. Д.) Универсальной службе данных, которая просто выполняла то, что ей было сказано (используя JSON в качестве механизма хранения данных). Служба данных может выполнить базовую проверку параметров, чтобы гарантировать, что текущий пользователь может выполнить запрошенную операцию (чтение данных, вставка строки, чтение строки).

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

  1. Пользователь запрашивает страницу просмотра.
  2. Сервер записывает имя таблицы и сохраняет ее на стороне сервера с идентификатором запроса
  3. Сервер записывает имена столбцов и сохраняет их, заменяя их на «col1, col2» и т. Д., И сохраняет сопоставление с данными идентификатора запроса.
  4. Страница клиента отправляет идентификатор запроса в службу, которая ищет хранилище сервера по идентификатору
  5. Служба возвращает col1, col2 и т. Д.

Это бы сработало, мы думаем, но кажется очень грязным.

Кто-нибудь имеет опыт решения подобных проблем и может предложить решение?

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

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

Опять же, требуется больше информации о том, что можно абстрагировать. Разрешение операций DDL конечными пользователями вызывает проблемы, как вы справедливо оценили, и я бы просто абстрагировал это, чтобы «DDL» стал DML.

Однако сопоставить фактический SQL, который написан с этими данными, было бы намного сложнее, если бы это требовалось.

1 голос
/ 15 декабря 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...