GRANT
s на различни обекти са отделни. GRANT
въвеждането в база данни не GRANT
права върху схемата вътре. По същия начин, GRANT
въвеждането на схема не предоставя права върху таблиците в нея.
Ако имате права за 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
в директорията, като я настроите така, че хората да могат да изброяват и преминават през директорията, но без да променят разрешенията за файлове, хората могат да изброяват файла, но не можа да прочете защото няма да имат достъп до файла.
Трябва да зададете и двете разрешения за хората действително да могат да преглеждат файла.
Същото нещо в стр. Трябват ви и двете схеми USAGE
права и права за обект за извършване на действие върху обект, като SELECT
от маса.
(Аналогията пада малко в това, че PostgreSQL все още няма сигурност на ниво ред, така че потребителят все още може да "вижда", че таблицата съществува в схемата чрез SELECT
от pg_class
директно. Те обаче не могат да взаимодействат с него по никакъв начин, така че просто частта „списък“ не е съвсем същата.)