我尝试使用os auth root用户,但即使我创建了一个外部识别的oracle数据库用户ops$root
,我仍然会收到登录失败错误。所以我audit session whenever not successful
,当我运行ops$daemon
SELECT * FROM sys.aud$ WHERE returncode=1017;
用户连接
运行create user ops$daemon identified externally
后,我成功连接为os用户root
,为什么?
答案 0 :(得分:1)
СontactOracle支持站点。 Oracle N o t e:9 1 2 6 0.1 - UNIX:CONNECT / as Root因ORA-01017失败而成功与其他用户合作
sql * net驱动程序会将'root'用户转换为'daemon',因为出于安全原因,代码明确禁止在root id下运行shadow进程。
[root@db-01 ~]#strace -fo /tmp/sqlplus.out sqlplus /
SQL*Plus: Release 11.2.0.3.0 Production on Tue Oct 17 11:21:28 2017
Copyright (c) 1982, 2011, Oracle. All rights reserved.
[root@db-01 ~]# grep setuid /tmp/sqlplus.out
18432 setuid(2) = 0
18433 setuid(2) = 0
18434 setuid(2) = 0
[root@db-01 ~]# grep getuid /tmp/sqlplus.out
18431 getuid() = 0
18431 getuid() = 0
18431 getuid() = 0
18431 getuid() = 0
18431 getuid() = 0
18432 getuid() = 2
18432 getuid() = 2
18431 getuid() = 0
18433 getuid() = 2
18433 getuid() = 2
18431 getuid() = 0
18434 getuid() = 2
18434 getuid() = 2
前5个函数getuid()调用返回“0”,但最后一个调用返回“2”。 “2”是“守护进程”用户的id。
[root@db-01 ~]# grep daemon /etc/passwd
daemon:x:2:2:daemon:/sbin:/sbin/nologin
haldaemon:x:68:68:HAL daemon:/:/sbin/nologin
[root@db-01 ~]# id daemon
uid=2(daemon) gid=2(daemon) groups=2(daemon),1(bin),4(adm),7(lp)
在最后一次getuid()函数调用之后的某个时候应该看到实际的Oracle错误。因为使用os身份验证以root身份登录到sqlplus时,getuid()函数的返回值会更改,所以会返回ORA-1017错误。
这不是Oracle错误:root用户是UNIX / Linux上的一个特例。