为什么suse root用户连接oracle作为OPS $ DAEMON而不是OPS $ ROOT

时间:2017-10-16 02:35:24

标签: oracle

我尝试使用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,为什么?

1 个答案:

答案 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上的一个特例。