PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

O que o GRANT USAGE ON SCHEMA faz exatamente?


GRANT s em objetos diferentes são separados. GRANT ndo em um banco de dados não GRANT direitos para o esquema dentro. Da mesma forma, GRANT ing em um esquema não concede direitos nas tabelas dentro.

Se você tiver direitos para SELECT de uma tabela, mas não o direito de vê-lo no esquema que o contém, você não poderá acessar a tabela.

Os testes de direitos são feitos na ordem:
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.

Sua confusão pode surgir do fato de que o public esquema tem um padrão GRANT de todos os direitos à função public , do qual cada usuário/grupo é membro. Então todo mundo já tem uso nesse esquema.

A frase:

(assumindo que os próprios requisitos de privilégio dos objetos também são atendidos)

Está dizendo que você deve ter USAGE em um esquema para usar objetos dentro dele, mas tendo USAGE em um esquema não é por si só suficiente para usar os objetos dentro do esquema, você também deve ter direitos sobre os próprios objetos.

É como uma árvore de diretórios. Se você criar um diretório somedir com arquivo somefile dentro dele então defina-o para que apenas seu próprio usuário possa acessar o diretório ou o arquivo (modo rwx------ no diretório, modo rw------- no arquivo), ninguém mais poderá listar o diretório para ver se o arquivo existe.

Se você conceder direitos de leitura mundial no arquivo (modo rw-r--r-- ), mas não alterar as permissões do diretório, não faria diferença. Ninguém podia ver o arquivo para lê-lo, porque eles não têm o direito de listar o diretório.

Se você definir rwx-r-xr-x no diretório, definindo-o para que as pessoas possam listar e percorrer o diretório, mas sem alterar as permissões do arquivo, as pessoas podem listar o arquivo, mas não pôde ler porque eles não teriam acesso ao arquivo.

Você precisa definir ambos permissões para que as pessoas possam realmente visualizar o arquivo.

Mesma coisa na pág. Você precisa do esquema USAGE direitos e direitos de objeto para executar uma ação em um objeto, como SELECT de uma mesa.

(A analogia cai um pouco porque o PostgreSQL ainda não tem segurança em nível de linha, então o usuário ainda pode "ver" que a tabela existe no esquema por SELECT ndo de pg_class diretamente. Eles não podem interagir com isso de forma alguma, então é apenas a parte da "lista" que não é exatamente a mesma.)