2013-07-19 2 views
0

Любой пользователь имеет логин/пароль в базе данных Oracle. У меня есть код:Как проверить логин и пароль от DataSource?

Connection con; 
Statement stmt = null; 
String query = "SELECT user FROM dual"; 
try { 
    dataSource = (DataSource) new InitialContext().lookup("jdbc/MyDataSource"); 
} catch (NamingException e) { 
    throw new ExceptionInInitializerError(e); 
} 
try { 
    System.out.println("name, password:" + name + "|" + password); 
    con = dataSource.getConnection(name, password); 
    stmt = con.createStatement(); 
    ResultSet rs = stmt.executeQuery(query); 
    while (rs.next()) { 
     System.out.println("User:" + rs.getString("USER")); 
    } 
    con.close(); 
    return true; 
} catch (SQLException ex) { 
    Logger.getLogger(UserInfoServiceOracle.class.getName()).log(Level.SEVERE, null, ex); 
    return false; 
} 

Если я ставлю правильный пароль, следующий пользователь может GetConnection с помощью любого логина/пароля и с логином/паролем от первого правильного пользователя.

Log:

INFO: name, password:correctUser|correctPassword 
INFO: User:correctUser 
INFO: name, password:jhkjhkjh|khkjhkj 
INFO: User:correctUser 
+0

Что происходит, если вы отправляете неверный пароль в 'dataSource.getConnection (имя, пароль)'? – Santosh

+0

Он возвратил соединение без исключения. – kotygoroshko

+0

Я не могу точно сказать, в чем проблема, потому что вы не публикуете свои полные классы. Но я думаю, причина в том, что источник данных все еще подключен, используя ваше первое имя пользователя и пароль –

ответ

2

Источником данных является фасад для connection pool.

  • Как подтверждено на сайте. Даже если вы указали неверный пароль, источник данных возвращает соединение. Это означает, что источник данных не беспокоит пароль пользователя, который вы ему поставляете.

  • Как указано другими здесь, источник данных сконфигурирован и создан сервером приложений. Сервер считывает соответствующие параметры (например, имя пользователя/пароль, начальный номер соединения, максимальное количество соединений и т. Д.) Из файла конфигурации (некоторые xml) и создает соединение (начальное соединение), которое позднее будет использоваться приложением.

  • Поэтому, когда вы звоните dataSource.getConnection, источник данных возвращается уже созданы подключения. Введенное имя пользователя/пароль не влияет.

+0

Если я установил логин/пароль на сервере приложений. Приложение игнорирует любые логин/пароль и обратное соединение. – kotygoroshko

+0

Но если я не установил логин/пароль на сервере приложений. Приложение не возвращало соединение, пока я не установил правильный логин/пароль в getConnection (имя, пароль). – kotygoroshko

+0

есть. То, как сервер приложений работает с источником данных. – Santosh

1

Ваши учетные данные базы данных связаны с DataSource. Поэтому вы всегда будете подключены к базе данных, используя учетные данные, предоставленные в DataSource.

A DataSource - управляемый ресурс, и он не предназначен для связи с другими именами пользователей.

В зависимости от вашей среды вы можете использовать сам Драйвер для создания своего собственного коннекта, но затем вы потеряете все возможности, которые DataSource предоставляет вам (например, объединение пулов).

В Connection, возвращенных DataSource, метод getConnection() является не-оператором.

+0

Почему у DataSource есть метод getConnection (имя, пароль)? – kotygoroshko

+0

Это зависит от реализации ([как описано в документации] (http://docs.oracle.com/javase/7/docs/api/javax/sql/DataSource.html)), но большинство реализаций не поддерживают журнал в базу данных. –

0

Я думаю, вы вводите в заблуждение безопасность базы данных с защитой, которую вы должны разрабатывать вокруг своего приложения.

Ваше приложение знает учетные данные в базе данных (возможно, через файл свойств) и создает источник данных. Пользователи имеют доступ к функциям вашего приложения (и, следовательно, к источнику данных), как только они аутентифицируются с вашим приложением.

+0

У меня не было файла свойств с логином/паролем. – kotygoroshko

+0

Это то, что вам нужно было бы разработать для хранения учетных данных базы данных. Стандартный подход: ваше приложение регистрируется в базе данных, пользователи регистрируются в вашем приложении. – StuPointerException

Смежные вопросы