Oracle 11g jdbc连接sysdba用户

秋刀鱼的滋味901 2020-06-01 11:29:31
通过jdbc连接Oracle11g,使用dba用户连接是正常的,
但是若使用sysdba用户连接,如果用户名不含有引号也是可以的,如TEST、TEST!@#这些用户都是可以连接的,但是使用"testuser"这样的连接就会失败,报错ORA-01017:invalid username/password,有没有大神知道怎么回事?

Properties pro = new Properties();
pro.put("user", "\"test!@\"");
pro.put("password", "\"ab!@\"");
pro.put("internal_logon", "sysdba");
pro.put("prelim_auth", "true");
connect = driver.connect("jdbc:oracle:thin:@10.121.66.138:1521:ora11", pro)
...全文
562 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
引用 21 楼 qq_41257062 的回复:
[quote=引用 楼主 秋刀鱼的滋味901 的回复:]
通过jdbc连接Oracle11g,使用dba用户连接是正常的,
但是若使用sysdba用户连接,如果用户名不含有引号也是可以的,如TEST、TEST!@#这些用户都是可以连接的,但是使用"testuser"这样的连接就会失败,报错ORA-01017:invalid username/password,有没有大神知道怎么回事?

Properties pro = new Properties();
pro.put("user", "\"test!@\"");
pro.put("password", "\"ab!@\"");
pro.put("internal_logon", "sysdba");
pro.put("prelim_auth", "true");
connect = driver.connect("jdbc:oracle:thin:@10.121.66.138:1521:ora11", pro)
我也遇到了这样的问题,请问楼主解决了吗[/quote]
版本bug
  • 打赏
  • 举报
回复
确认了,应该是版本bug。
重新安装了11.2.0.4版本,新建小写用户,赋予sysdba权限,jdbc连接是正常的。谢谢楼上的支持。
qq_41257062 2020-06-03
  • 打赏
  • 举报
回复
引用 楼主 秋刀鱼的滋味901 的回复:
通过jdbc连接Oracle11g,使用dba用户连接是正常的, 但是若使用sysdba用户连接,如果用户名不含有引号也是可以的,如TEST、TEST!@#这些用户都是可以连接的,但是使用"testuser"这样的连接就会失败,报错ORA-01017:invalid username/password,有没有大神知道怎么回事?

Properties pro = new Properties();
pro.put("user", "\"test!@\"");
pro.put("password", "\"ab!@\"");
pro.put("internal_logon", "sysdba");
pro.put("prelim_auth", "true");
connect = driver.connect("jdbc:oracle:thin:@10.121.66.138:1521:ora11", pro)
我也遇到了这样的问题,请问楼主解决了吗
  • 打赏
  • 举报
回复
引用 17 楼 js14982 的回复:
哦看茬了。。。

使用sqlplus '"abc"/123'@ORCL11G as sysdba 就要走监听来解析tnsname,不算本机操作系统认证了。

是的,现在11g小写就是sqlplus连不上,12cCDB的能连上,但是alter session报错没有权限,不加引号生成的大写用户,都没有问题。
js14982 2020-06-02
  • 打赏
  • 举报
回复
哦看茬了。。。 使用sqlplus '"abc"/123'@ORCL11G as sysdba 就要走监听来解析tnsname,不算本机操作系统认证了。
js14982 2020-06-02
  • 打赏
  • 举报
回复
引用 14 楼 秋刀鱼的滋味901 的回复:
知道怎么回事了,应该是Oracle11g和12c自身的bug导致的。 对于11g,开始我以为sqlplus 可以连过去,后来发现不使用@的时候,任意输入用户名密码都可以连接,使用sqlplus dsdsds/sddsdds as sysdba都是可以连接的,但是使用 sqlplus '"abc"/123'@ORCL11G as sysdba这样正确连接发现,小写的用户是连接不了的,应该是11g自身bug导致的,不是jdbc连接不过来; 对于12cCDB也是同样的,小写用户赋予sysdba权限,可以连接,但是alter session是失败的,不是jdbc连接不了。
sqlplus dsdsds/sddsdds as sysdba这个是操作系统认证,一般我们是把用户密码省略写成sqlplus / as sysdba,但是你用户密码随便填写的话,也是不看用户密码,直接默认用sys连接,就是说你这里的用户密码都是无效输入,默认sys连接的,这个也不能算是bug吧,oracle操作系统认证就是这个样子的
  • 打赏
  • 举报
回复
引用 12 楼 js14982 的回复:
[quote=引用 11 楼 m0_47044577 的回复:]

就是你这个用户"testuser",没有起作用啊,你用2种方式连接到的都是TESTUSER用户啊。
你删了"testuser"用户,还是可以连接不就说明是这样的情况了嘛[/quote]
多谢了,应该是版本自身问题导致的,sqlplus连接就出现问题了,昨天我sqlplus连的方式不对,让我误以为sqlplus可以正常连接。
  • 打赏
  • 举报
回复
知道怎么回事了,应该是Oracle11g和12c自身的bug导致的。
对于11g,开始我以为sqlplus 可以连过去,后来发现不使用@的时候,任意输入用户名密码都可以连接,使用sqlplus dsdsds/sddsdds as sysdba都是可以连接的,但是使用 sqlplus '"abc"/123'@ORCL11G as sysdba这样正确连接发现,小写的用户是连接不了的,应该是11g自身bug导致的,不是jdbc连接不过来;
对于12cCDB也是同样的,小写用户赋予sysdba权限,可以连接,但是alter session是失败的,不是jdbc连接不了。
js14982 2020-06-02
  • 打赏
  • 举报
回复
你删了"testuser"用户,再用"testuser"用户连试试能连不
js14982 2020-06-02
  • 打赏
  • 举报
