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 / user-114228

ChrisJ's questions

Martin Hope
ChrisJ
Asked: 2023-02-04 18:08:01 +0800 CST

Evitando deadlocks ao bloquear várias linhas sem usar NOWAIT

  • 7

Em algumas respostas , fui informado de que NOWAITé necessário evitar impasses, o que me surpreendeu porque não é mencionado na documentação do Postgres sobre bloqueios e impasses

Dadas as 3 sessões seguintes:

CREATE TABLE my_table (id int primary key);

-- Session 1
BEGIN;
SELECT id FROM my_table
WHERE id IN (1,2,5)
ORDER BY id
FOR UPDATE

-- Session 2, started after the select in session 1 (before it is committed)
BEGIN
SELECT id FROM my_table
WHERE id IN (4,5,6)
ORDER BY id
FOR UPDATE

-- Session 3, started after the select in session 2 (before 1 or 2 are committed)
BEGIN
SELECT id FROM my_table
WHERE id IN (5,6,7)
ORDER BY id
FOR UPDATE

Eu pensei que cada consulta esperaria uma vez que chegasse a uma linha bloqueada e continuaria bloqueando na ordem especificada por ORDER BY. No entanto, com base nessas respostas, parece que a ordem de bloqueio não é garantida mesmo com um ORDER BYe é possível que essas instruções possam travar?

Espero evitar o uso NOWAITporque o cenário em que estou trabalhando faz parte de uma transação bastante grande e, presumivelmente, o erro resultante invalidaria a transação e eu teria que revertê-la e começar tudo de novo.

As transações são relativamente rápidas, então não me importo de esperar se puder evitar impasses.

Se for verdade que o acima não garante o pedido, a única maneira que vejo de fazer isso seria

SELECT id FROM my_table WHERE id = 1 FOR UPDATE;
SELECT id FROM my_table WHERE id = 2 FOR UPDATE;
...etc

O que parece tedioso. Existe uma maneira melhor?

postgresql
  • 1 respostas
  • 57 Views
Martin Hope
ChrisJ
Asked: 2020-10-07 23:35:31 +0800 CST

Quais são as implicações de segurança dos privilégios necessários para a conta Bluemedora Postgres?

  • 0

Blue Medora é um serviço para encaminhar métricas de monitoramento do Postgres para o Google Cloud Monitoring.

Como parte de suas instruções de configuração, eles oferecem um script SQL para configurar um usuário com privilégios mínimos a ser usado para fazer login na conta. (colado abaixo para referência)

Se a conta bluemedora fosse comprometida, que informação poderia vazar ou o que mais poderia fazer?

(obviamente substituindo tmppasswordno script é um dado)

Uma óbvia é que ele pode extrair todas as estatísticas sobre as quais relata, incluindo consultas de relatórios que estão sendo executadas, o que pode levar ao vazamento de PII se estiver incluído nessas consultas.

Com base nas informações presentes, um invasor pode descobrir os nomes dos usuários e superusuários do banco de dados, todas as tabelas sendo usadas e com as consultas provavelmente uma boa parte das estruturas das tabelas. Que poderia então ser usado para criar um ataque direcionado.

Existem outras formas mais diretas de acessar os dados armazenados nas tabelas com essa conta ou escalar privilégios?

Aqui está o roteiro

CREATE SCHEMA bluemedora;
CREATE EXTENSION IF NOT EXISTS pg_stat_statements;
CREATE OR REPLACE FUNCTION bluemedora.pg_stat_statements() RETURNS SETOF pg_stat_statements AS
$$
SELECT * FROM public.pg_stat_statements;
$$ LANGUAGE sql VOLATILE SECURITY DEFINER;

CREATE OR REPLACE FUNCTION public.explain_this (
      l_query text,
      out explain json
    )
RETURNS SETOF json AS
$$
BEGIN
  RETURN QUERY EXECUTE 'explain (format json) ' || l_query;
END;
$$
LANGUAGE 'plpgsql'
VOLATILE
RETURNS NULL ON NULL INPUT
SECURITY DEFINER
COST 100 ROWS 1000;

