相信,很多DBA朋友平时都习惯了sqlplus /nolog或sqlplus / as sysdba或sqlplus system/******等方式登陆db,这些方式很容易暴露db的口令密码,要是连接本机的db环境还好,sqlplus /nolog进入sqlplus后用“conn 用户名”可以隐藏口令密码登陆,如果是登陆远程机器,要怎么写连接信息呢?

相信很多人是说,直接写用户名不写密码,等sqlplus提示输入密码就可以了呀!

如:

C:\Users\******>sqlplus system@192.168.100.130/orcl

SQL*Plus: Release 12.2.0.1.0 Production on 星期四 4月 18 10:22:05 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME


请输入用户名:

看到了吗?报错了,除非你知道怎么写,否则一定很疑惑:为什么加上去掉密码就不行了呢?

一般这样是可以的:

C:\Users\******>sqlplus system/oracle@192.168.100.130/orcl

SQL*Plus: Release 12.2.0.1.0 Production on 星期四 4月 18 10:25:52 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

我们看一下sqlplus的帮助信息:

C:\Users\******>sqlplus --help

SQL*Plus: Release 12.2.0.1.0 Production

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

使用 SQL*Plus 执行 SQL, PL/SQL 和 SQL*Plus 语句。

用法 1: sqlplus -H | -V

    -H             显示 SQL*Plus 版本和
                   用法帮助。
    -V             显示 SQL*Plus 版本。

用法 2: sqlplus [ [<option>] [{logon | /nolog}] [<start>] ]

  <option> 为: [-AC] [-C <version>] [-L] [-M "<options>"] [-NOLOGINTIME] [-R <level>]
               [-S]

    -AC            启用应用程序连续性。
    -C <version>   将受影响的命令的兼容性设置为
                   <version> 指定的版本。该版本具有
                   "x.y[.z]" 格式。例如, -C 10.2.0
    -L             只尝试登录一次, 而不是
                   在出错时再次提示。
    -M "<options>" 设置输出的自动 HTML 或 CSV 标记。选项
                   的格式为:
                   {HTML html_options|CSV csv_options}
                   有关详细的 HTML 和 CSV 选项, 请参阅 SQL*Plus User's Guide。
    -NOLOGINTIME   不显示上次成功登录时间。
    -R <level>     设置受限模式, 以禁用与文件系统交互的
                    SQL*Plus 命令。级别可以
                   是 1, 2 或 3。最高限制级别为 -R 3, 该级别
                   禁用与文件系统交互的
                   所有用户命令。
    -S             设置无提示模式, 该模式隐藏
                   命令的 SQL*Plus 标帜, 提示和回显
                   。

  <logon> 为: {<username>[/<password>][@<connect_identifier>] | / }
              [AS {SYSDBA | SYSOPER | SYSASM | SYSBACKUP | SYSDG | SYSKM | SYSRAC}] [EDITION=value]

    指定数据库帐户用户名, 口令和数据库连接
    的连接标识符。如果没有连接
    标识符, SQL*Plus 将连接到默认数据库。

    AS SYSDBA, AS SYSOPER, AS SYSASM, AS SYSBACKUP, AS SYSDG
    AS SYSKM 和 AS SYSRAC 选项为数据库管理权限。

    <connect_identifier> 的形式可以是 Net 服务名
    或轻松连接。

      @[<net_service_name> | [//]Host[:Port]/<service_name>]

        <net_service_name> 是服务的简单名称, 它解析
        为连接描述符。

        示例: 使用 Net 服务名连接到数据库, 且
                 数据库 Net 服务名为 ORCL。

           sqlplus myusername/mypassword@ORCL

        Host 指定数据库服务器计算机的主机名或 IP
        地址。

        Port 指定数据库服务器上的监听端口。

        <service_name> 指定要访问的数据库的
        服务名。

        示例: 使用轻松连接连接到数据库, 且
                 服务名为 ORCL。

           sqlplus myusername/mypassword@Host/ORCL

    /NOLOG 选项可启动 SQL*Plus 而不连接到
    数据库。

    EDITION 指定会话 Edition 的值。


  <start> 为: @<URL>|<filename>[.<ext>] [<parameter> ...]

    使用将分配给脚本中的替代变量的指定参数
    从 Web 服务器 (URL) 或本地文件系统 (filename.ext)
    运行指定的 SQL*Plus 脚本。

在启动 SQL*Plus 并且执行 CONNECT 命令后, 将运行站点概要
文件 (例如, $ORACLE_HOME/sqlplus/admin/glogin.sql) 和用户概要文件
(例如, 工作目录中的 login.sql)。这些文件
包含 SQL*Plus 命令。

有关详细信息, 请参阅 SQL*Plus 用户指南和参考。

可以看到,connect_identifier是一个整体,那么我们试试把它用引号引起来试试:

单引号:

C:\Users\******>sqlplus system@'192.168.100.130/orcl'

SQL*Plus: Release 12.2.0.1.0 Production on 星期四 4月 18 10:29:46 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

输入口令:

连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL>

嘿嘿,可以!

双引号:

C:\Users\******>sqlplus system@"192.168.100.130/orcl"

SQL*Plus: Release 12.2.0.1.0 Production on 星期四 4月 18 10:30:29 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

ERROR:
ORA-12504: TNS: 监听程序在 CONNECT_DATA 中未获得 SERVICE_NAME


请输入用户名:  system
输入口令:
ERROR:
ORA-12560: TNS: 协议适配器错误


请输入用户名:

哈哈,不行!

另外一种方式:

C:\Users\******>sqlplus /nolog

SQL*Plus: Release 12.2.0.1.0 Production on 星期四 4月 18 10:32:28 2019

Copyright (c) 1982, 2016, Oracle.  All rights reserved.

SQL> conn system@'192.168.100.130/orcl'
输入口令:
已连接。
SQL>

也是可以的!

所以,如果不想暴露密码,可以不写密码,但要把“服务器端口服务名等信息”用英文状态下的单引号引起来