Что именно делает использование гранта на схеме?
Я пытаюсь создать в первый раз базу данных Postgres, так что это, вероятно, глупый вопрос. Я назначил основные разрешения только для чтения роли БД, которая должна получить доступ к базе данных из моих PHP-скриптов, и у меня есть любопытство: если я выполняю
GRANT some_or_all_privileges ON ALL TABLES IN SCHEMA schema TO role;
есть ли необходимость выполнить
GRANT USAGE ON SCHEMA schema TO role;
?
С документация:
использование: для схем, позволяет получить доступ к объектам, содержащимся в указанная схема (при условии, что собственные привилегии объектов требований). По существу, это позволяет грантополучателю "поиск" объектов внутри схемы.
Я думаю, что если я могу выбрать или манипулировать любыми данными, содержащимися в схеме, я могу получить доступ к любым объектам самой схемы. Я ошибаюсь? Если нет, то GRANT USAGE ON SCHEMA
используется для? И что именно означает документация с "предполагая, что собственные требования привилегий объектов также выполняются"?
2 ответа:
GRANT
s на разных объектах разделены.GRANT
ing в базе данных неGRANT
права на схему внутри. Аналогично,GRANT
ing на схеме не предоставляет права на таблицы внутри.если у вас есть права на
SELECT
из таблицы, но не право видеть его в схеме, которая содержит его, то вы не можете получить доступ к таблице.тесты прав выполняются по порядку:
Do you have `USAGE` on the schema? No: Reject access. Yes: Do you also have the appropriate rights on the table? No: Reject access. Yes: Check column privileges.
ваша путаница может возникнуть из-за того, что
public
схема имеет значение по умолчаниюGRANT
всех прав на рольpublic
, членом которого является каждый пользователь/группа. Таким образом, у всех уже есть использование этой схемы.фаза:
(при условии, что собственные требования привилегий объектов также выполняются)
говорит, что вы должны иметь
USAGE
на схеме использовать объекты внутри него, но имеющиеUSAGE
на схеме не является его самодостаточным, чтобы использовать объекты внутри схемы, вы также должны быть права на сами объекты.это как дерево каталогов. Если вы создадите каталог
somedir
"файл"somefile
затем установите его так, чтобы только ваш собственный пользователь мог получить доступ к каталогу или файлу (moderwx------
on the dir, moderw-------
в файле), то никто другой не может перечислить каталог, чтобы увидеть, что файл существует.если бы вы предоставили права на чтение мира в файле (mode
rw-r--r--
), но не измените разрешения для каталога это иметь никакого значения. Никто не мог посмотреть файл для того, чтобы прочитать его, потому что у них нет прав на список каталога.если вы вместо этого установите
rwx-r-xr-x
в каталоге, установив его так, чтобы люди могли перечислять и пересекать каталог, но не изменяя разрешения файлов, люди могли список файл, но не может читать это потому, что у них не было бы доступа к файлу.необходимо указать и разрешения для людей, чтобы иметь возможность просмотреть файл.
то же самое в Pg. Вам нужны обе схемы
USAGE
права и права объекта на выполнение действия над объектом, напримерSELECT
из таблицы.(аналогия немного падает в том, что PostgreSQL еще не имеет безопасности на уровне строк, поэтому пользователь все еще может "видеть", что таблица существует в схеме по
SELECT
ing отpg_class
напрямую. Они не могут взаимодействовать с ним в любом случае, так что это просто " список" что не совсем то же самое.)
для производственной системы можно использовать следующую конфигурацию:
--ACCESS DB REVOKE CONNECT ON DATABASE nova FROM PUBLIC; GRANT CONNECT ON DATABASE nova TO user; --ACCESS SCHEMA REVOKE ALL ON SCHEMA public FROM PUBLIC; GRANT USAGE ON SCHEMA public TO user; --ACCESS TABLES REVOKE ALL ON ALL TABLES IN SCHEMA public FROM PUBLIC ; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only ; GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO read_write ; GRANT ALL ON ALL TABLES IN SCHEMA public TO admin ;