oracle的体系结构之网络配置和登录验证(四)

4.网络配置

oracle分为服务器和客户端,本文主要说一下客户端。

Oracle 客户端连接到数据库依赖于Oracle Net。
(1)什么是Oracle net
Oracle Net 用于客户端和服务器之间创建一个连接会话,并负责维护该会话。
Oracle Net 在客户端作为应用程序的一个后台进程组件,而在服务器端则包含称为侦听器的活动进程,负责客户端和服务器之间的交互。
Oracle Net 同时也支持异构数据库的连接,如连接到Sybase,Informix,DB2,SQL Server等。

通常基于下列配置来实现
网络配置(网络必须是联通的)
节点所在的位置(IP/Hostname)
应用程序
所使用的协议(TCP/IP、/TCP/IP with SSL、SDP、Named Pipes)

Oracle Net支持的连接类型
客户端-服务器模式(如SQLPlus)
Java 应用程序(JDBC等)
Web 客户端应用程序
使用基于Web的应用程序(App Server)作为中间件来实现,可以配置JDBC Oracle Call Interface (OCI) driver 或thin JDBC driver
通过HTTP直接连接到Oracle 服务器,如OEM

Oracle Net实现机制
用户发出连接请求实现与用户进程进行交互
用户进程通过Oracle Net 来与服务器进程交互
服务器进程则与实例进行交互(由Oracle Net维护)
实例通过后台进程交互来完成数据库的读写操作

Oracle Net 连接方式
本地客户端连接的数据库(即客户端与数据库位于同一台服务器)。
本地连接同样使用到了Oracle Net,因为任何与数据的交互都通过Oracle Net来完成。
不需要使用到Listener,因为本地连接使用的是IPC协议,而IPC协议允许主机内进程间相互通信,由操作系统提供。
本地连接不需要进行任何配置,且本地服务器上可以运行若干个实例。
本地连接是唯一一个不需要侦听器的连接类型。

连接方法:CONNECT username/password
所有非本地客户端连接到数据库
服务器端启用Listener进程
客户端通过TNSNAME或Easy connect或LDAP等名称解析方式来解析连接字符串
一旦连接成功,即是Listener服务停止,不影响该会话。

执行如下的命令来建立连接:
SQL> CONNECT username/password@net_service_name
连接字符串(connect string):username/password@net_service_name
包含了用户名、密码、连接标识符

如:SQL> conn scott/tiger@orcl
字符串分解
用户名scott
密码为tiger
"/" 用于分割用户与密码
"@" 指示网络连接所需的用户进程
orcl 连接标识符
客户端如何解析这个连接标示符 继续向下看

(2服务端Listener(监听器)
运行于服务器端,用于侦听所有来自客户端的连接请求,并提供处理数据库服务方面的请求
Net Manager和Net Configuration Assistant都可以配置。
配置挺简单,我一般用Net Manager,配置好监听位置,数据库服务一般不用管,PMON会自动将服务信息注册到监听器。
下面看下监听器的配置文件 位置:$ORACLE_HOME/network/admin/listerer.ora
image
可以看到我这里配置了一个名为“LISTENER”的监听器,监听位置有两个,一个是TCP协议 端口1521,另一个是IPC协议,键是“EXTPROC1521”。
用lsnrctl工具查看监听器状态
image

可以看到有两个服务,这都是由PMON。进程自动注册的。
如果静态注册监听服务的话可以加上如下配置

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = F:appVisitorsproduct11.2.0dbhome_1)
      (SID_NAME = ORCL)
    )
  )

(3)服务器端配置tnsnames
前面说到连接标识符
比如 conn scott@orcl  客服端是如何解析的
先看sqlnet.ora这个文件 位置:$ORACLE_HOME/network/admin/ 内容如下:
image

通过这个文件来决定怎么样找一个连接中出现的连接字符串。
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
这时候会将orcl优先到tnsnames.ora文件里去比对。
用Net Manager这个工具配置一个名为“orcl”的网络服务名。
配置完成后tnsnames.ora文件的内容如下:
位置:$ORACLE_HOME/network/admin/
image

我这里是将orcl这个网络服务名解析为127.0.0.1:1521这个地址,SERVICE_NAME为orcl。

如果在tnsnames.ora这个文件里面没有找到标识符就会报错
image

(4)登录验证
数据库的账户信息是存储在数据库的数据字典里面的,那么当数据库关闭的时候,普通用户是无法登录的,那么管理员又是如何验证的呢?
不妨大家可以试验一下,用任意账户和密码登录,只要是加上as sysdba,都能登录成功
image
这其实就是操作系统验证,当监听器见到是以sysdba登录的,会优先采取操作系统验证的方法
在windows用户组里面可以看到有一个名为ora_dba的组,组用户里面就有我们创建数据库时的系统账户
image

操作系统验证就是查看ora_dba的组里面有没有当前系统登录的账户,如果不存在,操作系统验证失败,这时采用第二种办法验证,密码文件验证
$ORACLE_HOME/database/目录下有PWD开头的文件,我这里是PWDorcl.ora,orcl是我的数据库SID。
密码文件验证必须是管理员用户,并且密码必须正确才能通过。
那如果密码文件也丢失了怎么办呢?
可以用orapwd重新生成一个密码文件,并设置密码。

原文地址:https://www.cnblogs.com/Aion/p/3565169.html