回复
引用 11 楼 m0_47044577 的回复:
就是你这个用户"testuser",没有起作用啊,你用2种方式连接到的都是TESTUSER用户啊。 你删了"testuser"用户,还是可以连接不就说明是这样的情况了嘛
m0_47044577 2020-06-01
  • 打赏
  • 举报
回复
引用 10 楼 js14982 的回复:
[quote=引用 9 楼 m0_47044577 的回复:] 我认为可能是设置权限什么的导致了c##testuser用户部分功能不可用的情况,如果我再新建一个C##TESTUSRE用户,也赋予sysdba权限,那么"c##testuser"权限也能正常使用了;11g里面也是,新建“testuser”用户jdbc连接会失败,但是再新建一个TESTUSER用户,赋予sysdba权限,使用jdbc连接TESTUSER和"testuser"都是可以的
那不就是没有识别双引号下的"testuser"用户,你加没加引号,实际都是用的TESTUSER连接的?[/quote] 还真不是,我测试都是加了引号的,对于11g,如果创建了TESTUSER和testuser两个用户,而且都赋权sysdba,那么连接"testuser" "TESTUSER"都是可以的,但是删除"testuser",连接"TESTUSER"仍然是可以的,若删除"TESTUSER"用户,那么连接"testuser"是失败的;给人的感觉是jdbc连接"testuser"用户,必须有一个"TESTUSER"用户拥有sysdba权限,反过来不需要(俩大小写用户的密码必须一致)。 对于12cCDB版本,我发现jdbc连接是可以的,但是执行alter session set container用户"c##testuser"会报错,但是"C##TESTUSR"是正常的,如果俩用户都存在,那么"c##testuser"执行alter也是可以的(俩用户密码可以不一致)。 不知道是不是oracle本身的bug,ojdbc我换版本,也是一样的效果。
js14982 2020-06-01
  • 打赏
  • 举报
回复
引用 9 楼 m0_47044577 的回复:
我认为可能是设置权限什么的导致了c##testuser用户部分功能不可用的情况,如果我再新建一个C##TESTUSRE用户,也赋予sysdba权限,那么"c##testuser"权限也能正常使用了;11g里面也是,新建“testuser”用户jdbc连接会失败,但是再新建一个TESTUSER用户,赋予sysdba权限,使用jdbc连接TESTUSER和"testuser"都是可以的
那不就是没有识别双引号下的"testuser"用户,你加没加引号,实际都是用的TESTUSER连接的?
m0_47044577 2020-06-01
  • 打赏
  • 举报
回复
我认为可能是设置权限什么的导致了c##testuser用户部分功能不可用的情况,如果我再新建一个C##TESTUSRE用户,也赋予sysdba权限,那么"c##testuser"权限也能正常使用了;11g里面也是,新建“testuser”用户jdbc连接会失败,但是再新建一个TESTUSER用户,赋予sysdba权限,使用jdbc连接TESTUSER和"testuser"都是可以的
m0_47044577 2020-06-01
  • 打赏
  • 举报
回复
引用 7 楼 js14982 的回复:
11.2.0.1.0属于一个测试版本,出现一些不能解释的bug也很正常 [quote=引用 5 楼 m0_47044577 的回复:] [quote=引用 4 楼 js14982 的回复:] 数据库是什么版本?小版本
11g,11.2.0.1.0 我用12c 12.2.0.1传统版(未安装cdb)的,创建"testuser",grant sysdba权限,jdbc连接是可以的 [/quote][/quote] 多谢,不过我12c那个,一个安装了cdb,另一个未安装,未安装的jdbc连接是可以的,但是安装cdb的jdbc连接测试也是不行的
js14982 2020-06-01
  • 打赏
  • 举报
回复
11.2.0.1.0属于一个测试版本,出现一些不能解释的bug也很正常
引用 5 楼 m0_47044577 的回复:
[quote=引用 4 楼 js14982 的回复:] 数据库是什么版本?小版本
11g,11.2.0.1.0 我用12c 12.2.0.1传统版(未安装cdb)的,创建"testuser",grant sysdba权限,jdbc连接是可以的 [/quote]
m0_47044577 2020-06-01
  • 打赏
  • 举报
回复
引用 4 楼 js14982 的回复:
数据库是什么版本?小版本
用12c 12.2.0.1 CDB版本,新建用户"c##testuser",grant sysdba to "c##testuser" container=all;通过jdbc连接也是失败的
m0_47044577 2020-06-01
  • 打赏
  • 举报
回复
引用 4 楼 js14982 的回复:
数据库是什么版本?小版本
11g,11.2.0.1.0 我用12c 12.2.0.1传统版(未安装cdb)的,创建"testuser",grant sysdba权限,jdbc连接是可以的
js14982 2020-06-01
  • 打赏
  • 举报
回复
数据库是什么版本?小版本
  • 打赏
  • 举报
回复
引用 2 楼 js14982 的回复:
用双引号的用户名密码会区分大小写。不用双引号默认是大写,你小写也会隐式转换成大写。你试试是不是这个原因


是的,我加引号就是为了新建小写的用户,比如"testuser",如果不加引号,会生成TESTUSER用户,使用TESTUSER通过jdbc连接sysdba是可以的,但是连接"testuser"用户会报错,如果不给用户sysdba权限,而是给用户dba、connect、resource权限,jdbc连接也是可以的,不知道是不是sysdba设置了大小写敏感还是什么导致的
js14982 2020-06-01
  • 打赏
  • 举报
回复
用双引号的用户名密码会区分大小写。不用双引号默认是大写,你小写也会隐式转换成大写。你试试是不是这个原因
加载更多回复(1)

17,086

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