Oracle普通用户认证方式,Oracle身份认证方式(sqlnet.ora配置)

sqlnet.ora主要是和tnsnames.ora配合使用

默认无sqlnet.ora时(可操作系统访问【oracle 用户系 dba组才行】)

[oracle@xag182 /]$ cd $ORACLE_HOME/network/admin

[oracle@xag182 admin]$ pwd

/u01/app/oracle/product/12.2.0/db_1/network/admin

[oracle@xag182 admin]$ ls

listener.ora samples shrept.lst tnsnames.ora

[oracle@xag182 admin]$ sqlplus / as sysdba

Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL>

操作系统认证

对于操作系统认证,需要将该用户添加到dba(针对sysdba权限)/oper(针对sysoper权限)组中,

就可以使用 "sqlplus / as sysdba"方式登陆

#新建test 用户

[root@xag182 ~]# useradd test

[root@xag182 ~]# echo "123456" | passwd --stdin test

[root@xag182 ~]# su test

[test@xag182 root]$ sqlplus / as sysdba

bash: sqlplus: command not found

[test@xag182 root]$ cd /home/test

[test@xag182 ~]$ cat .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

# User specific environment and startup programs

export DISPLAY=192.168.0.4:0.0

ORACLE_SID=MPAPEX;export ORACLE_SID

ORACLE_UNQNAME=MPAPEX;export ORACLE_UNQNAME

#JAVA_HOME=/u01/java/jdk1.8.0_181; export JAVA_HOME

ORACLE_BASE=/u01/app/oracle; export ORACLE_BASE

ORACLE_HOME=$ORACLE_BASE/product/12.2.0/db_1; export ORACLE_HOME

ORACLE_TERM=xterm; export ORACLE_TERM

NLS_DATE_FORMAT="YYYY:MM:DDHH24:MI:SS"; export NLS_DATE_FORMAT

NLS_LANG=American_America.AL32UTF8; export NLS_LANG

TNS_ADMIN=$ORACLE_HOME/network/admin; export TNS_ADMIN

ORA_NLS11=$ORACLE_HOME/nls/data; export ORA_NLS11

PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin:$ORA_CRS_HOME/bin

PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

export PATH

LD_LIBRARY_PATH=$ORACLE_HOME/lib

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib

LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

export LD_LIBRARY_PATH

THREADS_FLAG=native; export THREADS_FLAG

export TEMP=/u01/tmp

export TMPDIR=/u01/tmp

alias sqlplus='rlwrap sqlplus'

alias rman='rlwrap rman'

#alias asmcmd='rlwrap asmcmd'

#设置环境变量,登录oracle会提示设置ORACLE_SID以免实例太多误操作

/usr/local/bin/oraenv

ORAENV_ASK=YES

export ORAENV_ASK

umask 022

[test@xag182 ~]$ source .bash_profile

[test@xag182 ~]$ sqlplus / as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied

#添加dba、oinstall 、oinstall 属组给test 用

[root@xag182 ~]# usermod -g oinstall -G dba,oper test

[root@xag182 ~]# id test

uid=1001(test) gid=1000(oinstall) groups=1000(oinstall),1001(dba),1002(oper)

[test@xag182 ~]$ sqlplus / as sysdba

SQL>

# 新建sqlnet.ora 文件且当 SQLNET.AUTHENTICATION_SERVICES = NONE时,报错:

[oracle@xag182 admin]$ vim sqlnet.ora

[oracle@xag182 admin]$ cat sqlnet.ora

#NONE : 表示关闭操作系统认证,只能密码认证

SQLNET.AUTHENTICATION_SERVICES= (NONE)

[oracle@xag182 admin]$ sqlplus / as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied

[oracle@xag182 admin]$ su - test

[test@xag182 ~]$ sqlplus / as sysdba

ERROR:

ORA-01017: invalid username/password; logon denied

#用密码登陆则没有问题

[test@xag182 ~]$ sqlplus sys/123456 as sysdba

SQL>

#当 SQLNET.AUTHENTICATION_SERVICES = ALL时,可操作系统访问

[oracle@xag182 admin]$ cat sqlnet.ora

#NONE : 表示关闭操作系统认证,只能密码认证

#ALL : 操作系统认证和密码认证均可。

#NTS : 用于windows平台。

SQLNET.AUTHENTICATION_SERVICES= (ALL)

[oracle@xag182 admin]$ sqlplus / as sysdba

SQL>

外部认证之操作系统身份验证

SQL> show parameter common_user_prefix;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

common_user_prefix string C##

SQL> alter system set common_user_prefix='' scope=spfile;

SQL> startup force;

SQL> create user ops$test identified externally;

SQL> grant create session to ops$test;

SQL> exit

[oracle@xag182 admin]$ su - test

#test 操作系统身份验证,

#这个test是在本地环境下的操作系统认证,

#即test与oracle数据库在同一个主机上,

#若test不在同一个主机上,必须将remote_os_authent设置为TRUE。

[test@xag182 ~]$ sqlplus /

SQL> show user;

USER is "OPS$TEST"

SQL>

指定CLIENT NAME解析方法的次序,我们连接数据的时候,会有以下的语法格式的输入:

CONNECT username/password [@db_alias] AS [SYSOPER | SYSDBA] ;

可以看到这个语法中,有一个db_alias,这个东西是什么呢?这个db_alias就是在tnsnames.ora中定义的

数据库的别名,比如:

#ORCL是个别名

ORCL =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))

(CONNECT_DATA =

(SERVER = DEDICATED)

(SERVICE_NAME = orcl)

)

)

指定CLIENT NAME解析方法的次序,

默认是NAMES.DIRECTORY_PATH=(tnsnames, onames, hostname)

这个db_alias就是上面所说的ORCL,那么我们连接的时候,怎么知道这个ORCL是个什么东西呢?这就和sqlnet.ora中的配置有关系了。

当第一个指定为TNSNAMES时,就先到tnsnames.ora文件中去找对应的db_alias;如果找不到,就再按指定的第二种方式去找;如果都找不到,就将指定的db_alias当做主机名在网络上进行解析,得到数据库服务器的地址。

很多朋友对EZCONNECT很不解,这个EZCONNECT表示简单连接,就是说可以不用在tnsnames.ora文件去查询服务名就可以进行数据库的连接,比如我们可以这样进行连接:

username/password@hostname:port/service_name

sqlnet.ora中的NAMES.DIRECTORY_PATH参数配置

NAMES.DIRECTORY_PATH常用的值有tnsnames,hostname,onames和ezconnect和ldap,cds,nis不常用的值,

默认值是(tnsnames,onames,hostname)。

如果设置NAMES.DIRECTORY_PATH=(tnsnames),那么客户端就只会从tnsnames.ora查找

你要连接的字符串(db_alias)记录,如果tnsname.ora文件中没有此记录,则连接不上数据库。

如果设置NAMES.DIRECTORY_PATH=(tnsnames,hostname),那么客户端首先会从tnsnames.ora查找

你要连接的字符串(db_alias)记录,如果tnsname.ora文件中没有此记录,则尝试把你要连接的

字符串(db_alias)当作一个主机名,通过网络的途径去解析它的ip地址然后去连接

这个ip上GLOBAL_DBNAME=连接字符串(db_alias实例),当然这里连接字符串(db_alias)并不是一个主机名,最后会尝试以ezconnect的方式连接数据库。

例如sqlnet.ora配置如下:

NAMES.DIRECTORY_PATH= (TNSNAMES,ezconnect)

则可以同时支持如下格式的访问:

$ sqlplus scott/tiger@orcl

$ sqlplus scott/tiger@service_IP(or hostname):1521/service_name #ezconnect方式

当然采用第一种格式时需要正确配置tnsnames.ora,因为sqlplus需要在这里

匹配IP地址、端口、服务名等参数

限制IP对数据库的访问

(1)在sqlnet.ora文件中配置,比如:

限制IP地址192.168.131.109对数据库的访问

在sqlnet.ora文件中添加如下内容:

tcp.validnode_checking=yes

tcp.invited_nodes=(192.168.130.11)

tcp.excluded_nodes=(192.168.131.109)

第一行的含义:启用IP限制功能;

第二行的含义:允许访问数据库的IP地址列表,多个IP地址使用逗号分开,此例中我们写入数据库服务器的IP地址;

第三行的含义:禁止访问数据库的IP地址列表,多个IP地址使用逗号分开,此处我们写入欲限制的IP地址192.168.131.109。

然后重启监听生效。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值