sql >> Database teknologi >  >> RDS >> PostgreSQL

Hvad gør GRANT USAGE ON SCHEMA helt præcist?

GRANT s på forskellige objekter er adskilte. GRANT ing på en database GRANT rettigheder til skemaet indeni. Tilsvarende GRANT ing på et skema giver ikke rettigheder til tabellerne indeni.

Hvis du har rettigheder til SELECT fra en tabel, men ikke retten til at se den i skemaet, der indeholder den, så kan du ikke få adgang til tabellen.

Rettighedstesten udføres i rækkefølge:

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 forvirring kan opstå som følge af, at public skemaet har en standard GRANT af alle rettigheder til rollen public , som hver bruger/gruppe er medlem af. Så alle har allerede brug for det skema.

Sætningen:

(forudsat at objekternes egne privilegiekrav også er opfyldt)

Siger at du skal have USAGE på et skema for at bruge objekter i det, men med USAGE på et skema er ikke i sig selv tilstrækkeligt til at bruge objekterne i skemaet, du skal også have rettigheder til selve objekterne.

Det er ligesom et bibliotekstræ. Hvis du opretter en mappe somedir med filen somefile i den, indstil den så, at kun din egen bruger kan få adgang til mappen eller filen (tilstand rwx------ på dir, mode rw------- på filen), så kan ingen andre liste mappen for at se, at filen eksisterer.

Hvis du skulle give verdenslæserettigheder til filen (tilstand rw-r--r-- ), men ikke ændre mappetilladelserne, det ville ikke gøre nogen forskel. Ingen kunne se filen for at læse den, fordi de ikke har rettighederne til at vise mappen.

Hvis du i stedet indstiller rwx-r-xr-x på biblioteket, indstille det, så folk kan liste og krydse biblioteket, men ikke ændre filtilladelserne, kunne folk liste filen, men kunne ikke læse det fordi de ikke ville have adgang til filen.

Du skal indstille begge tilladelser til, at folk rent faktisk kan se filen.

Det samme i s. Du skal bruge både skemaet USAGE rettigheder og objektrettigheder til at udføre en handling på et objekt, såsom SELECT fra et bord.

(Analogien falder lidt ned i, at PostgreSQL ikke har sikkerhed på rækkeniveau endnu, så brugeren kan stadig "se" at tabellen eksisterer i skemaet ved at SELECT ing fra pg_class direkte. De kan dog ikke interagere med det på nogen måde, så det er bare "listedelen", der ikke er helt den samme.)



  1. SQL Server INFORMATION_SCHEMA visninger | Se om der findes en tabel

  2. Få advarsel:Nulværdi elimineres af en samlet eller anden SET-operation

  3. Beregn punkt 50 miles væk (nord, 45% NØ, 45% SV)

  4. Hvordan får man ASCII-værdi i Oracle?