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