Costumo utilizar bancos de dados e raramente tenho operações autorizadas, mas recentemente houve uma cena em que preciso definir quais bancos de dados, tabelas e sequências só podem ser operados por um determinado usuário. Deixe-me compartilhar minha experiência, eu uso o banco de dados PostgreSQL.
Sintaxe do Comando de Empoderamento
Os comandos de concessão no PostgreSQL são GRANT e REVOKE.
O comando GRANT é usado para conceder certas permissões (como SELECT, INSERT, UPDATE, DELETE, etc.) a um determinado usuário ou grupo de usuários em um objeto (como tabelas, visualizações, funções, etc.).
gramática:
GRANT privilege [, ...] ON object TO {user | group | PUBLIC} [, ...] [WITH GRANT OPTION];
Entre eles, privilégio é um tipo de permissão, objeto é um objeto, que pode ser uma tabela, visualização, função, etc., usuário ou grupo é o usuário ou grupo de usuários a quem será concedida permissão e PÚBLICO significa todos os usuários.
Por exemplo, o usuário autorizado zhangsan executa operações SELECT e INSERT no teste da tabela:
GRANT SELECT, INSERT ON test TO zhangsan;
O comando REVOKE é usado para revogar certas permissões de um usuário ou grupo de usuários em um objeto.
gramática:
REVOKE privilege [, ...] ON object FROM {user | group | PUBLIC} [, ...] [CASCADE | RESTRICT];
Entre eles, os significados de privilégio, objeto, usuário ou grupo e PUBLIC são os mesmos do comando GRANT.
Por exemplo, cancele a permissão SELECT do usuário zhangsan no teste da tabela:
REVOKE SELECT ON test FROM zhangsan;
Deve-se observar que apenas os superusuários têm autoridade para conceder e revogar permissões.
combate
ver todos os usuários
SELECIONE * DE pg_user;
Crie um usuário e defina uma senha
CRIAR USUÁRIO zhangsan COM SENHA '123456';
excluir usuários
DROP USUÁRIO zhangsan;
criar banco de dados
Teste CRIAR BANCO DE DADOS;
excluir banco de dados
Teste DROP DATABASE IF EXISTS;
Remova os privilégios do usuário no banco de dados "teste"
REVOGAR TODOS os privilégios NO "teste" DO BANCO DE DADOS DE zhangsan;
Dê permissão ao usuário para operar o banco de dados de "teste"
CONCEDER CONECTAR, CRIAR, TEMPORÁRIO NO "teste" DO BANCO DE DADOS PARA zhangsan;
Dê permissão ao usuário para operar tabelas no banco de dados "teste"
GRANT SELECT, INSERT, UPDATE, DELETE
EM TODAS AS TABELAS DO SCHEMA PUBLIC
TO zhangsan;
Concede ao usuário o privilégio de operar em sequências no banco de dados "teste"
Definições de permissão para sequências
Pode-se observar no documento oficial que todas as permissões da sequência são rwU, correspondendo a SELECT, UPDATE, USAGE respectivamente;
Para sequências, o privilégio SELECT permite o uso da função currval
Para sequências, o privilégio UPDATE permite o uso das funções nextval e setval
Para sequências, o privilégio USAGE permite o uso das funções currval e nextval
Se você precisar de permissão para modificar a sequência, poderá conceder ALL diretamente, da seguinte maneira
CONCEDER SELEÇÃO, ATUALIZAÇÃO, USO EM TODAS AS SEQUÊNCIAS DO ESQUEMA PÚBLICO PARA zhangsan;
Se você apenas usar a sequência e não precisar modificá-la, poderá capacitar USAGE
CONCESSAR USO EM TODAS AS SEQUÊNCIAS DO ESQUEMA PÚBLICO PARA zhangsan;