mysql- Как применить гранты к колонке? - PullRequest
0 голосов
/ 25 декабря 2010

имя пользователя - отмена выбора для базы данных. Персона

Я установил

GRANT SELECT (id) ON database.Person TO 'username'@'localhost'

не работает ->

SELECT secret FROM Person  // Good!

не работает ->

SELECT id FROM Person WHERE secret = 1  // BAD!

Мне нужно, чтобы SELECT id FROM Person WHERE secret = 1 работал!

Ответы [ 2 ]

4 голосов
/ 25 декабря 2010

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

CREATE TABLE Person
(
    Id      ...,
    Secret  ...,
    ...
);
REVOKE ALL ON Person FROM PUBLIC;
GRANT SELECT(id) ON Person TO SomeOne;

Итак, если моя интерпретация верна, когда SomeOne выбирает данные:

SELECT Id     FROM Person;    -- Works (as required)
SELECT Secret FROM Person;    -- Fails (as required)
SELECT Id
  FROM Person
 WHERE Secret = 1;            -- Fails (but we want it to work)

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

Глядя на запрос, который не выполняется, но "не должен" ... по его результатам, вы знаете, что каждый возвращенный Id имеет значение Secret, равное 1, поэтому для этих Idзначения, секрет больше не является секретом.

Если вы загляните в статистические базы данных, где вам разрешен поиск только по сводным данным, вы обнаружите, что есть уникальные трекеры, которые в основном позволяют вам идентифицировать характеристикиодного человека, даже если вам разрешено видеть только совокупные (SUM, COUNT, ...) значения в результирующих наборах.Это более сложный сценарий, чем вы сталкиваетесь (но увлекательный).CJ Date's (долго не печаталось) «Введение в системы баз данных, том II» обсуждает статистическую базу данных и уникальные трекеры.(Поиск Google по «уникальному трекеру статистической базы данных» показывает полезную информацию, которая является более доступной.)

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

Есть ли какие-либо обходные пути?

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

0 голосов
/ 25 декабря 2010

Это невозможно работать, так как вы не разрешили доступ к столбцу «Секрет». Либо вы хотите, чтобы программист мог читать Secret. В этом случае вы должны предоставить ему доступ к столбцу Секрет.

Если вы НЕ хотите разрешать доступ к столбцу Secret, вам также не следует разрешать выражение WHERE. Используя бинарный поиск, можно узнать фактическое значение Secret. Просто выполните SELECT и проверьте, возвращает ли он каждый раз что-либо, и повторите.

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