← MySQL: desenvolvimento e operação segura
04 / 12 · 40 MIN

Integração segura e identidade efetiva

Separa valores, estrutura SQL e identidade de execução.

Conceito e mecanismo

Prepared statements permitem passar valores como dados, reduzindo risco de SQL injection quando usados corretamente. Um marcador não representa um nome arbitrário de coluna ou palavra-chave. Se a API permite escolher ordenação, mapeia essa escolha para identificadores permitidos; não concatenes entrada livre. Em MySQL, a conta inclui utilizador e host. Um teste local com o mesmo nome pode selecionar uma conta diferente da usada pela aplicação. Roles concedidas podem não estar ativas na sessão: verifica CURRENT_ROLE, defaults e privilégios efetivos. O teste relevante usa uma conexão que reproduz a identidade e configuração de runtime.

Aplicação guiada

Procedures e views podem executar com SQL SECURITY DEFINER ou INVOKER. No contexto DEFINER, migrar a definição não cria automaticamente a conta e privilégios de que depende. Num restauro fictício, a aplicação consegue ler tabelas mas uma procedure falha: verifica essa dependência antes de conceder acesso administrativo ao chamador. Para transporte, configura confiança na CA e VERIFY_IDENTITY quando o requisito inclui hostname. REQUIRED exige cifragem sem fornecer essa mesma verificação de nome. Inclui no handover a gestão das contas, rotação, configuração do cliente e testes negativos. Uma mudança de segurança precisa de demonstrar tanto acesso permitido como recusa do acesso indevido.

NA PRÁTICA

Bind do filtro e lista permitida para a coluna de ORDER BY resolvem problemas diferentes.

Armadilhas comuns

? como identificador; mesmo user como mesma conta; role concedida como ativa; dados restaurados como contexto restaurado.

Tópicos relacionados: Tipos e contratos dos dados · Consultas determinísticas e planos · Transações InnoDB e caminhos de erro

Leva esta ideia contigo

Valida a identidade e os privilégios que a aplicação usa efetivamente.

Criar conta

Referência: Parameter marker scope · MySQL 9.7 LTS with InnoDB reference semantics

MySQL® é uma marca registada da Oracle e/ou das suas afiliadas. A dr.pt é uma plataforma de preparação independente e não está afiliada, associada, patrocinada, autorizada nem aprovada por Oracle. Os conteúdos e as perguntas são originais, não são perguntas oficiais de exame, e concluir os nossos testes não atribui nem garante qualquer certificação. Os nomes são usados apenas para identificar o tema. Todas as outras marcas pertencem aos respetivos titulares.