Oracle验证方式详解


一、 身份验证

Oracle验证过程:
 
 

二、身份验证的方式
Oracle身份验证的方式通过sqlnet.ora这个文件来控制
SQLNET.ORA 文件中常用的两个参数
------------------------------------------
# 指定启动一个或多个认证服务
SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE/ALL)

# 指定CLIENT NAME解析方法的次序,默认是NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
------------------------------------------

SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE/ALL)
    NONE:作用是不允许通过 OS 系统用户登录数据库,需要提供用户名及密码;
    ALL:作用是允许所有的登录方式;
    NTS:此设置值仅用于Windows NT系统,此设置同时支持OS认证和口令文件认证,只有在设置了(NTS)值之后运行在Windows系统上的Oracle才支持OS认证。
    如果不设置此参数,对Linux系统,默认支持OS认证和口令文件认证。对Windows系统,默认只支持口令文件认证,不支持OS认证。


NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
    EZCONNECT连接方式:username/password@hostname:port/service_name  不需要通过tnsname.ora 文件解析
    TNNAMES:可以通过tnsnames.ora文件解析获得需要访问的主机、端口、dbservice 等信息。
    CONNECT username/password [@db_alias] AS [SYSOPER | SYSDBA] ;

    ORCL =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
        (CONNECT_DATA =
            (SERVER = DEDICATED)
            (SERVICE_NAME = orcl)
        )
    )


三、常见几种身份验证的登陆方式

1) 用户名/密码方式验证
在使用 SQL*Plus 时,通过口令身份验证进行连接的语法如下:

      CONNECT username / password [ @db_alias ]

      这是 Oracle 一般用户使用得最多的一种身份验证方式。在使用口令身份验证进行连接时,实例将针对在数据字典中的用户账户存储的口令。验证给定的口令。为此,数据库必须处于打开状态;
从逻辑上讲,在使用口令身份验证连接时,不可能发出 STARTUP 命令或者 SHUTDOWN 命令。不允许 SYS 用户以口令身份验证的方式进行连接,SYS 只能使用口令文件、操作系统或LDAP 身份验证。

2)操作系统验证
就是说只要用户登陆了Oracle database的server就无需其他验证可以直接登陆oracle数据库,默认远程操作系统认证是关闭的。如果访问本地的数据库的话,用户是需要被加到操作系统的相应group即可,并且在数据库中有对应使用 操作系统认证前缀的用户。
比如说,操作系统用户oracle   ==>对应数据库中如果有 ops$oracle的用户存在, 那么此时就可以通过操作系统认证登陆。 只要改用户登陆了操作系统,就无需使用用户名密码登陆数据库。
Operating System GroupUNIX User GroupWindows User Group
OSDBA     dba     ORA_DBA
OSOPER     oper     ORA_OPER
下面是操作系统认证的数据库参数
SYS@kyle>show parameter os_authent

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string      ops$
remote_os_authent                    boolean     FALSE

    默认情况下,我们只能在服务器端实现匿名登录,登录之后直接以最高权限sys的角色出现。 不添加as sysdba登录过程是不允许的。如果需要实现远程登陆则需要设置 remote_os_authent=TRUE
 Oracle的OS层面验证,最直接的关联参数就是os_authent_prefix,默认取值为ops$。这种技术是建立在操作系统用户名与数据库用户名之间的映射规则上。如果尝试连接数据库的操作系统用户名在数据库中对应有一个 添加参数os_authent_prefix作为前缀的数据库用户那么就可以实现OS验证配置。
注意:这个规则是在服务器端成立的。
比如:如果当前连接的操作系统名为oracle,os_authent_prefix为ops$,如果此时数据库中包括一个为ops$oracle的用户,是可以在服务器端进行匿名登录的。

下面进行测试,当前Linux服务器端OS用户名为oracle,也是oinstall和dba组成员。
SYS@kyle>create user ops$oracle identified by oracle;
User created.

SYS@kyle>grant connect,resource,create session to ops$oracle;
Grant succeeded.
[oracle@test admin]$ sqlplus /
SQL*Plus: Release 11.2.0.4.0 Production on Wed Apr 5 18:42:01 2017
Copyright (c) 1982, 2013, Oracle.  All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Oracle Label Security, OLAP, Data Mining,
Oracle Database Vault and Real Application Testing options

OPS$ORACLE@kyle>

当开启远程os登陆验证以后,原理是一样的,但是用户的操作系统验证不是通过oracle dbserver,而是用户自己的操作系统用户。比如说Windows 管理用户为admin ,这时只要数据库中有opt$admin用户存在,就可以通过远程os身份验证登陆而无需输入数据库用户密码。
注意,remote_os_authent  这个参数目前已被Oracle弃用


3)口令文件验证

Oracle的口令文件的作用是存放所有以sysdba或者sysoper权限连接数据库的用户的口令,如果想以sysdba权限远程连接数据库,必须使用口令文件,否则不能连上。
由于sys用户在连接数据库时必须以sysdba or sysoper方式,也就是说sys用户要想连接数据库必须使用口令文件。使用口令文件的好处是即使数据库不处于open状态,依然可以通过口令文件验证来连接数据库。开始安装完oracle,没有给普通用户授予sysdba权限,口令文件中只存放了sys的口令,如果之后把sysdba权限授予了普通用户,那么此时会把普通用户的口令从数据库中读到口令文件中保存下来,当然这时必须要求数据库处于open状态

    口令文件存放路径一般为:

        WINDOWS下:%ORACLE_HOME%\DATABASE\PWD.ora
        UNIX/LINUX 下:$ORACLE_HOME/dbsdbs/orapw
如何创建口令文件
orapwd file=orapw  password=*** entries= N


如何开启口令文件身份验证
3.1)查看哪些用户可以登陆口令文件登陆
SYS@kyle>select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
默认只有sys用户
3.2)给需要开启口令文件身份验证的用户赋予sysdba or sysoper的权限
SYS@kyle>grant sysdba to kyle;

3.3)再次查看
SYS@enmo>select * from v$pwfile_users;

USERNAME                       SYSDB SYSOP SYSAS
------------------------------ ----- ----- -----
SYS                            TRUE  TRUE  FALSE
KYLE                           TRUE  FALSE FALSE

3.4)测试用户登陆
sqlplus kyle/*** as sysdba@testdb

口令文件验证的相关参数
Remote_login_passwordfile 参数一共有三个值含义如下:
None:      不使用口令文件验证,如果不使用口令文件验证时,没有用户在ora_dba组中,那么就没有任何用户可以作为sysdba进入数据库了。Oracle数据库不允许远  程SYSDBA/SYSOPER身份登录
Exclusive: 表示实例独占使用口令文件,也就是各自实例使用单独的口令文件
Shared       表示多个实例共享一个口令文件
Shared说明
当remote_login_passwordfile=shared时候,
在$ORACLE_HOME/network/admin目录下仍然生成pwd+sid.ora文件。每个数据库实例使用自己的sys用户和对应的密码,但是不能再加入新的有sysdba权限的用户
如果remote_login_passwordfile=exclusive 而且os中有ora_dba组。那么用户如果作为ora_dba组登陆的话。仍然可以使用os的验证

4)其他方式验证
还有其他一些验证方式,由于不常用就不过度解释,比如说ldap验证。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26723566/viewspace-2137055/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/26723566/viewspace-2137055/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值