Atualmente, estou aprendendo as diferenças entre PostgreSQL e 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 role
parece ser usado como um grupo. Com o MySQL, tenho dois usuários, basicamente públicos ( DELETE
, INSERT
e permissões) SELECT
e UPDATE
um usuário administrador com algumas 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 vagamente usado específico do PostgreSQL?
- Como faço para conceder apenas permissões específicas a um usuário específico, para todas as tabelas em um banco de dados?
- Como concedo todas as permissões a um usuário específico, para todas as tabelas em um banco de dados?
- Como, se for o caso, uma função se compara a um usuário ao usar
GRANT
ouREVOKE
para permissões de usuário?
Um papel é uma entidade que pode funcionar como um usuário e/ou como um grupo. Uma função
WITH LOGIN
pode 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 fazer login. Portanto, "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 estilo PostgreSQL do SQL, os dois são usados mais ou menos como sinônimos. Por exemplo, a documentação emCREATE USER
diz:Concedendo tudo ... consulte o manual para
GRANT
. Você provavelmente deseja conceder direitos emALL TABLES IN SCHEMA public
vez de todas as tabelas no banco de dados.Concedendo alguns direitos... mesma coisa, mas ao invés de
GRANT ALL
usarGRANT SELECT, INSERT
por exemplo. Mais uma vez, consulte o manual.Uma função é um usuário e/ou um grupo. Você só pode conceder funções, porque as funções são tudo o que existe.