一、Oracle认证管理
Oracle的认证方式有:
(1)操作系统认证
(2)密码认证
(3)外部认证
1、操作系统认证
对于操作系统认证,只要将用户加入dba组(针对sysdba权限)或者oper组(针对sysoper权限),即可通过"sqlplus / as sysdba"方式登陆数据库。
(1)查看oracle用户所属组:
[oracle@bond ~]$ id oracle
uid=1001(oracle) gid=1001(oinstall) groups=1001(oinstall),1002(dba),1003(oper)
(2)以操作系统认证方式登陆数据库:
[oracle@bond ~]$ sqlplus / as sysdba
*******区分sysdba和sysoper权限********
(1)sysdba拥有最高的系统权限,sysoper是sysdba的子集;
(2)以sysdba登陆时,用户是sys;而以sysoper登陆时,用户是public;
(3)sysoper主要用来启动、关闭数据库,默认情况下,无法访问普通用户对象。
*************决定能否操作系统认证的因素*******************
起到决定性作用的是$ORACLE_HOME/network/admin/sqlnet.ora文件中的SQLNET.AUTHENTICATION_SERVICES配置,其中:
none---表示关闭操作系统认证,只能密码认证
all----用于linux或unix平台,关闭本机密码文件认证,采用操作系统认证,但远程可以使用密码文件认证
nts----用于windows平台
2、密码认证
密码文件主要是拥有sysdba、sysoper等权限的用户登陆的认证,而对于普通用户登陆认证是基于数据字典。
(1)利用orapwd工具创建密码文件,主要参数有如下:
file:必选项,生成密码文件的名称,必须指定路径,否则创建的文件在当前路径下;
password:可选项,用户的密码;
entries:可选项,允许拥有超级权限的用户数;
force:可选项,是否覆盖已存在的文件;
(2)示例:
[oracle@orcl dbs]$ orapwd file='orapworcl' entries=5 force=y
可通过v$pwfile_users查看密码文件中的记录,每条记录对应一个拥有超级权限的用户。
(3)思考:在12C中能否设置大小写不敏感,能否设置sec_case_sensitive_logon参数?
*************决定能否操作系统认证的因素*******************
起决定性作用的参数是remote_login_passwordfile参数,有三种模式:
none----不使用密码文件认证
exclusive---需要密码文件认证 自己独占使用
shared ---需要密码文件认证 不同实例dba用户可以共享密码文件
3、外部认证
说明:对用户采用外部认证,则只有用户的账号由Oracle管理,密码和用户登录的认证则通过外部服务来管理。外部认证常见的有操作系统认证和网络认证。
(1)外部认证之操作系统认证
a.创建操作系统用户组zxy及用户zxy:
[root@zhan ~]# groupadd zxy
[root@zhan ~]# useradd -g zxy zxy
b.设置参数:os_authent_prefix:
SQL> show parameter os_authent_prefix;
NAME TYPE VALUE
------------------------ ----------- -------------
os_authent_prefix string ops$
c.创建数据库用户,同时授权:
SQL> create user ops$zxy identified externally;
SQL> grant connect to ops$zxy;
d.设置认证用户的环境变量:
[zxy@zhan ~]$vi .bash_profile
ORACLE_SID=zhan
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/12.1.2/dbhome_1
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/u01/app/oracle/product/12.1.2/dbhome_1/bin
export PATH ORACLE_SID ORACLE_BASE ORACLE_HOME
[zxy@zhan ~]$ source .bash_profile
e.登录测试:
[zxy@zhan ~]$ sqlplus /
SQL> show user;
USER is "OPS$ZXY"
(2)外部认证之网络认证
说明:允许用户通过采用外部验证的方式登录数据库。默认情况下,只允许本机的用户采用外部验证登录到数据库中。
当将remote_os_authent这个参数设置为true时,则允许远端用户采用外部验证的方式登录到数据库中。此种方式不安全,非特殊情况下,不要设置该参数为true。
配置步骤:
a.设置参数remote_os_authent = true,并重启数据库生效:
SQL> alter system set remote_os_authent=true scope=spfile;
SQL> shutdown immediate;
SQL> startup;
b.配置远程用户环境:
注意,确保远程服务器已创建认证用户,例如:zxy,若未创建,则需要手动创建用户。
[zxy@bond ~]$ vi .bash_profile
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
TNS_ADMIN=$ORACLE_HOME/network/admin
PATH=$PATH:$ORACLE_HOME/bin
export PATH ORACLE_BASE ORACLE_HOME TNS_ADMIN
[zxy@bond ~]$ source .bash_profile
c.配置远程服务器的tns:
ZHAN =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.50.100)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = zhan)
)
)
***注意,一定要记得将tnsnames.ora读权限授予需要远程登录的用户,否则会报"TNS-03505: Failed to resolve name"错误
d.创建数据库用户并授权:
SQL> create user ops$zxy identified externally;
SQL> grant connect to ops$zxy;
e.测试:
[zxy@bond ~]$ sqlplus /@zhan
二、连接方法
Oracle的连接方法有:
1、Easy Connect (简易连接命名):使用TCP/IP连接字符串
①sqlplus zxy/zxy@192.168.50.100:1521/zhan
②sqlplus zxy@192.168.50.100:1521/zhan --这种方法不行
③sqlpus zxy
口令:zxy@192.168.50.100:1521/zhan --用这个可以
2、Local Naming(本地命名):使用本地命名配置,将网络服务名称保存在tnsnames.ora文件中.
①sqlplus zxy/zxy@zhan
②sqlplus zxy@zhan
口令:zxy
3、Directory Naming(目录命名):使用符合LDAP(轻量级目录访问协议)的集中式目录服务器
①需要加载了Oracle Net名称解析信息的LDAP:
Oracle Internet Directory
Microsoft Active Directory Services
②支持所有Oracle Net协义
③支持高级连接选项
④Oracle Net配置文件
⑤conn hr/hr@orcl
4、External Naming Method(外部命名):使用支持的非Oracle命名服务
①网络信息服务(NIS)外部命名
②分布计算环境(DCE)单元目录服务(CDS)
三、监听配置
监听有两种:
(1)动态监听:由LREG进程注册;
local_listener默认为(ADDRESS = (PROTOCOL=TCP)(HOST=hostname)(PORT=1521))。
(2)静态监听:手动进行注册;
1、动态监听配置
方法一:配置$ORACLE_HOME/network/admin/listener.ora文件
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbmon)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /data/u01/app/oracle
方法二:配置local_listener参数
alter system set local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=dbmon)(PORT=1521)))';
方法三:配置$ORACLE_HOME/network/admin/tnsnames.ora文件
(1)tnsnames.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbmon)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
(2)alter system set local_listener='listener';
******************************************************************************************
思考:如果没有listener.ora和tnsnames.ora,同时没有配置local_listener参数,监听能否起来,
数据库能否远程访问????
******************************************************************************************
2、静态监听配置
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbmon)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER=
(SID_LIST=
(SID_DESC=
(ORACLE_HOME=/data/u01/app/oracle/product/11.2.0/dbhome_1)
(SID_NAME=dbmon))
)