Suponha que você trabalha em uma empresa que deseja aprimorar a estratégia de segurança do seu Banco de Dados, através da utilização do mecanismo de controle de acesso por papéis. Essa empresa utiliza como SGBD o PostgreSQL, que gerencia as permissões de acesso utilizando o conceito de papéis (roles).
Você já conhece este mecanismo e sabe que role pode ser um usuário ou um grupo de usuários. Além disso, você também sabe que cada role possui objetos do banco e pode liberar o acesso de seus objetos para que outros roles possam também manipulá-los.
Considerando seu conhecimento no assunto, o gerente do setor no qual você trabalha designou a você três tarefas:
a) Executar os comandos a seguir e definir como está organizada a hierarquia dos grupos e usuários da empresa:
CREATE ROLE user1 LOGIN PASSWORD 'user1';
CREATE ROLE user3 LOGIN PASSWORD 'abc';
CREATE ROLE supervisor;
CREATE ROLE expedicao;
CREATE ROLE admin CREATEDB CREATEROLE ROLE supervisor, user3;
CREATE ROLE vendedor;
CREATE ROLE user2 LOGIN IN ROLE admin;
GRANT admin TO vendedor;
GRANT vendedor, expedicao TO user1;
b) Utilizando o user1, executar a seguinte rotina e descrever quais tabelas cada um dos papéis (admin, expedicao, supervisor, vendedor, user1, user2, user3) tem permissão para realizar um SELECT. CREATE TABLE tbl1 (id serial primary key, data date DEFAULT now());
SET ROLE vendedor;
CREATE TABLE tbl2 (id serial primary key, data date DEFAULT now());
SET ROLE admin;
CREATE TABLE tbl3 (id serial primary key, data date DEFAULT now());
c) Refazer os passos a e b alterando o comando:
CREATE ROLE vendedor;
• por
CREATE ROLE vendedor NOINHERIT;
Descrever quais tabelas cada um dos papéis (admin, expedicao, supervisor, vendedor, user1, user2, user3) tem permissão para realizar um SELECT diretamente (sem a necessidade de alterar o papel atual).
CREATE ROLE admin CREATEDB CREATEROLE ROLE supervisor, user3; CREATE ROLE supervisor; CREATE ROLE expedicao; CREATE ROLE vendedor;
CREATE ROLE user1 LOGIN PASSWORD 'user1'; CREATE ROLE user2 LOGIN IN ROLE admin; CREATE ROLE user3 LOGIN PASSWORD 'abc';
GRANT admin TO vendedor; GRANT vendedor, expedicao TO user1;
temos entao como ADMIN: supervisor, vendedor, user2, user3
resposta da letra b)
somente o usuario ADMIN tem permissao pra executar um select, conforme o clausula GRANT
resposta da letra c)
com o comando NOINHERIT o usuario vendedor perdeu os priveligios, ficando somente os usuarios supervisor, user2 e user3 como admin e privilegios suficientes para executar os comandos
Explicação:
Fazendo passo a passo as tarefas, espero que ajude.
Lista de comentários
Resposta:
CREATE ROLE name [ [ WITH ] option [ ... ] ]
where option can be:
SUPERUSER | NOSUPERUSER
| CREATEDB | NOCREATEDB
| CREATEROLE | NOCREATEROLE
| INHERIT | NOINHERIT
| LOGIN | NOLOGIN
| REPLICATION | NOREPLICATION
| BYPASSRLS | NOBYPASSRLS
| CONNECTION LIMIT connlimit
| [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
| VALID UNTIL 'timestamp'
| IN ROLE role_name [, ...]
| IN GROUP role_name [, ...]
| ROLE role_name [, ...]
| ADMIN role_name [, ...]
| USER role_name [, ...]
| SYSID uid
CREATE USER Glauco with
LOGIN
PASSWORD 'JIJI1J' ;
CREATE ROLE admin WITH
PASSWORD '2szr3gvdh'
CREATEDB
CREATEROLE;
CREATE ROLE marcos WITH LOGIN PASSWORD '2lbsyrpxgs' VALID UNTIL '2022-02-01';
Explicação:
Resposta:
resposta da letra a)
CREATE ROLE admin CREATEDB CREATEROLE ROLE supervisor, user3;
CREATE ROLE supervisor;
CREATE ROLE expedicao;
CREATE ROLE vendedor;
CREATE ROLE user1 LOGIN PASSWORD 'user1';
CREATE ROLE user2 LOGIN IN ROLE admin;
CREATE ROLE user3 LOGIN PASSWORD 'abc';
GRANT admin TO vendedor;
GRANT vendedor, expedicao TO user1;
temos entao como ADMIN: supervisor, vendedor, user2, user3
resposta da letra b)
somente o usuario ADMIN tem permissao pra executar um select, conforme o clausula GRANT
resposta da letra c)
com o comando NOINHERIT o usuario vendedor perdeu os priveligios, ficando somente os usuarios supervisor, user2 e user3 como admin e privilegios suficientes para executar os comandos
Explicação:
Fazendo passo a passo as tarefas, espero que ajude.