GRANT
s em objetos diferentes são separados. GRANT
o uso de um banco de dados não concede GRANT
direitos ao esquema interno. Da mesma forma, usar GRANT
um esquema não concede direitos sobre as tabelas internas.
Se você tiver direitos a SELECT
partir de uma tabela, mas não tiver o direito de vê-la no esquema que a contém, não poderá acessar a tabela.
Os testes de direitos são feitos em 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 para a função public
, da qual cada usuário / grupo é membro. Portanto, todo mundo já usa esse esquema.
A frase:
(assumindo que os próprios requisitos de privilégio dos objetos também sejam atendidos)
Está dizendo que você deve ter USAGE
um esquema para usar objetos dentro dele, mas ter USAGE
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 um arquivo somefile
dentro dele, configure-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), então ninguém mais poderá listar o diretório para ver se o arquivo existe.
Se você conceder direitos de leitura universal no arquivo (modo rw-r--r--
), mas não alterar as permissões do diretório, não fará diferença. Ninguém pode ver o arquivo para lê-lo, porque não tem permissão para listar o diretório.
Se, em vez disso, você definir rwx-r-xr-x
no diretório, definindo-o de forma que as pessoas possam listar e percorrer o diretório, mas não alterando as permissões do arquivo, as pessoas podem listar o arquivo, mas não podem lê- lo porque não teriam acesso ao arquivo.
Você precisa definir as duas permissões para que as pessoas possam realmente ver o arquivo.
Mesma coisa na pág. Você precisa de USAGE
direitos de esquema e direitos de objeto para executar uma ação em um objeto, como SELECT
em uma tabela.
(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 ao SELECT
iniciar pg_class
diretamente. Eles não podem interagir com ela de nenhuma forma , porém, é apenas a parte da "lista" que não é exatamente a mesma.)
CREATE EXTENSION
. É mais ou menos o mesmo problema com arquivos criados no Linux enquanto vocêsu
. Será bom se houver uma espécie desudo -e
instruções for em pqsl.