Что конкретно делает GRANT USAGE SCHEMA?

Я впервые пытаюсь создать базу данных Postgres, так что это, вероятно, глупый вопрос. Я назначил базовые разрешения только для чтения роли db, которая должна обращаться к базе данных из моих сценариев 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ы на разные объекты раздельные.GRANTв базе данных неGRANT права на схему внутри. вывести так,GRANTна схеме неt предоставить права на столы в.

Если у вас есть права на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 затем установите его так, чтобы только ваш собственный пользователь мог получить доступ к каталогу или файлу (режимrwx------ на реж, режимrw------- на файл), тогда никто другой не может перечислить каталог, чтобы увидеть, что файл существует.

Если вы должны были предоставить права на чтение для файла (режимrw-r--r--) но не меняйте права доступа к каталогуне имеет значения. Никто не могувидеть файл для того, чтобы прочитать его, потому что они нене имеет права перечислять каталог.

Если вы вместо этого установитеrwx-r-xr-x в каталоге, установив его так, чтобы люди могли просматривать и просматривать каталог, но не изменяя права доступа к файлам, люди моглисписок файл, но не могчитать это потому что ониУ меня нет доступа к файлу.

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

То же самое в Pg. Вам нужны обе схемыUSAGE права и права объекта на выполнение действия над объектом, какSELECT со стола.

(Аналогия немного падает в том, что PostgreSQL не 'пока не обеспечена безопасность на уровне строк, поэтому пользователь все еще можетувидеть" что таблица существует в схемеSELECTизpg_class непосредственно. Они могут'не взаимодействовать с ним каким-либо образом, так что этопросто "список" часть, которая неТ точно так же.)

 Craig Ringer28 июн. 2013 г., 10:06
@ LucasMalor Ну, естьALTER DEFAULT PRIVILEGES...
 whitehat13 июл. 2017 г., 00:38
Отличное объяснение. Благодарю.
 Craig Ringer28 июн. 2013 г., 13:02
@ LucasMalor Э ... нет, они нет.GRANT на схему влияет на эту схему.GRANT ... ON ALL TABLES IN SCHEMA ... влияет на все таблицы в схеме в конкретной базе данных. НетGRANTкоторые влияют на все базы данных (хорошо, кромеGRANTчленство в роли пользователя).
 Marco Sulla28 июн. 2013 г., 12:58
Во всяком случае, теперь я понял, чтоGRANT операторы, не специфичные для таблиц, не то, что я хочу, так как они влияют на все базы данных ...
 Marco Sulla28 июн. 2013 г., 10:04
Теперь это'очень ясно с примером каталога :) Я должен сказать, что это проблема, если вы вставляете некоторую таблицу или строку с суперпользователем, например, когда вы добавляете postGIS, используяCREATE EXTENSION, Это'Более или менее та же проблема с файлами, созданными в Linux, пока выреsu, Будет хорошо, еслиэто своего родаsudo -e для заявлений в pqsl.
 Marco Sulla01 июл. 2013 г., 17:19
ALTER DEFAULT PRIVILEGIES не работает с таблицами и представлениями, созданными при установке Postgis, потому что "Вы можете изменить привилегии по умолчанию только для объектов, которые будут созданы вами самими или ролями, членами которых вы являетесь. "(postgresql.org/docs/9.1/static/sql-alterdefaultprivileges.html). Я должен назначить правильные привилегии для локальной и удаленной роли. Вот что я сделал:pastebin.com/gshaYdMd PS: спасибо за вашу драгоценную помощь! :)
 Marco Sulla28 июн. 2013 г., 13:55
Ах, извините, я выполнил заявления, когда я вошел какPostgres» суперпользователь, и они повлияли наPostgres» база данных. Я думал, что если вы запуститеpsql без-d db вы'вновь работает "вне" любой дб, но тывсегда подключен к БД и по умолчанию выподключен к БД с тем же именем вашей роли. DB = роль = пользователь = группа ... это 'немного сбивает с толку: D
 Craig Ringer28 июн. 2013 г., 14:46
@ LucasMalor Подумайте об этом так.По умолчанию вы подключаетесь к БД с тем же именем, что ироль входа ("пользователь») вы подключаетесь как. "Пользователи» это просто роли, которые имеютWITH LOGIN; по сути, все может быть группой, и группы могут быть настроены для входа в систему.

--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 ;
 bilelovitch10 мая 2016 г., 17:14
Доступ распределяется в соответствии с иерархической моделью:BD -> СХЕМА -> ТАБЛИЦЫ , СGRANT USAGE ON SCHEMA Администратор можетт создать таблицу, но он может сделать это сALL GRANT ALL ON SCHEMA ....
 Dan09 мая 2016 г., 14:52
не должныadmin также будет предоставленоCREATE на схеме?

Ваш ответ на вопрос