Я использую следующий код для инициализации соединения с базой данных:
public Connection getConnection() {
try {
if (null == connection) {
String driverName = "com.mysql.jdbc.Driver"; // MySQL MM JDBC driver
Class.forName(driverName);
// Create a connection to the database
String serverName = "localhost";
String database = "database";
String url = "jdbc:mysql://" + serverName + "/" + mydatabase; // a JDBC url
String username = "username";
String password = "password";
connection = DriverManager.getConnection(url, username, password);
}
return connection;
} catch (ClassNotFoundException cnfe) {
cnfe.printStackTrace();
} catch (SQLException sqle) {
sqle.printStackTrace();
}
throw new NullPointerException("Cannot establish database connection...");
}
и я знаю, что это - плохая практика, чтобы сделать это, также я работал FindBugs
против кода, и получил проблему безопасности, говоря следующее: This code creates a database connect using a hardcoded, constant password. Anyone with access to either the source code or the compiled code can easily learn the password.
Что лучший способ состоит в том, чтобы инициализировать соединение с базой данных, не имея этого нарушения защиты?
Подавляющее большинство веб-приложений используют жестко закодированное имя пользователя/пароль для SQL-соединения. Проверка производственных учетных данных в контроле исходных текстов или предоставление интернам возможности удалить производственную базу данных обычно не одобряется. Производственные учетные данные должны быть защищены, и доступ к ним должны иметь только привилегированные сотрудники.
Обычно веб-приложения допускают утечку своих конфигурационных файлов. Например, если файл .xml хранится в webroot, то к нему можно получить удаленный доступ: http://localhost/configs/db_config.xml
.
Обычной практикой является запрет доступа к вашей базе данных (блокировка tcp-порта 3306 для mysql). Фактически это является требованием PCI-DSS. Даже если имя пользователя и пароль будут получены, это будет бесполезно.
Считайте пароль из файла свойств или LDAP или аналогичного и обеспечьте доступ к ним только для учетной записи, используемой для запуска программного обеспечения (к которой ни один из разработчиков не должен иметь доступа).
Используйте простые файлы для хранения свойств базы данных и чтения их в коде вместо жесткого кодирования. Это не только чисто, но вы также можете ограничить доступ к файлам.
Эта ссылка может вам помочь.
Вы можете сохранить пароль в файле конфигурации, а затем зашифровать файл / разделы файла с помощью DPAPI, если вы используете Windows. Таким образом, вам не придется беспокоиться и об управлении ключами.
Этот код создает соединение с базой данных с использованием жестко запрограммированного постоянного пароля. .
Эта проблема безопасности возникает из-за того, что вы использовали имя БД, имя пользователя и пароль. Но, конечно, вы не можете решить проблему " Любой, у кого есть доступ к исходному или скомпилированному коду, может легко узнать пароль ". Готов поспорить, вы сможете решить первую проблему.
Вы можете использовать Свойства, чтобы включить имя uesr и пароль вашей БД, с помощью которых вы могли бы кодировать в объект Properties, используя метод setproperty () .
Теперь вы можете включить объект свойства в метод getConnection () :
conn = DriverManager(url, properyObject);