Vous ne devriez pas essayer d'empêcher l'injection SQL uniquement au niveau de la base de données. Une fois qu'ils sont arrivés là-bas, ils vous ont déjà pour la plupart. Vous devez utiliser des paramètres, masquer l'entrée et supprimer les mauvais caractères déjà dans la couche ci-dessus. Des outils (Frameworks ?) comme Entity Framework suppriment automatiquement les caractères dangereux.
Utilisation de DBMS_ASSERT.ENQUOTE_NAME
se débrouille très bien ici, mais je vous recommande de le faire également dans les couches ci-dessus.
Règle générale (que vous suivez ici) :Utilisez des mécanismes de sécurité établis et éprouvés, ne les réinventez pas !
De plus, une déclaration comme
select * from users where username = 'IAm"WayUp';
est absolument légal et non dangereux.
Et comment appelez-vous la fonction/procédure dans la base de données ? Vous êtes vulnérable là-bas aussi, n'est-ce pas ?.