最近受疫情影响,所以一直是远程办公,所以在家无法直接连接公司的数据库,于是自己需要本地创建数据库。创建完数据库后,在运行项目时,一直报错,错误大致的描述就是连接出错,无法连接数据源之类的;
因为一直用的是Navicat premium这个工具,之前偶尔也用PLSQL/Developer,在创建项目中需要使用的三个库(三个用户)使用的是Navicat;当时没有注意创建用户时的一些问题,导致项目连接不上数据库。其实问题还是因为Navicat中创建用户时大小写的规则问题。现在做一下总结。
1、使用Navicat创建Oracle数据库用户时,用户名用小写或者大写,在用户视图界面都会自动转换成大写,接下来演示一下:
使用查询窗口创建一个用户ttsp,然后刷新数据库:
可以看到左侧的数据实例直接转换成大写的TTSP
然后再删除用户ttsp,刷新用户
然后再用大写的创建一个用户TTSP,授予dba权限
看到用户是大写,小写的创建用户也是大写;
接下来创建一个用户,使用双引号
可以看到左边看到的用户名确实是小写的ttsp,注意了坑就在这里,如果你只是看到这个地方显示的是ttsp,然后你在项目中数据源配置文件中,使用ttsp为用户名,就会报错;(可以看到我左边建立了一个manager用户和MANAGER用户,对,这个是项目中用到的,manager用户就是用的这种方式创建的,但是自己忘记了,年前创建过一次);
为了演示manage用户连接出错,先把MANAGER用户删除
注意用户下有数据表时,删除语句要加上cascade;不然会报错的,之前演示的没有加cascade,是因为是一个空用户。
现在只剩manager用户了(使用的是create user "manager" identified by "manager");
现在切换到项目的配置文件中,启动项目
然后在浏览器中访问项目:
可以看到直接在配置文件中配置manager用户,密码是manage,项目启动会报错:无效的用户名/密码,登录被拒绝;所以这样直接查看Navicat的视图页面中用户配置数据源会出错!
接下来用PLSQL/Developer验证一下:
也会提示这个错误
但是如果用"manager"/"manager"来登录就可以登录成功
接下来再Navicat中重新创建MANAGER用户(因为刚才为了排除干扰MANAGER用户给删除了);
传输完成之后,MANAGER用户下就有数据了
然后删除"manager"用户,也是为了排除干扰(注意删除用户前需要先断开用户的连接)
没了"manager"用户,然后在项目中修改数据源配置
可以看到修改配置后,启动项目虽然有错,但是没有报用户名及密码无效的错误;然后再到浏览器中访问项目:
可以正常进入主页了!
有趣的是,在项目中把数据源配置改一下,把用户名和密码改成小写manager,发现照样可以连接
照样可以访问,此时配置的manager用户其实就是MANAGER用户(相当于没有区分大小写),用PLSQL/Developer测试也是一样。(注意我用的Oracle10g,所以用户名和密码默认不区分大小写,Oracle11g及以后是区分大小写的,可以通过设置alter system set sec_case_sensitive_logon=false来不区分大小写);所以创建用户的时候直接创建大写的即可,最好不用带双引号去创建用户。