外部用户操作系统验证学习

操作系统外部用户
~~~~~~~~~~~~~~

A, os_authent_prefix='ops$' , remote_os_authent=FALSE 
   现在这两个参数等于默认值,我们来进行测试

SQL> show parameter auth

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string      ops$
remote_os_authent                    boolean     FALSE


-- 创建DB用户

SQL> create user ops$user1 identified externally;  ﹤≡≡ 外部用户名要与prefix的值相对应      
                                                   ﹤≡≡ ops$user1是操作系统验证用户
User created.                                      ﹤≡≡ 可以先建立外部用户,再建立操作系统用户

SQL> grant connect to ops$user1;

Grant succeeded.

SQL> create user ops$user2 identified by pass;     ﹤≡≡内部用户名要与prefix的值相对应
                                                   ﹤≡≡ops$user1是数据库密码验证用户
User created.

SQL> grant connect to ops$user2;

Grant succeeded.


--创建OS用户

-bash-2.05b# useradd user1                         ﹤≡≡OS用户不加ops$前缀
-bash-2.05b# useradd user2


﹤≡≡ 配置环境变量,下面我们将环境变量写入.bash_profile中
1,切换用户
   su - user1 
2,编辑配置文件  vi .bash_profile
   用下列内容替换(注,与ORACLE用户下的环境变量相同)
   export ORACLE_SID=sbatch
   export ORACLE_BASE=/oracle
   export ORACLE_HOME=/oracle/products/9.2.0
   export PATH=$PATH:$ORACLE_HOME/bin
3,编辑完成后,执行 . .bash_profile (或者再次su - user1即可)

user2的配置同上

﹤≡≡ 本地OS验证

-bash-2.05b# su - user1
[user1@BatchServer ~]$ id
uid=503(user1) gid=505(user1) groups=505(user1) context=user_u:system_r:unconfined_t

[user1@BatchServer ~]$ sqlplus /                    ﹤≡≡ ops$user1本地操作系统验证成功
SQL> show user;
USER is "OPS$USER1"

exit

下面切换user2
[root@BatchServer ~]# su - user2
[user2@BatchServer ~]$ id
uid=504(user2) gid=506(user2) groups=506(user2) context=user_u:system_r:unconfined_t

bash-2.05b$ sqlplus /                                ﹤≡≡ ops@user2本地操作系统验证成功         
SQL> show user;					     ﹤≡≡ 内部用户也可以借助外部操作系统相同命名(只有OPS$前缀才行)进行操作系统验证登陆	
USER is "OPS$USER2"     


﹤≡≡ 下面是远程操作系统验证部分

切换到远程客户机上操作
建立同样的用户
1,user1
[root@LinkServer ~]# useradd user1
[root@LinkServer ~]# useradd user2

﹤≡≡ 配置环境变量,下面我们将环境变量写入.bash_profile中并生效,步骤同上

[root@LinkServer ~]# su - user1
[user1@LinkServer admin]$ id
uid=503(user1) gid=504(user1) groups=504(user1) context=user_u:system_r:unconfined_t


[user1@LinkServer admin]$ sqlplus /@Sbatch_172.24.2.25
ERROR:
ORA-01017: invalid username/password; logon denied
exit


下面切换user2
[root@LinkServer ~]# su - user2
[user2@LinkServer ~]$ id
uid=504(user2) gid=505(user2) groups=505(user2) context=user_u:system_r:unconfined_t

[user2@LinkServer ~]$ sqlplus /@Sbatch_172.24.2.25
ERROR:
ORA-01017: invalid username/password; logon denied


Enter user-name: 

﹤≡≡ 小结:这里remote_os_authent=false,可以看到远程操作系统验证失败

[user2@LinkServer ~]$ sqlplus ops\$user2/pass@Sbatch_172.24.2.25   ﹤≡≡ 在unix操作系统下,$符号需要转义,而且这里没有加引号出错

ERROR:
ORA-01017: invalid username/password; logon denied
exit


[user2@LinkServer ~]$ sqlplus "ops\$user2"/pass@Sbatch_172.24.2.25   ﹤≡≡ 在unix操作系统下,$符号需要转义

SQL*Plus: Release 9.2.0.4.0 - Production on Mon May 11 21:14:27 2009

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.


Connected to:
Oracle9i Enterprise Edition Release 9.2.0.5.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production

SQL> conn ops$user2/pass@Sbatch_172.24.2.25                    ﹤≡≡sqlplus下$没有问题,可以直接书写不需处理
Connected.
SQL> show user
USER is "OPS$USER2"
SQL> 

﹤≡≡ 由于 OPS$USER2用户是以密码验证的方式建立的,所以它可以通过密码验证登录






B, os_authent_prefix='' , remote_os_authent=FALSE 
   将前缀置为空,我们来进行测试

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

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 1462311520 bytes
Fixed Size                   453216 bytes
Variable Size             620756992 bytes
Database Buffers          838860800 bytes
Redo Buffers                2240512 bytes
Database mounted.
Database opened.
SQL> show parameter auth

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string
remote_os_authent                    boolean     FALSE


SQL> create user user1 identified externally;

User created.

SQL> create user user2 identified by pass;

User created.

SQL> grant connect to user1,user2;

Grant succeeded.

exit


﹤≡≡ 本地OS验证

