Java 如何从数据源检查登录名和密码?
任何用户在Oracle数据库中都具有登录名/密码。 我有一个密码:Java 如何从数据源检查登录名和密码?,java,oracle,login,passwords,datasource,Java,Oracle,Login,Passwords,Datasource,任何用户在Oracle数据库中都具有登录名/密码。 我有一个密码: Connection con; Statement stmt = null; String query = "SELECT user FROM dual"; try { dataSource = (DataSource) new InitialContext().lookup("jdbc/MyDataSource"); } catch (NamingException e) { throw new Excepti
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;
}
若我输入了正确的密码,那个么下一个用户可以使用任何登录名/密码以及第一个正确用户的登录名/密码来获取连接
日志:
您的数据库凭据已绑定到
数据源
。因此,您将始终使用提供给数据源的凭据连接到数据库
DataSource
是一个托管资源,不打算与其他用户名连接
根据您的环境,您可以使用驱动程序本身创建自己的连接,但这样您将失去数据源
为您提供的所有可能性(例如连接池)
在由数据源返回的连接中
方法getConnection()
是禁止操作的。您的数据库凭据绑定到数据源
。因此,您将始终使用提供给数据源的凭据连接到数据库
DataSource
是一个托管资源,不打算与其他用户名连接
根据您的环境,您可以使用驱动程序本身创建自己的连接,但这样您将失去数据源
为您提供的所有可能性(例如连接池)
在由数据源返回的连接中,方法getConnection()
是不可操作的。我认为您混淆了数据库的安全性和您应该围绕应用程序设计的安全性
应用程序知道数据库的凭据(可能通过属性文件),并构建数据源。一旦用户使用您的应用程序对自己进行了身份验证,他们就可以访问您的应用程序的功能(从而访问数据源)。我认为您混淆了数据库的安全性和您应该围绕应用程序设计的安全性
应用程序知道数据库的凭据(可能通过属性文件),并构建数据源。一旦用户使用您的应用程序对自己进行了身份验证,他们就可以访问您的应用程序(从而访问数据源)的功能。数据源是应用程序的外观
- 如你所确认。即使您提供了错误的密码,数据源也会返回连接。这意味着datasource不关心您提供给它的用户名密码
- 正如这里其他人所指出的,数据源是由应用服务器配置和创建的。服务器从配置文件(一些xml)中读取适当的参数(如用户名/密码、初始连接数、最大连接数等),并创建连接(初始连接数),供应用程序稍后使用
- 因此,当您调用
dataSource.getConnection
时,数据源将返回已创建的连接。提供的用户名/密码无效
数据源是数据源的外观
- 如你所确认。即使您提供了错误的密码,数据源也会返回连接。这意味着datasource不关心您提供给它的用户名密码
- 正如这里其他人所指出的,数据源是由应用服务器配置和创建的。服务器从配置文件(一些xml)中读取适当的参数(如用户名/密码、初始连接数、最大连接数等),并创建连接(初始连接数),供应用程序稍后使用
- 因此,当您调用
dataSource.getConnection
时,数据源将返回已创建的连接。提供的用户名/密码无效
如果您在dataSource.getConnection(名称、密码)
中提供了错误的密码,会发生什么情况?它返回了连接,没有异常。我无法确定您的问题是什么,因为您没有发布完整的类。但我猜原因是因为数据源仍然使用您的第一个用户名和password@kotygoroshko,我怀疑。检查我的答案。我已经解释过这种行为。如何断开数据源或清除登录/密码?如果您在数据源.getConnection(name,password)
中提供了不正确的密码,会发生什么情况?它返回的连接没有异常。我无法确定您的问题是什么,因为您没有发布完整的类。但我猜原因是因为数据源仍然使用您的第一个用户名和password@kotygoroshko,我怀疑。检查我的答案。我已经解释过这种行为。如何断开数据源连接或清除登录名/密码?我没有任何包含登录名/密码的属性文件。这是您需要自行开发以保存数据库凭据的内容。标准方法是:你的应用程序登录到数据库,用户登录到你的应用程序。我没有任何带有登录名/密码的属性文件。这是你需要自己开发才能保存数据库凭据的东西。标准方法是:应用程序登录到数据库,用户登录到应用程序。为什么DataSource具有getConnection(名称、密码)方法?这取决于实现()但大多数实现不支持登录到数据库。为什么DataSource具有getConnection(名称、密码)方法?取决于实现()但是大多数实现不支持登录数据库。如果我在应用服务器中设置登录/密码,应用程序将忽略任何登录/密码并返回连接。但是如果我没有在应用服务器中设置登录/密码。在我在getC中设置了正确的登录名/密码之前,应用程序没有返回连接
INFO: name, password:correctUser|correctPassword
INFO: User:correctUser
INFO: name, password:jhkjhkjh|khkjhkj
INFO: User:correctUser