sql >> Databasteknik >  >> RDS >> PostgreSQL

Vad gör GRANT USAGE ON SCHEMA exakt?

GRANT s på olika objekt är separata. GRANT att använda en databas GRANT rättigheter till schemat inom. På liknande sätt, GRANT att använda ett schema ger inte rättigheter till tabellerna inom.

Om du har rättigheter till SELECT från en tabell, men inte rätten att se den i schemat som innehåller den då kan du inte komma åt tabellen.

Rättighetstesterna görs i ordning:

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.

Din förvirring kan uppstå från det faktum att public schemat har en standard GRANT av alla rättigheter till rollen public , som varje användare/grupp är medlem i. Så alla har redan användning av det schemat.

Frasen:

(förutsatt att objektens egna privilegiekrav också är uppfyllda)

Säger att du måste ha USAGE på ett schema för att använda objekt inom det, men med USAGE på ett schema är inte i sig tillräckligt för att använda objekten i schemat, du måste också ha rättigheter på själva objekten.

Det är som ett katalogträd. Om du skapar en katalog somedir med filen somefile inom den ställ sedan in den så att endast din egen användare kan komma åt katalogen eller filen (läge rwx------ på dir, mode rw------- på filen) så kan ingen annan lista katalogen för att se att filen finns.

Om du skulle ge världsläsrättigheter för filen (läge rw-r--r-- ) men inte ändra katalogbehörigheterna det skulle inte göra någon skillnad. Ingen kunde se filen för att kunna läsa den, eftersom de inte har rättigheterna att lista katalogen.

Om du istället ställer in rwx-r-xr-x på katalogen, ställa in den så att folk kan lista och gå igenom katalogen men inte ändra filbehörigheterna, kan folk lista filen men kunde inte läsa det för att de inte skulle ha tillgång till filen.

Du måste ställa in båda behörigheter för personer att faktiskt kunna se filen.

Samma sak i sid. Du behöver båda schemat USAGE rättigheter och objekträttigheter att utföra en åtgärd på ett objekt, som SELECT från ett bord.

(Analogin faller ner lite i att PostgreSQL inte har säkerhet på radnivå ännu, så användaren kan fortfarande "se" att tabellen finns i schemat genom att SELECT ing från pg_class direkt. De kan dock inte interagera med det på något sätt, så det är bara "listdelen" som inte är riktigt densamma.)



  1. ALTER TABLE för att lägga till en sammansatt primärnyckel

  2. Hur väljer man bara 1 rad från oracle sql?

  3. Hur man ändrar text till gemener i SQL

  4. MySQL FLOOR()-funktion – avrunda nedåt till närmaste heltal