Pergunta

Quero criar uma caixa de areia SQL que permitirá que os usuários executem arbitrários SELECT Consultas em um banco de dados PostGIS. Essencialmente, quero permitir que os usuários tenham acesso a psql Brincar com.

Obviamente, este é um desastre de segurança se o acesso à gravação for permitido. Como posso criar um sistema de tal forma que os dados de consulta sejam permitidos, mas não há possibilidade razoável de um usuário:

  1. Comprometendo os dados no banco de dados
  2. Ganhando acesso mais amplo ao servidor
  3. Alienando o sistema com uma consulta como SELECT * from long_table, long_table, long_table, long_table, long_table, long_table, long_table Isso levará uma vida útil para executar

Por favor, seja o mais específico possível em sua resposta.

Foi útil?

Solução

Os problemas 1 e 2 são tratados por meio de subsídios explícitos e revogações de permissões, como outros observaram.

Quanto ao #3,

ALTER ROLE <rolename> SET statement_timeout = '60000'

sempre funcionou bem para mim. Isso termina qualquer consulta que seja executada por mais de 1 minuto (60000 ms). Descobrimos isso depois de ter algumas consultas escritas por usuário em phppgadmin causam problemas ...

Outras dicas

Bem, você realmente precisa Criar um papel e depois Concessão de acesso somente leitura explicitamente para as coisas que você deseja permitir. Qualquer coisa que você não conceda, eles não podem fazer (desde que não sejam um superusuário).

Se você concedeu acesso readonly e não é um superusuário, eles não devem obter acesso ao sistema subjacente. Isso não quer dizer que você não deve instalar o Postgres como um usuário sem privilégios, você deve - simplesmente que não deve ser necessário realizar o que você listou.

Ok, você editou sua postagem para incluir a emissão de consultas loucas. Atualmente, não acredito que o Postgres tenha uma maneira de limitar os recursos de consulta por usuário.

Você pode instalar o Postgres como um usuário sem privilégios e executá -lo dessa maneira. Dessa forma, você aproveita as permissões do sistema existente para restringir o que as pessoas podem fazer com o banco de dados, incluindo o isolamento de seu acesso apenas ao seu próprio banco de dados. Veja as instruções na parte inferior desta página:

http://www.postgresql.org/docs/current/interactive/tutorial-start.html

Se você automatizar parte disso, digamos às pessoas um comando 'Configurar Postgres' para executar, pronto.

Para #3, você poderia escrever algum código que monitora a atividade de consultas e matasse essas consultas que você considera louco com base em alguns critérios usando as visualizações do sistema no pós -grero?

#3 não pode ser evitado quando o usuário pode executar seu próprio pedaço de SQL. Você precisa de um aplicativo (pequeno) que execute o SQL predefinido. Nem mesmo o View's pode ajudá -lo aqui, todo mundo pode participar de algumas visualizações para prejudicar seu sistema.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top