Империя в моей компании нуждается в изменении данных из базы данных SQL Server с помощью программы, которую я сделал. Сначала программа использовала проверку подлинности Windows, и я попросил администраторов баз данных предоставить этому конкретному пользователю права на запись в указанную базу данных.
Они не хотели этого делать и вместо этого открывали доступ к моей учетной записи пользователя Windows.
Так как я доверяю парню, но недостаточно, чтобы позволить ему работать 90 минут с открытой моей сессией, я просто добавлю приглашение для входа в свою программу, попросив комбинацию имени пользователя и пароля и войду на SQL Server с ней, Я запишусь и доверяю своему приложению, чтобы он сделал только то, что ему нужно.
Это, однако, создает небольшой риск для безопасности. руководство по паролям полей поверх Sun Сайт Oracle указывает, что пароли должны содержать минимальное количество времени, требуемое в памяти, и с этой целью метод getPassword
возвращает массив char[]
, который вы можете обнулить, как только вы закончите с ним.
Однако класс Java DriverManager
принимает только те объекты String
как пароли, поэтому я не смогу избавиться от пароля, как только закончите с ним. И поскольку мое приложение, кстати, довольно слабое в распределении и требованиях к памяти, кто знает, как долго он выживет в памяти? Программа будет работать довольно долго, как указано выше.
Конечно, я не могу контролировать все классы SQL Server JDBC с моим паролем, но я надеялся, что смогу контролировать, что я делаю с моим паролем.
Есть ли верный способ уничтожить/обнулить объект String
с Java? Я знаю, что оба вида против языка (уничтожение объекта не является детерминированным, а объекты String
неизменяемы), а System.gc()
тоже непредсказуем, но все же; любая идея?