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