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 / 56934
Accepted
Antoine Pinsard
Antoine Pinsard
Asked: 2014-01-17 10:31:20 +0800 CST2014-01-17 10:31:20 +0800 CST 2014-01-17 10:31:20 +0800 CST

Qual é a melhor maneira de armazenar muitos dados criptografados pelo usuário?

  • 772

Estou prestes a desenvolver um aplicativo que armazenará principalmente dados criptografados pelo usuário. Cada pedaço de dados sendo criptografado graças a uma chave AES, criptografada com a chave RSA pública de cada usuário concedido.

Dado que o volume de dados não criptografados é insignificante (provavelmente apenas login de usuários, algumas datas e chaves estrangeiras), me pergunto se "DBMS padrão", como PostgreSQL ou MySQL, seria uma boa escolha.

De fato, esses SGBDs são otimizados para lidar com diferentes tipos de dados (texto, inteiros, datas, ...), índices, cálculos de processos, agregações e assim por diante.

No meu caso, a grande maioria dos dados que armazenarei seriam grandes blocos de texto (ou talvez dados binários). E a maior parte do cálculo necessário será processada no lado do cliente, após a descriptografia.

Portanto, também não poderei analisar meus dados. Portanto, mesmo que eu tivesse um banco de dados enorme, ele não seria qualificado como "Big data". No entanto, eu me pergunto se MongoDb, MemSQL ou qualquer outro não seria uma escolha mais precisa. E se não, qual seria o melhor SGBD e a melhor forma de utilizá-lo para o meu propósito?

Em outras palavras, acho que cada DBMS tem que fazer sacrifícios para ser mais eficiente nos recursos mais importantes. Também acho que o caso detalhado acima não é tão casual assim. Portanto, presumo que haja muitos recursos de que não preciso (ou não posso usar, como a pesquisa FULLTEXT, por exemplo). Por outro lado, posso precisar de recursos que são descartados pelo "DBMS padrão".

encryption dbms
  • 3 3 respostas
  • 3173 Views

3 respostas

  • Voted
  1. Best Answer
    Thomas Kejser
    2014-01-20T01:35:16+08:002014-01-20T01:35:16+08:00

    Como regra geral: se seus dados são bem estruturados, bem conhecidos (com antecedência) e de tamanho limitado por entrada (sem mega BLOBs), os bancos de dados relacionais são realmente bons para armazená-los. Mesmo que você não use os recursos avançados de indexação.

    Gerenciar espaço, especialmente espaço vazio em arquivos de dados, é um problema muito difícil de resolver. Os bancos de dados relacionais lidam com isso há mais de 20 anos - e vale a pena usá-los só para isso. Além disso, os bancos de dados relacionais oferecem os benefícios de um longo histórico de ajuste de desempenho. Eles executam código nativo altamente otimizado para que você não tenha que lutar com implementações Java ruins, pilhas de rede ruins, uso excessivo de memcpy, coleta de lixo, bloqueio grosseiro e todas as outras patologias que novos produtos (especialmente o material noSQL) tendem a ter.

    Para armazenar dados criptografados, use os tipos de dados BINARY. MSSQL, MySQL e Postgres suportam esses tipos. Você pode não querer fazer operações diretamente nesses tipos (embora você POSSA fazer manipulação binária se quiser). Observe também que é relativamente fácil implementar a criptografia/descriptografia no próprio banco de dados, pois todas as bibliotecas de criptografia acima suportam. Você também se beneficiará da indexação nas colunas chave/estrangeira para que possa encontrar seus dados rapidamente. Um banco de dados relacional é um excelente armazenamento de chave/valor para tipos de valores pequenos - o SQL Server fornecerá facilmente mais de 1-10 milhões de pesquisas de chave/valor/s, mesmo em uma caixa pequena - espero que MySQL e PostGres forneçam resultados no mesmo estádio.

    Também é fácil encontrar programadores que possam consultar um banco de dados relacional com eficiência. O SQL existe há muito tempo e é uma linguagem extraordinariamente poderosa. O MSSQL oferece até execução paralela automatizada. Alguns programadores não vão "pegar" - mas se não entenderem, é provável que também não groquem paralelismo ou expressões lambda (duas habilidades cruciais de um codificador moderno).

    Além de tudo isso, você também obtém poderosas ferramentas de backup e monitoramento para todos os bancos de dados relacionais padrão.

    Então, basicamente, a menos que você tenha um motivo REALMENTE bom para usar NoSQL - apenas use bancos de dados relacionais.

    • 7
  2. Mordechai
    2014-01-20T10:51:20+08:002014-01-20T10:51:20+08:00

    Não há informações suficientes na questão para tomar uma decisão informada, mas aqui estão alguns pontos básicos. Se você quiser mais detalhes, explique mais sobre como os dados serão consultados e quão grandes devem crescer, e quão grandes devem ser os segmentos criptografados e assim por diante.

    Portanto, em geral - independentemente do que mais for decidido, eu colocaria os "dados de controle" (login dos usuários, algumas datas etc.) em um RDBMS de sua escolha. No que diz respeito ao resto dos dados, há algumas considerações:

    como as informações criptografadas serão recuperadas? Você vai procurar strings binárias? tem alguns metadados que ajudarão a localizar o valor certo? pares chave-valor?

    Se o acesso for por pesquisa de chave, um Berkley DB ou Mongo com algum tipo de cache local (como memcache) seria mais do que adequado.
    Se uma pesquisa bem-sucedida exigir mais "pensamento", um armazenamento relacional pode ser necessário para suportar a lógica de pesquisa.

    • 1
  3. ddaniel
    2014-01-19T11:46:04+08:002014-01-19T11:46:04+08:00

    Não é aconselhável usar um DBMS que esteja apontando para um arquivo (como o Mongo faz) para armazenar texto, pelo menos não para texto do seu tamanho. Cada vez que você deseja acessar uma única string, significa E/S, e todos nós sabemos o que isso faz com o desempenho. Então, de fato, você deve se ater ao MySQL ou mesmo ao SQL Server (se puder pagar por isso).

    Principalmente porque cada um deles possui um datatype especializado para este tipo de dados: TEXT. Já ouvi muitas vezes que TEXT é adequado para armazenar apenas texto, como alternativa a VARCHAR ou mesmo VARCHAR(MAX). Isto está errado. O tipo de dados TEXT é tratado de forma diferente pelo mecanismo de banco de dados e, é claro, otimizado para situações como a sua.

    Além disso, se as linhas em sua tabela não forem acessadas inteiramente, ie. as outras colunas são consultadas com frequência, MAS a sua TEXT (não tipo de consulta "SELECT *"), você deve considerar converter a tabela em 1NF e referenciar as enormes colunas TEXT somente quando necessário.

    MAS, se você decidir manter todos os dados em uma única tabela, um índice é obrigatório. A última coisa que você deseja é uma verificação completa, que preencherá seu cache de buffer rapidamente.

    • 0

relate perguntas

  • Quando preciso fazer backup da Chave Mestra de Serviço?

  • Implementando uma tabela criptografada no SQL Azure

  • Criptografia do Microsoft SQL Server 2008 em várias versões de banco de dados

  • Criptografia Cassandra em repouso

  • MySQL: Como o AES_ENCRYPT transforma a senha em uma chave?

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