[root@BatchServer ~]# su - user1
-bash-3.00$ sqlplus /
SQL> show user
USER is "USER1"
SQL> exit


切换用户user2
[root@BatchServer ~]# su - user2
-bash-3.00$ sqlplus /
ERROR:
ORA-01017: invalid username/password; logon denied

-bash-3.00$ 
-bash-3.00$ sqlplus user2/pass
SQL> show user
USER is "USER2"
SQL> exit

﹤≡≡ 小结:我们看到user1 可以在本地操作系统验证;
                   user2 不能在本地操作系统验证,只能用密码验证
    



﹤≡≡ 下面是远程操作系统验证部分

切换到远程客户机上操作
[root@LinkServer ~]# su - user1
-bash-3.00$ sqlplus /@Sbatch_172.24.2.25
ERROR:
ORA-01017: invalid username/password; logon denied
exit


[root@LinkServer ~]# su - user2
-bash-3.00$ sqlplus /@Sbatch_172.24.2.25
ERROR:
ORA-01017: invalid username/password; logon denied

﹤≡≡ 这里remote_os_authent=false,user1和user2无法用远程操作系统认证,只能用密码验证



C,os_authent_prefix='' , remote_os_authent=TRUE 
   将远程认证改成TRUE,我们来进行测试

SQL> alter system set remote_os_authent=TRUE scope=spfile;

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 1462311520 bytes
Fixed Size                   453216 bytes
Variable Size             620756992 bytes
Database Buffers          838860800 bytes
Redo Buffers                2240512 bytes
Database mounted.
Database opened.
SQL> show parameter auth

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string
remote_os_authent                    boolean     TRUE

﹤≡≡ 本地OS验证

[root@BatchServer ~]# su - user1
-bash-3.00$ sqlplus /
SQL> show user
USER is "USER1"
SQL> exit


﹤≡≡ 注意,如果数据库端允许远程登陆,那么远程某个用户知道数据库有个外部用户名称为ORACLE,
﹤≡≡ 那么远程只要建立同样一个操作系统用户ORACLE,就可以轻易的登陆,这风险太大。


切换用户user2
[root@BatchServer ~]# su - user2
-bash-3.00$ sqlplus /
ERROR:
ORA-01017: invalid username/password; logon denied


-bash-3.00$ sqlplus user2/pass
SQL> show user
USER is "USER2"
SQL> exit

﹤≡≡ 小结:我们看到user1 可以在本地操作系统验证;
                   user2 不能在本地操作系统验证,可以用密码验证
           这部分测试结果同B部分相同


﹤≡≡ 下面是远程操作系统验证部分

切换到远程客户机上操作

[root@LinkServer ~]# su - user1
-bash-3.00$ sqlplus /@Sbatch_172.24.2.25
SQL> show user
USER is "USER1"
SQL> exit


切换用户user2
[root@LinkServer ~]# su - user2
-bash-3.00$ sqlplus /@Sbatch_172.24.2.25
ERROR:
ORA-01017: invalid username/password; logon denied


-bash-3.00$ sqlplus user2/pass@Sbatch_172.24.2.25
SQL> show user 
USER is "USER2"
SQL> exit


﹤≡≡ 这里remote_os_authent=true,user1可以用远程操作系统认证
                                 user2无法用远程操作系统认证,只能用密码验证



D,os_authent_prefix='ops$' , remote_os_authent=TRUE 
   将prefix改回ops$,我们来进行测试

SQL> alter system set os_authent_prefix='ops$' scope=spfile;

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area 1462311520 bytes
Fixed Size                   453216 bytes
Variable Size             620756992 bytes
Database Buffers          838860800 bytes
Redo Buffers                2240512 bytes
Database mounted.
Database opened.
SQL> 
SQL> show parameter auth

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
os_authent_prefix                    string      ops$
remote_os_authent                    boolean     TRUE                                 


﹤≡≡ 本地OS验证

[root@BatchServer ~]# su - user1
-bash-3.00$ sqlplus /
SQL> show user
USER is "OPS$USER1"
exit


切换user2
[root@BatchServer ~]# su - user2
-bash-3.00$ sqlplus /
SQL> show user
USER is "OPS$USER2"

﹤≡≡ ops$user1和ops$user2本地操作系统验证成功
     这里,数据库中实际上存在ops$user1、ops$user2、user1、user2四个用户
     我们可以看到系统选择的对应用户只有ops$user1和ops$user2,这与我们的
     初始化参数os_authent_prefix='ops$'是吻合的

     
﹤≡≡ 下面是远程操作系统验证部分

切换到远程客户机上操作


[root@LinkServer ~]# su - user1
-bash-3.00$ sqlplus /@Sbatch_172.24.2.25

SQL> show user
USER is "OPS$USER1"
SQL> exit

切换到user2
[root@LinkServer ~]# su - user2
-bash-3.00$ sqlplus /@Sbatch_172.24.2.25

SQL> show user
USER is "OPS$USER2"
SQL> exit

-bash-3.00$ sqlplus "ops\$user2"/pass@Sbatch_172.24.2.25
SQL> show user
USER is "OPS$USER2"

﹤≡≡ 这里remote_os_authent=true,user1可以用远程操作系统认证
                                 user2可以用远程操作系统认证,也可以用密码认证

你可能感兴趣的:(oracle,操作系统验证,外部用户)