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.
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
Valida a identidade e os privilégios que a aplicação usa efetivamente.
Referência: Parameter marker scope · MySQL 9.7 LTS with InnoDB reference semantics