использование представлений для защиты фактических таблиц в SQL - PullRequest
0 голосов
/ 10 марта 2011

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

, если он не использует: insert into **vw** values(), но использует: insert into **table_name** values(), то как защищена таблица?сейчас?

Ответы [ 2 ]

4 голосов
/ 10 марта 2011

Нематериализованные представления - это просто предварительно упакованные SQL-запросы. Они выполняются так же, как и любые производные таблицы / встроенные представления. Несколько ссылок на одно и то же представление запускают запрос, который представление содержит для каждой ссылки. IE:

CREATE VIEW vw_example AS
  SELECT id, column, date_column FROM ITEMS

SELECT x.*, y.*
  FROM vw_example x
  JOIN vw_example y ON y.id = x.id

... переводится в бытие:

SELECT x.*, y.*
  FROM (SELECT id, column, date_column FROM ITEMS) x
  JOIN (SELECT id, column, date_column FROM ITEMS) y ON y.id = x.id

Кэширование

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

Predicate Pushing

Другим потенциальным преимуществом является то, что представления часто допускают «предикатное нажатие», когда критерии, указанные в представлении, могут быть вставлены в запрос, который представление оптимизатором представляет. Это означает, что запрос может сканировать таблицу один раз, а не сканировать таблицу, чтобы представить набор результатов для внешнего / окончательного запроса.

SELECT x.*
  FROM vw_example x
 WHERE x.column = 'y'

... может быть интерпретирован оптимизатором как:

SELECT id, column, date_column 
  FROM ITEMS
 WHERE x.column = 'y'

Решение об использовании предикатов принимается исключительно оптимизатором. Мне неизвестно о какой-либо способности разработчика принимать решение, только то, что оно действительно зависит от запроса, который использует представление, и от того, какие дополнительные критерии применяются.

Комментарий к типичному использованию нематериализованных представлений

К сожалению, очень часто можно увидеть нематериализованное представление SQL, используемое только для инкапсуляции для упрощения написания запросов - упрощение, которое также не рекомендуется. SQL основан на SET и не очень хорошо оптимизируется при использовании процедурных подходов. Размещение слоев друг над другом также не рекомендуется.

Обновление просмотров

Нематериализованные представления также можно обновлять, но существуют ограничения, поскольку представление может быть сделано из множества таблиц, соединенных вместе. Обновляемое нематериализованное представление не дает пользователю возможности вставлять новые записи, но может обновлять существующие. * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) CHECK OPTION зависит от запроса, используемого для создания представления для принудительного ограничения степени обновления, но этого недостаточно, чтобы гарантировать, что ничего не произойдет . Это демонстрирует, что единственным надежным средством защиты от нежелательного добавления / редактирования / удаления является предоставление надлежащих привилегий пользователю , предпочтительно с помощью роли.

2 голосов
/ 10 марта 2011

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

...