E quais seriam as formas de se proteger?

Sanitização e validação dos dados, tanto no front-end quanto no back-end é a forma mais comum de se proteger desses ataques, pois você ignora qualquer dado não esperado no momento da requisição.

Isso não é um problema do banco de dados, e sim da Query enviada á ele, portanto, você precisa filtrar o que vai ser enviado a ele, ou pelo menos, se certificar de que o valor bruto da String não tá sendo enviado diretamente para a Query de execução.

ORM's atuais já tem proteção contra isso, mas se você estiver usando PHP, recomendo ler um pouco sobre.

https://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php