CREATE USER bluemedora WITH PASSWORD 'tmppassword';
GRANT SELECT ON pg_database TO bluemedora;
GRANT SELECT ON pg_stat_bgwriter TO bluemedora;
GRANT SELECT ON pg_stat_database TO bluemedora;
GRANT SELECT ON pg_stat_user_indexes TO bluemedora;
GRANT SELECT ON pg_stat_user_tables TO bluemedora;
GRANT SELECT ON pg_statio_all_sequences TO bluemedora;
GRANT SELECT ON pg_statio_user_indexes TO bluemedora;
GRANT SELECT ON pg_statio_user_tables TO bluemedora;
GRANT SELECT ON pg_tables TO bluemedora;
GRANT SELECT ON pg_tablespace TO bluemedora;
GRANT SELECT ON pg_user TO bluemedora;
GRANT SELECT ON pg_stat_replication TO bluemedora;
GRANT SELECT ON pg_stat_database_conflicts TO bluemedora;
GRANT SELECT ON pg_trigger TO bluemedora;
GRANT SELECT ON pg_stat_activity TO bluemedora;
GRANT SELECT ON pg_stat_statements TO bluemedora;
GRANT USAGE ON SCHEMA bluemedora TO bluemedora;
GRANT EXECUTE ON FUNCTION public.explain_this(l_query text, out explain text) TO bluemedora;
postgresql security
  • 1 respostas
  • 211 Views
Martin Hope
ChrisJ
Asked: 2019-01-25 19:39:38 +0800 CST

Por que preciso converter NULL para o tipo de coluna?

  • 15

Eu tenho um auxiliar que está gerando algum código para fazer atualizações em massa para mim e gera SQL que se parece com isso:

(Ambos os campos ativo e principal são do tipo boolean)

UPDATE fields as t set "active" = new_values."active","core" = new_values."core"
FROM (values 
(true,NULL,3419),
(false,NULL,3420)
) as new_values("active","core","id") WHERE new_values.id = t.id;

No entanto, ele falha com:

ERROR: column "core" is of type boolean but expression is of type text

Eu posso fazê-lo funcionar adicionando ::booleanaos nulos, mas isso parece estranho, por que NULL é considerado do tipo TEXT?

Além disso, é um pouco complicado de converter porque exigiria um pouco de retrabalho do código para saber para que tipo deve converter NULLs (a lista de colunas e valores está sendo gerada automaticamente a partir de uma matriz simples de objetos JSON) .

Por que isso é necessário e existe uma solução mais elegante que não exija que o código gerador saiba o tipo de NULLs?

Se for relevante, estou usando sequelize sobre Node.JS para fazer isso, mas também estou obtendo o mesmo resultado no cliente de linha de comando Postgres.

postgresql null
  • 1 respostas
  • 10652 Views
Martin Hope
ChrisJ
Asked: 2019-01-12 08:21:41 +0800 CST

Apesar de usar GRANT ... ON ALL TABLES (ou ALL SEQUENCES) TO usuário, o usuário não pode acessar tabelas recém-criadas (ou sequências)

  • 1

Para um servidor de produção, eu queria separar as funções de superusuário, administrador e aplicativo para limitar o escopo dos erros.

Então, criei uma conta que nosso aplicativo usa para acessar o banco de dados e uma conta de administrador. A conta admin também é usada para executar migrações para criar tabelas.

Achei que tinha resolvido todos os problemas, o usuário do aplicativo pode acessar todas as tabelas existentes (que foram criadas pelo superusuário), porém agora tendo executado uma migração que cria uma tabela, o aplicativo não tem acesso a essa tabela.

Os usuários receberam acesso com os seguintes comandos:

GRANT CREATE, CONNECT ON DATABASE test TO admin;
GRANT SELECT, INSERT, UPDATE, DELETE, REFERENCES ON ALL TABLES IN SCHEMA public 
  TO admin;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO admin;

GRANT CONNECT ON DATABASE test TO api;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public
  TO api;
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO api;

Então o usuário admin executou CREATE TABLE new_table;e tentando acessar aquela tabela, o app ficapermission denied for relation new_table

1) Qual grant está faltando para permitir o acesso da api à nova tabela 2) Por curiosidade, se eu não tivesse um registro das grants anteriores, como eu examinaria as grants dos usuários e descobriria o privilégio que está faltando

postgresql permissions
  • 1 respostas
  • 2912 Views
Martin Hope
ChrisJ
Asked: 2017-12-16 20:36:35 +0800 CST

Desempenho de pesquisa de Numérico vs String

  • 9

Estou trabalhando em um projeto que está usando o formato de chave do instagram .

TL;DR IDs inteiros de 64 bits.

Eles serão usados ​​para pesquisas, e também gostamos deles para classificar e agrupar, pois eles serão classificados naturalmente pelo tempo de criação.

Os valores estão entre 2^63 e 2^64, então (apenas) grande demais para caber dentro de um arquivo BIGINT.

Portanto, parece que nossas opções de armazenamento são numeric(20)ou varchar. varcharnão é tão ideal, já que teríamos que zerá-los para que a classificação funcione, mas haveria um impacto no desempenho ao usar um numérico para pesquisas?

postgresql index
  • 3 respostas
  • 4154 Views

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