天天看點

[20141105]不同使用者通路oracle資料庫.txt

[20141105]不同使用者通路oracle資料庫.txt

--我們有一台機器,上面安裝了兩個資料庫,字元集不一樣。要通路和操作是要切換ORACLE_SID以及NLS_LANG環境變量。

--非常繁瑣,而且容易出錯,非常不友善。

--自己也想了幾種方式:

1.建立一個腳本,用來切換使用者:

#  cat chsid

#! /bin/bash

##############

# Desc : switch oracle sid , change sid and env NLS_LANG

######################################################

case "$1" in

    dbcn1|cn1)

                unset   ORACLE_SID

                export  ORACLE_SID=dbcn1

                unset   NLS_LANG

                export  NLS_LANG=AMERICAN_AMERICA.ZHS16GBK

                ;;

    dben1|en1)

                export  ORACLE_SID=dben1

                export  NLS_LANG=AMERICAN_AMERICA.US7ASCII

    *)

                echo "$0 ORACLE_SID"

esac

--執行時使用 . chsid en1或者source chsid en1,就可以實作切換。

--注意前面要使用一個. 或者source ,不然環境變量的修改無效,我不知道什麼往上傳環境變量(子程序到父程序傳遞環境變量,好像不行)。

2.建立一個新使用者,這樣比較科學一些,不容易出錯。

--簡單記錄一下步驟。

$ id

uid=503(oracle11g) gid=501(oinstall) groups=501(oinstall),502(dba)

--建立新使用者包含oracle的全部組。

# useradd oraen -g oinstall -G dba

[root@hisdg IP=40 ~ 6]# passwd oraen

Changing password for user oraen.

New UNIX password:

BAD PASSWORD: it is too short

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

--再修改.bash_profile環境變量,就ok了。

3.讀寫存在問題嗎?

--這個一直是我擔心的問題,測試以後不存在。

# ls -l users01.dbf

-rw-r-----  1 oracle11g oinstall 805314560 2014-11-05 02:08:11 users01.dbf

--可以發現使用者oracle11g有讀寫權限,而組oinstall僅僅有讀權限。sqlplus通路執行執行DML可以嗎?測試看看。

SCOTT@test> select * from t;

        ID C2

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

         1 1

         2 2

         3 3

         4 4

         5 5

SCOTT@test> update t set id=100 where id=1;

1 row updated.

SCOTT@test> commit ;

Commit complete.

SCOTT@test> select * from t where rownum        ID C2

       100 1

SCOTT@test> alter system checkpoint;

System altered.

--為什麼能成功呢?

SCOTT@test> select spid from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat where rownum=1));

SPID

------

14416

$ ps -ef

F S UID        PID  PPID  C PRI  NI ADDR SZ WCHAN  STIME TTY          TIME CMD

...

4 S root     14380 11086  0  76   0 - 17836 wait   10:08 pts/3    00:00:00 su - oraen

4 S oraen    14381 14380  0  76   0 - 14175 wait   10:08 pts/3    00:00:00 -bash

0 S oraen    14415 14381  0  76   0 - 15372 -      10:08 pts/3    00:00:00 sqlplus

0 S 503      14416 14415  0  76   0 - 453967 pipe_w 10:08 ?       00:00:00 oracletest (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

--可以發現程序号=14416的使用者503,就是oracle11g。

--注意如果使用者名的長度大于8位,ps 顯示UID是使用者id。oracle11g的使用者id就是503.

# id oracle11g

$ ls -l `which oracle `

-rwsr-s--x  1 oracle11g oinstall 232272740 2013-03-21 09:02:54 /u01/app/oracle11g/product/11.2.0/db_2/bin/oracle

--可以發現執行檔案oracle帶有s權限,這樣當使用者調用執行它時,可以繼承指令的uid以及gid,這樣使用者就具有了通路資料檔案的權限。

--unix/linux下一些管理指令都具有這樣的特性。比如修改密碼的程式。

# ls -l `which passwd`

-r-s--x--x  1 root root 27728 2005-06-17 22:40:47 /usr/bin/passwd