Un empoyee à mon entreprise a besoin de modifier les données d'une base de données SQL Server par le biais d'un programme que j'ai fait. Le programme utilise l'authentification Windows en premier, et j'ai demandé aux Administrateurs de bases de données pour donner à cet utilisateur l'accès en écriture à ladite base de données.
Ils n'étaient pas prêts à le faire, et ont plutôt donné l'accès en écriture à mon compte d'utilisateur Windows.
Depuis que j'ai confiance en lui, mais pas assez pour lui laisser le travail de 90 minutes avec ma session est ouverte, je vais juste ajouter une invite de connexion à mon programme, demandant un nom d'utilisateur et le mot de passe et connectez-vous à SQL Server avec elle. Je vais ouvrir une session, et la confiance de ma demande de le laisser faire ce qu'il doit.
Cela pose toutefois un petit risque pour la sécurité. Les champs de mot de passe tutoriel sur Sund'Oracle site précise que les mots de passe doivent être conservées que le temps minimum requis dans la mémoire, et, à cette fin, l' getPassword
méthode retourne un char[]
tableau que vous pouvez zéro une fois que vous avez terminé avec elle.
Cependant, Java DriverManager
classe n'accepte String
objets comme des mots de passe, donc je ne vais pas être en mesure de disposer du mot de passe dès que j'ai terminé avec elle. Et depuis mon application est d'ailleurs assez faible sur les allocations et les exigences de la mémoire, qui sait combien de temps il survivra dans la mémoire? Le programme sera exécuté pendant une période relativement longue, comme indiqué ci-dessus.
Bien sûr, je ne peux pas contrôler ce que le Serveur SQL server JDBC classes de faire avec mon mot de passe, mais j'espère que je pouvais contrôler ce que je fais avec mon mot de passe.
Est-il un moyen infaillible pour détruire/zéro une String
objet avec Java? Je sais que les deux sont des sortes de contre la langue (destruction des objets est non-déterministe, et String
des objets sont immuables), et System.gc()
est du genre imprévisible, mais encore; une idée?