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 / 62381
Accepted
Andy Davis
Andy Davis
Asked: 2014-04-03 11:04:37 +0800 CST2014-04-03 11:04:37 +0800 CST 2014-04-03 11:04:37 +0800 CST

Privilégios para o proprietário do banco de dados; usuário do aplicativo

  • 772

Versão rápida:

Que comando devo emitir para permitir que um proprietário de banco de dados permita que ele acesse tabelas neste banco de dados e isso pode ser feito a partir da conta desse proprietário?


Versão mais longa:

Estou criando um banco de dados no RDS. Eu tenho um usuário 'root' que configurei com a Amazon.

A Amazon cria automaticamente a função de grupo 'rds_superuser', que é muito privilegiada, mas na verdade não é um superusuário.

Estou criando um banco de dados e um usuário para a aplicação da seguinte forma:

create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;

\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;

Atualizei este script para refletir as sugestões de Craig Ringer sobre como devo lidar com isso.

Quando o aplicativo se conecta (com as credenciais master_application), ele cria (e, portanto, possui) as tabelas.

Meu problema é que não consigo usar meu login administrativo (rootish) para executar consultas porque esse usuário não tem privilégios na tabela.

Consegui resolver isso antes executando o seguinte na conta do aplicativo:

GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;

Mas parece hacky ter um usuário subordinado concedendo privs de volta a um usuário administrativo.

Então... Existe um comando que eu possa executar antes ou depois de criar as tabelas do aplicativo que garantirá que o proprietário do banco de dados possa acessar as tabelas dentro do banco de dados?


atualizar depois de tentar novamente alterar privilégios padrão...

Isso ainda não concede acesso às tabelas; Eu vejo isso sendo sugerido em outro lugar e faz todo o sentido, mas não está funcionando para mim. De um shell psql:

master_integration=> \ddp
                           Default access privileges
      Owner       | Schema | Type  |             Access privileges             
------------------+--------+-------+-------------------------------------------
 integration_root |        | table | integration_root=arwdDxt/integration_root+
                  |        |       | rds_superuser=arwdDxt/integration_root
(1 row)

master_integration=> \dp users
                           Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)

Integration_root é meu usuário superusuário e users é uma tabela dentro do meu banco de dados.


Atualizar

Recebi uma resposta bastante inútil de alguém da Amazon.

Eles me pediram para chamar ALTER DEFAULT PRIVILEGES do login master_application. Embora isso provavelmente funcione, não responderia à minha pergunta (que é como faço isso acontecer apenas na conta rds_superuser).

Pedi que esclarecessem isso e eles foram embora.

postgresql amazon-rds
  • 2 2 respostas
  • 18644 Views

2 respostas

  • Voted
  1. Best Answer
    Craig Ringer
    2014-04-03T17:53:58+08:002014-04-03T17:53:58+08:00

    Você quer ALTER DEFAULT PRIVILEGES.

    Conceda os rds_superuserdireitos de acesso padrão a todas as novas tabelas.

    Isso afeta apenas as tabelas criadas após o arquivo ALTER. Para tabelas existentes, você deve ter GRANTdireitos.

    • 9
  2. Alexandros
    2014-04-03T12:21:29+08:002014-04-03T12:21:29+08:00

    O esquema público deve ser visível para todos os usuários. Você não deve restringir os direitos do esquema público a apenas um grupo.

    Então, se você não usa:

    GRANT ALL ON SCHEMA public TO GROUP rds_superuser WITH GRANT OPTION;
    

    Você pode trabalhar com segurança com o esquema público com todas as contas.

    Se você não quiser que contas específicas baguncem suas tabelas de esquema público, crie uma nova função (para usuários do seu aplicativo) e revogue os direitos dessa função específica dentro do esquema público. Algo como:

    CREATE USER mywebuser WITH PASSWORD '*****';
    REVOKE ALL PRIVILEGES ON SCHEMA public FROM mywebuser;
    GRANT SELECT ON ALL TABLES IN SCHEMA public TO mywebuser; (or whatever rights you need to provide)
    

    Não o contrário quando você tenta fazer isso.

    • 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

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 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

    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
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • 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
    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

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