DEV Community

Mariana Ferreira
Mariana Ferreira

Posted on

PostgreSQL: como permitir acesso de leitura a apenas algumas colunas de uma tabela?

Como fornecer acesso de leitura a algumas colunas de uma tabela e impedir o acesso as demais colunas para um certo usuário?

Para exemplificar esse cenário, vou usar a base de dados Chinook e a ferramenta DBeaver para administrar a base de dados.

Primeiro, crie um usuário:

CREATE USER mariana WITH PASSWORD 'sua_senha';
Enter fullscreen mode Exit fullscreen mode

Depois, crie uma view com apenas as colunas da tabela que você deseja permitir o acesso. Nesse caso, estou criando com as colunas "EmployeeId", "LastName", "FirstName", "Title", "Email" da tabela "Employee":

CREATE VIEW employee_base_info AS SELECT "EmployeeId", "LastName", "FirstName", "Title", "Email" FROM "Employee";
Enter fullscreen mode Exit fullscreen mode

A view é como uma tabela virtual, não é uma tabela que está de fato no banco e quando é referenciada essa query é executada.

Depois, dê permissão de leitura na view para o usuário:

GRANT SELECT ON employee_base_info TO mariana;
Enter fullscreen mode Exit fullscreen mode

Então, ao conectar no banco utilizando esse usuário, temos permissão de realizar uma consulta na view:
Print da tela do Dbeaver com a query:  raw `select * from employee_base_info` endraw  e abaixo as informações da tabela

Mas não temos permissão de consultar a tabela inteira:
Print da tela do Dbeaver com a query:  raw `select * from "Employee" e abaixo o erro 'permission denied for table Employee` endraw

Tampouco permissão de update:
Print da tela do Dbeaver com a query:  raw `update "Employee" set "LastName" = 'Silva' where "EmployeeId" = 1` endraw  e abaixo o erro 'permission denied for table Employee`

Com isso garantimos maior segurança para nosso banco de dados.

Obrigada por ler!
Se quiser saber mais, veja também a documentação do PostgreSQL.

Top comments (0)