记一次错误排查记录(JDBC使用SYSDBA身份连接ORACLE/修改ORACLE用户密码)
环境版本:
数据库:ORACLE 11g xe (Release 11.2.0.2.0 Production)
JDK: 1.8.0_31
编译器:Eclipse Jee 2019-06
JDBC: 11.2.0.4 release of the Oracle JDBC
需要在登录的用户名后加上字符串"as SYSDBA"
public static String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
public static String URL = "jdbc:oracle:thin:@localhost:1521:XE";
public static String USERNAME = "system as SYSDBA";
public static String PASSWORD = "root";
然后进行调用即可:
public static Connection getConnection() {
Connection connection = null;
try {
Class.forName(DRIVER_NAME);
connection = DriverManager.getConnection(URL,USERNAME,PASSWORD);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return connection;
}
=======================================================================
接下来是排查记录:
用户编译器使用 public static String USERNAME = "system as SYSDBA";
与public static String USERNAME = "system";均不可登录
然而反应之前使用SYSDBA身份登录system账号,密码为manager可成功登录。
于是便想到SYSDBA身份登录,即使密码错误也能登录成功。
存在用户记错数据库用户密码的情况。
于是通过SYSDBA身份登录PLSQL,在命令行模式修改密码,语句为:
alter user system identified by manager;
此时再使用 public static String USERNAME = "system as SYSDBA"; 进行JDBC连接 即可连接成功。
附 sys与system用户区别:
system是数据库内置的一个普通管理员,你手工创建的任何用户在被授予dba角色后都跟这个用户差不多。
sys用数据库的超级用户,数据库内很多重要的东西(数据字典表、内置包、静态数据字典视图等)都属于这个用户,sys用户必须以sysdba身份登录。
system用户以sysdba身份登录时就是sys,准确地说,任何用户以sysdba身份登录时都是sys,这一点,你登陆后执行show user可以验证。
以后有空更thin与oci连接。