Как я могу гарантировать уничтожение объекта String в Java?

Сотруднику моей компании необходимо изменить данные из базы данных SQL Server с помощью программы, которую я сделал. Сначала программа использовала аутентификацию Windows, и я попросил администраторов баз данных предоставить этому конкретному пользователю права на запись в указанную базу данных.

Они не захотели этого сделать и вместо этого предоставили доступ на запись к моей учетной записи пользователя Windows.

Поскольку я доверяю этого парня, но этого недостаточно, чтобы позволить ему поработать 90 минут с открытым сеансом, я просто добавлю в свою программу приглашение для входа в систему с запросом комбинации имени пользователя и пароля и войду с ним в SQL Server. Я войду в систему и буду доверять своему приложению, чтобы он мог делать только то, что ему нужно.

Однако это создает небольшую угрозу безопасности. В учебнике полей пароля на сайте Sun Oracle говорится, что пароли должны храниться в памяти минимальное время, необходимое для этого, и с этой целью метод getPassword возвращает массив char [] , который вы можете обнулить, когда закончите с ним.

Однако класс Java DriverManager принимает только String объекты как пароли, поэтому я не смогу избавиться от пароля, как только закончу с ним. А поскольку мое приложение, кстати, имеет довольно мало ресурсов для выделения памяти и требований к памяти, кто знает, как долго оно сохранится в памяти? Как указано выше, программа будет работать довольно долго.

Конечно, я не могу контролировать то, что классы JDBC SQL Server делают с моим паролем, но я надеялся, что смогу контролировать то, что Я делать с моим паролем.

Есть ли верный способ уничтожить / обнулить объект String с помощью Java? Я знаю, что оба они отчасти против языка (разрушение объекта недетерминировано, а объекты String неизменны), и System.gc () тоже непредсказуемы, но все же ; есть идеи?

38
задан zneak 8 March 2011 в 20:54
поделиться