AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 10142
Accepted
mit
mit
Asked: 2012-01-05 06:19:25 +0800 CST2012-01-05 06:19:25 +0800 CST 2012-01-05 06:19:25 +0800 CST

Como impossibilitar que um usuário postgres exclua bancos de dados?

  • 772

Qual seria a instrução sql (que o usuário postgres executará) para que seja impossível para o usuário postgres user1excluir (soltar) bancos de dados?

Ou posso adicionar uma regra em algum arquivo de configuração?

postgresql permissions
  • 2 2 respostas
  • 7313 Views

2 respostas

  • Voted
  1. Best Answer
    Mike Sherrill 'Cat Recall'
    2012-01-05T07:41:20+08:002012-01-05T07:41:20+08:00

    No PostgreSQL, apenas o proprietário de um banco de dados pode descartar um banco de dados . (Superusuários podem descartar bancos de dados, mas esse é um problema diferente.) Portanto, alterar o proprietário é a maneira mais direta de impedir que o usuário1 exclua quaisquer bancos de dados.

    Corrija isso com ALTER DATABASE .

    ALTER DATABASE name OWNER TO new_owner
    

    Para alterar o proprietário, você deve possuir o banco de dados e também ser um membro direto ou indireto da nova função proprietária e deve ter o privilégio CREATEDB. (Observe que os superusuários têm todos esses privilégios automaticamente.)

    Para devolver permissões específicas ao user1, use GRANT . Você provavelmente está procurando por algo como

    GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO user1;
    

    Mas leia primeiro a documentação do GRANT. Você pode precisar de WITH GRANT OPTION, permissões em sequências, algo menor que ALL PRIVILEGES e assim por diante.

    • 4
  2. Eric Leschinski
    2021-12-23T13:49:05+08:002021-12-23T13:49:05+08:00

    Regras do Postgresql para impedir que um tipo de evento aconteça em um objeto:

    \dn                                        --shows your schema name 
    SELECT session_user, current_user;         --shows your user 
    
    --create a regular table with some data in it:
    drop table if exists mytable; 
    CREATE TABLE mytable( index integer, foo character varying(10)); 
    insert into mytable values (3, 'yatta'); 
    insert into mytable values (9, 'phobos'); 
    select * from mytable; 
    ┌───────┬────────┐ 
    │ index │  foo   │ 
    ├───────┼────────┤ 
    │     3 │ yatta  │ 
    │     9 │ phobos │ 
    └───────┴────────┘ 
    --Make a rule to stop deletes on a table:
    CREATE or replace RULE mytable_del_protect AS ON DELETE TO mytable 
    DO INSTEAD NOTHING; 
    
    --Try to do a delete on the table
    delete from mytable where index = 3;    --delete succeeds and affects 0 rows
    select * from mytable;    --row you deleted is still there 
     
    --Clear the rule: 
    drop RULE mytable_del_protect on mytable; 
    --once again try to delete
    delete from mytable where index = 3;     --delete succeeds, affects 1 row
    ┌───────┬────────┐ 
    │ index │  foo   │ 
    ├───────┼────────┤ 
    │     9 │ phobos │ 
    └───────┴────────┘ 
    

    Listar regras do postgresql:

    Suas informações de regra são codificadas em pg_rewrite pg_classe pg_namespace:

    select n.nspname as rule_schema, c.relname as rule_table, 
       case r.ev_type 
         when '1' then 'SELECT' 
         when '2' then 'UPDATE' 
         when '3' then 'INSERT' 
         when '4' then 'DELETE' 
         else 'UNKNOWN' 
       end as rule_event 
    from pg_rewrite r join pg_class c on r.ev_class = c.oid 
      left join pg_namespace n on n.oid = c.relnamespace 
      where c.relname = 'mytable'
    
    ┌─────────────┬────────────┬────────────┐ 
    │ rule_schema │ rule_table │ rule_event │ 
    ├─────────────┼────────────┼────────────┤ 
    │ public      │ mytable    │ DELETE     │ 
    └─────────────┴────────────┴────────────┘ 
    

    Em vez de uma regra não fazer nada na exclusão evitada, você pode chamar um procedimento. Você pode criar uma regra para fazer qualquer coisa, em qualquer tipo de evento em qualquer tipo de objeto de banco de dados.

    • 0

relate perguntas

  • Posso ativar o PITR depois que o banco de dados foi usado

  • Práticas recomendadas para executar a replicação atrasada do deslocamento de tempo

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Sequências Biológicas do UniProt no PostgreSQL

  • Qual é a diferença entre a replicação do PostgreSQL 9.0 e o Slony-I?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como ver a lista de bancos de dados no Oracle?

    • 8 respostas
  • Marko Smith

    Quão grande deve ser o mysql innodb_buffer_pool_size?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    restaurar a tabela do arquivo .frm e .ibd?

    • 10 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve