Oracle身份认证方式(sqlnet.ora配置)

sqlnet.ora主要是和tnsnames.ora配合使用
  1. 默认无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> 
  1. 操作系统认证
对于操作系统认证,需要将该用户添加到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>
  1. 外部认证之操作系统身份验证
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>
  1. 指定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
  1. 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地址、端口、服务名等参数
  1. 限制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。
然后重启监听生效。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容