sql >> Database >  >> RDS >> PostgreSQL

Wat doet SUBSIDIEGEBRUIK OP SCHEMA precies?

GRANT s op verschillende objecten zijn gescheiden. GRANT ing op een database geeft geen GRANT rechten op het schema binnenin. Op dezelfde manier, GRANT ing op een schema verleent geen rechten op de tabellen erin.

Als je rechten hebt op SELECT uit een tabel, maar niet het recht om het te zien in het schema dat het bevat, dan heb je geen toegang tot de tabel.

De rechtentests worden op volgorde uitgevoerd:

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.

Uw verwarring kan ontstaan ​​doordat de public schema heeft een standaard GRANT van alle rechten op de rol public , waar elke gebruiker/groep lid van is. Dus iedereen heeft al gebruik van dat schema.

De zin:

(ervan uitgaande dat ook aan de eigen privilegevereisten van de objecten wordt voldaan)

Zegt dat je USAGE . moet hebben op een schema om objecten erin te gebruiken, maar met USAGE op een schema is op zichzelf niet voldoende om de objecten binnen het schema te gebruiken, u moet ook rechten hebben op de objecten zelf.

Het is als een mappenboom. Als u een directory somedir . aanmaakt met bestand somefile erin en stel het dan zo in dat alleen uw eigen gebruiker toegang heeft tot de map of het bestand (modus rwx------ in de map, mode rw------- op het bestand) dan kan niemand anders de map weergeven om te zien of het bestand bestaat.

Als u wereldleesrechten op het bestand zou verlenen (modus rw-r--r-- ) maar verander de maprechten niet, het zou geen verschil maken. Niemand kon zien het bestand om het te kunnen lezen, omdat ze niet de rechten hebben om de directory weer te geven.

Als u in plaats daarvan rwx-r-xr-x . instelt in de map, zodat mensen de map kunnen weergeven en doorkruisen, maar zonder de bestandsrechten te wijzigen, kunnen mensen lijst het bestand maar kon niet lezen omdat ze geen toegang tot het bestand zouden hebben.

U moet beide . instellen machtigingen voor mensen om het bestand daadwerkelijk te kunnen bekijken.

Hetzelfde in pag. Je hebt beide schema USAGE . nodig rechten en objectrechten om een ​​actie op een object uit te voeren, zoals SELECT van een tafel.

(De analogie vervalt een beetje doordat PostgreSQL nog geen beveiliging op rijniveau heeft, dus de gebruiker kan nog steeds "zien" dat de tabel in het schema bestaat door SELECT uit pg_class direct. Ze kunnen er echter op geen enkele manier mee communiceren, dus het is alleen het "lijst"-gedeelte dat niet helemaal hetzelfde is.)



  1. DB-migratie met de NextForm Multi-Table Wizard

  2. Inzicht in SQL Server LOCKS op SELECT-query's

  3. SQL, lege cellen afhandelen

  4. Wat is MariaDB Enterprise Cluster?