Funções do PostgreSQL versus usuários, concedem permissões

27

Atualmente, estou aprendendo as diferenças entre o PostgreSQL e o MySQL, pois tenho um novo projeto e também pretendo migrar meu software existente do MySQL para o PostgreSQL. Na verdade, comecei a criar uma tabela HTML com uma comparação de comandos (para usuários / bancos de dados / prompt de comando, etc.) entre os dois. Depois de ler uma resposta aqui, notei que roleparece ser usado como um grupo. Com MySQL Eu tenho dois usuários, basicamente públicos ( DELETE, INSERT, SELECTe UPDATEpermissões) e um usuário administrador com um par de permissões adicionais.

Então, basicamente, no prompt de comando do Windows 7 (somente desenvolvimento local) ...

  • Uma função é um usuário, grupo ou um termo pouco utilizado específico para o PostgreSQL?
  • Como concedo apenas permissões específicas para um usuário específico, para todas as tabelas em um banco de dados?
  • Como concedo todas as permissões para um usuário específico, para todas as tabelas em um banco de dados?
  • Como, se é que o faz, uma função se compara a um usuário ao usar GRANTou REVOKEpara obter permissões de usuário?
John
fonte

Respostas:

48

Uma função é uma entidade que pode funcionar como um usuário e / ou como um grupo. Uma função WITH LOGINpode ser usada como usuário, ou seja, você pode fazer login com ela. Qualquer função pode funcionar como um grupo, incluindo funções nas quais você também pode efetuar login. Então "usuário" e "grupo" são essencialmente termos que indicam o uso pretendido de uma função, não há distinção real entre eles. Mesmo no sabor do SQL do PostgreSQL, os dois são usados ​​mais ou menos como sinônimos. Por exemplo, a documentação CREATE USERdiz:

CREATE USER agora é um alias para CREATE ROLE.

Concedendo tudo ... consulte o manual paraGRANT . Você provavelmente realmente deseja conceder direitos ao ALL TABLES IN SCHEMA publicinvés de todas as tabelas no banco de dados.

Concedendo alguns direitos ... mesma coisa, mas em vez de GRANT ALLusar, GRANT SELECT, INSERTpor exemplo. Mais uma vez, consulte o manual.

Uma função é um usuário e / ou um grupo. Você só pode conceder às funções, porque as funções são tudo o que existe.

Craig Ringer
fonte
Ótima explicação!
sharadov 29/01
Então ... qual é a sintaxe para conceder todos os direitos a todas as tabelas no esquema público?
AlxVallejo
@AlxVallejo isso deve ajudar . Experimente a barra superior, ou ler a GRANTpágina de documentação, onde ele listaALL TABLES IN SCHEMA
Craig Ringer