<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
    Oracle特殊權限驗證
    ?
    ??? Oracle的這一塊內容都比較繞,很容易就理解錯了。幸好找到一篇寫得非常詳細的教程,專門摘錄下來學習。不過這塊內容也是一定需要掌握的,在管理的時候是經常要用到的。自己總結的內容不多,關鍵看最后的那個轉載。
    ?
    ?
    一、Oracle的權限驗證方式:
    ?
    ??? Oracle的驗證方式取決于三個屬性:
    ?
    ??? * SQLNET.ORA參數文件中的參數SQLNET.AUTHENTICATION_SERVICES設置
    ??? * PFILE(SPFILE)參數文件中的參數REMOTE_LOGIN_PASSWORDFILE設置
    ??? * 口令文件orapw$SID(Linux) | PWD$SID.ora(Windows)
    ?
    ??? Oracle權限認證的基本順序是這樣的:先由SQLNET.AUTHENTICATION_SERVICES的設置值來決定是使用OS認證還是口令文件認證,如果使用口令文件認證的話就要看后面兩個條件了:如果REMOTE_LOGIN_PASSWORDFILE參數設置為非NONE而且口令文件存在的話就能正常使用口令文件認證,否則將會失敗。
    ?
    ??? oracle_log
    ?
    1、OS驗證
    ?
    ??? ① 為用戶創建操作系統帳號
    ??? ② 講用戶添加到Oracle安裝時定義的組中(安裝介質時創建)
    ??? ③ 設置REMOTE_LOGIN_PASSWORDFILE為NONE
    ?
    ??? SQL> CONN / AS SYSDBA
    ??? SQL> CONN / AS SYSOPER
    ?
    2、密碼文件驗證
    ?
    ??? ① 為用戶創建操作系統帳號
    ??? ② 創建密碼文件:ORAPWD FILE=file_name PASSWORD=password ENTRIES=max_users
    ??? ③ 將REMOTE_LOGIN_PASSWORDFILE設為EXCLUSIVE
    ??? ④ 以SYS用戶登陸,創建用戶,并GRANT SYSDBA to scott
    ?
    ??? * GRANT SYSDBA語句即將用戶加入密碼文件中
    ??? SQL> CONN scott/password AS SYSDBA
    ?
    ??? 詳細的情況參見: http://www.lansz.com/html/2008/06/oracle_os_pwfile_authentication.html
    ?
    ?
    二、密碼文件管理
    ?
    ??? 1、創建:
    ?
    ????? ORAPWD FILE=file_name PASSWORD=password ENTRIES=max_users
    ?
    ????? FILE:指定完整路徑名的文件,經過加密無法直接讀取。RAC中多個實例必須指向一個密碼文件。
    ????? PASSWORD:SYS用戶密碼,使用ALTER修改SYS密碼時,密碼文件中隨之修改。
    ????? ENTRIES:密碼文件可以接受的登陸個數,通常是4的倍數,可以超出,但最好有多。
    ?
    ??? 2、REMOTE_LOGIN_PASSWORDFILE:
    ?
    ????? NONE:默認值,結果是返回密碼文件不存在的結果。
    ????? EXCLUSIVE:密碼文件只能用于一個數據庫,可以講SYSDBA/SYSOPER權限授予個人用戶
    ????? SHARED:可用于多個數據庫,但只能針對SYS用戶(用于一個管理員管理多個數據庫時)
    ?
    ??? 3、密碼文件用戶查看
    ?
    ????? select * from v$pwfile_users;
    ?
    ??? 4、增加密碼文件的用戶數目:
    ?
    ????? * 查找v$pwfile_users中的密碼文件數目
    ????? * 關閉數據庫
    ????? * 刪除現有密碼文件
    ????? * 用ORAPWD重新創建密碼文件,將ENTRIES設置得大一點
    ????? * 重新將密碼文件用戶添加進去
    ????? * 注意刪除和重新建立之后必須重新添加,因為時間標記和校驗不同
    ?
    ?
    ?
    ?
    http://www.lansz.com/html/2008/06/oracle_os_pwfile_authentication.html
    ?

    ************************************************************************************************************

    ?

    Oracle OS認證與口令文件認證詳解

    ?

    本文概述與實驗環境

    概述:本文只討論OS認證和口令文件認證方式的配置方法,如何配置以及使用OS認證和口令文件認證方式驗證SYSDBA/SYSOPER權限。

    實驗環境:Oracle 10.1 + Windows 2003 和 Oracle 10.2 + RHEL 4

    特殊權限與Oracle登陸認證管理

    在開始學Oracle的時候有件事一直讓我感覺很奇怪,就是為什么在數據沒有起來的時候只要登錄到安裝Oracle的操作系統中直接用sqlplus / as sysdba就能登陸到數據庫中然后對數據庫進行啟動停止之類的操作。后來看到關于Oracle口令文件相關資料的時候才豁然開朗:數據庫認證信息并不一定存在數據庫中的,這點和SQL Server很是不一樣。

    在Oracle中有兩類特殊的權限SYSDBA和SYSOPER,當DBA需要對數據庫進行維護管理操作的時候必須具有這兩類特殊權限之中的一種。在數據庫沒有打開的時候,使用數據庫內建的賬號是無法登陸數據庫的,但是擁有SYSDBA或是SYSOPER權限的用戶是可以登陸的。認證用戶是否擁有兩類特殊權限的方法有兩種:OS認證和口令文件認證。

    OS認證和口令文件認證方法

    Oracle特殊權限認證方法
    (來源:Oracle? Database Administrator’s Guide 10g Release 2)

    Oracle數據庫究竟使用OS認證還是口令文件認證來進行管理取決于下面三個因素:

    • SQLNET.ORA參數文件中的參數SQLNET.AUTHENTICATION_SERVICES設置
    • PFILE(SPFILE)參數文件中的參數REMOTE_LOGIN_PASSWORDFILE設置
    • 口令文件orapw$SID(Linux) | PWD$SID.ora(Windows)

    Oracle權限認證的基本順序是這樣的,先由SQLNET.AUTHENTICATION_SERVICES的設置值來決定是使用OS認證還是口令文件認證,如果使用口令文件認證的話就要看后面兩個條件了:如果REMOTE_LOGIN_PASSWORDFILE參數設置為非NONE而且口令文件存在的話就能正常使用口令文件認證,否則將會失敗。

    SQLNET.AUTHENTICATION_SERVICES參數

    在SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN目錄中)文件中,需要修改時直接用文本編輯器打開修改就行了,對于不同的操作系統SQLNET.AUTHENTICATION_SERVICES的取值會有些不一樣,通常我們會用到下面的一些設置值:

    • SQLNET.AUTHENTICATION_SERVICES = (ALL)

    對Linux系統,支持OS認證和口令文件認證。

    對Windows系統,實際實驗是不支持此參數,驗證失敗。

    • SQLNET.AUTHENTICATION_SERVICES = (NTS)

    此設置值僅用于Windows NT系統,此設置同時支持OS認證和口令文件認證,只有在設置了(NTS)值之后運行在Windows系統上的Oracle才支持OS認證。

    • SQLNET.AUTHENTICATION_SERVICES = (NONE)

    此設置值在Windows和Linux是作用一樣的,指定Oracle只使用口令文件認證。

    • 不設置此參數或SQLNET.AUTHENTICATION_SERVICES =

    對Linux系統,默認支持OS認證和口令文件認證。

    對Windows系統,默認只支持口令文件認證,不支持OS認證。

    OS認證實現

    Oracle使用操作系統中的兩個用戶組來控制OS認證,在不同的操作系統中這兩個用戶組的名稱是不一樣的,一般來說他們是OSDBA 和 OSOPER,這兩個用戶組都是在Oracle安裝的時候創建的。下面列出不同系統中這兩個用戶組的名字:



    Operating System Group
    UNIX User Group
    UNIX User Group
    OSDBA
    dba
    ORA_DBA

    OSOPER
    oper
    ORA_OPER

    OSDBA用戶組的用戶可以使用SYSDBA權限登陸數據庫,OSOPER用戶組的的用戶可以使用SYSOPER權限來登陸數據庫。使用sqlplus可以用下面方法登陸

    CONNECT / AS SYSDBA
    CONNECT / AS SYSOPER

    擁有OS權限的用戶登陸數據庫時不再需要輸入用戶名和密碼,因此使用下面的命令也是可以正常登陸的:

    CONNECT ANY_USER_NAME / ANY_PASSWORD AS SYSDBA
    CONNECT ANY_USER_NAME / ANY_PASSWORD AS SYSOPER

    因此要創建一個新的OS認證帳號步驟是:

    1. 建立一個OS用戶
    2. 將用戶加入到OSDBA或是OSOPER用戶組
    3. 用新增加的用戶登陸系統,然后輸入sqlplus / AS SYSDBA進行登陸

    REMOTE_LOGIN_PASSWORDFILE參數

    REMOTE_LOGIN_PASSWORDFILE系統參數的設置制定了數據庫使用口令文件的方法,此參數可以設置的值有三個:

    • REMOTE_LOGIN_PASSWORDFILE = NONE

    不使用口令文件

    • REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE

    使用口令文件,但只有一個數據庫實例可用使用

    • REMOTE_LOGIN_PASSWORDFILE = SHARED

    多個數據庫實例共用一個口令文件,這種設置下是不能增加其他數據庫用戶作為特殊權限用戶到口令文件中的。

    REMOTE_LOGIN_PASSWORDFILE參數屬于初始化參數,只能在init.ora/pfile中指定或是在數據庫打開狀態下使用下面語句修改,然后重新啟動數據庫。

    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE SCOPE = SPFILE ;

    要檢查當前REMOTE_LOGIN_PASSWORDFILE的設定值在登陸Oracle后輸入下面的命令

    SQL > show parameter remote
    /** 這是輸出結果,看remote_login_passwordfile一行
    NAME???????????????????????????????? TYPE??????? VALUE
    ------------------------------------ ----------- ------------------------------
    remote_archive_enable??????????????? string????? true
    remote_dependencies_mode???????????? string????? TIMESTAMP
    remote_listener????????????????????? string
    remote_login_passwordfile??????????? string????? EXCLUSIVE
    remote_os_authent??????????????????? boolean???? FALSE
    remote_os_roles????????????????????? boolean???? FALSE
    SQL>
    */

    口令文件和口令文件認證

    口令文件存放著被授予SYSDBA或SYSOPER權限的用戶的用戶名和密碼。它是一個加密的文件,用戶不能修改這個文件,
    在Linux系統中口令文件一般保存在$ORACLE_HOME/dbs目錄下,文件名為orapw$SID;在Windows系統中口令文件一般保存在$ORACLE_HOME/database目錄下,文件名為PWD$SID.ora。

    使用口令文件認證的基本步驟是:

    1. 使用orapwd工具生成口令文件
    2. 設置REMOTE_LOGIN_PASSWORDFILE為EXCLUSIVE或是SHARED
    3. 使用SYS登陸數據庫,創建新的數據庫用戶
    4. 使用GRANT命令授予新創建的用戶SYSDBA/SYSOPER權限

    1、使用orapwd工具生成口令文件

    我們可以使用Oracle提供的工具orapwd來創建或者重新初始化一個口令文件:

    [oracle@RHEL4 dbs]$ orapwd
    Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>

    ? where
    ??? file - name of password file (mand),
    ??? password - password for SYS (mand),
    ??? entries - maximum number of distinct DBA and???? force - whether to overwrite existing file (opt),
    OPERs (opt),
    ? There are no spaces around the equal-to (=) character.
    [oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y
    [oracle@RHEL4 ~]$

    注意:使用orapwd重新生成口令文件之后以保存的授予的其他用戶的SYSDBA或是SYSOPER權限將會丟失,需要重新的GRANT。

    設定的entries值是不能修改的,如果要修改entries的話需要重新生成口令文件,在生成口令文件之前可以先通過V$PWFILE_USERS視圖查詢出當前被授予SYSDBA/SYSOPER權限的用戶,然后在重新生成口令文件以后重新對這些用戶授予SYSDBA/SYSOPER權限

    2、設置REMOTE_LOGIN_PASSWORDFILE為EXCLUSIVE或是SHARED

    ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE SCOPE = SPFILE ;

    3、使用SYS登陸數據庫,創建新的數據庫用戶

    CREATE USER test IDENTIFIED BY test ;

    4、使用GRANT命令授予新創建的用戶SYSDBA/SYSOPER權限

    GRANT SYSDBA TO test .

    每次在Oracle系統里面使用GRANT SYSDBA/SYSOPER授予新用戶特殊權限或是ALTER USER命令修改擁有SYSDBA/SYSOPER權限的用戶密碼的時候,Oracle都會自動的修改口令文件,增加或是修改相應的項目,這樣保證在數據沒有打開的情況擁有特殊權限的用戶能正常的登陸數據庫以進行管理操作。

    實驗

    上面長篇大論的說了那么多,下面我們來做實驗驗證一下。實驗都是基于Linux系統來做的,做實驗之前先使用下面的命令創建一個口令文件:

    [oracle@RHEL4 ~]$ orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

    1、驗證OS認證

    設置SQLNET.ORA中參數SQLNET.AUTHENTICATION_SERVICES = (ALL)或是不設置,REMOTE_LOGIN_PASSWORDFILE = NONE,然后進行下面的操作。

    本地使用下面兩種方式登陸,都能成功

    [oracle@RHEL4 dbs]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:06:55 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.


    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL>
    [oracle@RHEL4 dbs]$ sqlplus aaa/bbb as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jun 7 15:16:25 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.


    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL>

    遠程使用口令文件方式登陸,失敗

    D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

    SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008

    Copyright (c) 1982, 2007, Oracle.? All Rights Reserved.

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

    Enter user-name:

    2、兩種認證都失效

    設置SQLNET.ORA中參數SQLNET.AUTHENTICATION_SERVICES = (NONE),REMOTE_LOGIN_PASSWORDFILE = NONE,然后進行下面的操作。

    本地使用下面兩種方式登陸,都失敗

    [oracle@RHEL4 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:05 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.

    ERROR:
    ORA-01031: insufficient privileges

    Enter user-name:
    [oracle@RHEL4 ~]$ sqlplus sys/pwd as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:22:46 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.

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

    Enter user-name:

    遠程使用口令文件方式登陸,失敗

    D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

    SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:06:55 2008

    Copyright (c) 1982, 2007, Oracle.? All Rights Reserved.

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

    Enter user-name:

    3、驗證口令文件認證

    設置SQLNET.ORA中參數SQLNET.AUTHENTICATION_SERVICES = (NONE)不設置,REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE或SHARED,然后進行下面的操作。

    本地使用驗證OS認證,失敗

    [oracle@RHEL4 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:16:56 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.

    ERROR:
    ORA-01031: insufficient privileges

    Enter user-name:

    本地驗證口令文件認證,成功

    [oracle@RHEL4 ~]$ sqlplus sys/pwd as sysdba
    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:26:48 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL>

    遠程使用口令文件認證,成功

    D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

    SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:21:18 2008

    Copyright (c) 1982, 2007, Oracle.? All Rights Reserved.

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SYS@192.168.0.201/orcl>

    4、兩種認證都成功

    設置SQLNET.ORA中參數SQLNET.AUTHENTICATION_SERVICES = (ALL),REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE,然后進行下面的操作。

    本地使用驗證OS認證,成功

    [oracle@RHEL4 ~]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 19:30:33 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL>

    遠程使用口令文件認證,成功

    D:\Oracle\SQLPlus10.2> sqlplus sys/pwd@192.168.0.201/orcl as sysdba

    SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 19:27:11 2008

    Copyright (c) 1982, 2007, Oracle.? All Rights Reserved.
    Connected to:

    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SYS@192.168.0.201/orcl>

    5、將SYSDBA/SYSOPER權限授權給其它數據庫帳戶

    先查看口令文件的修改時間

    [oracle@RHEL4 dbs]$ ll orapworcl
    -rw-r-----? 1 oracle oinstall? 2560 Jun? 7 19:04 orapworcl

    用SYS登陸數據庫,創建新用戶test,并賦予SYSDBA權限

    [oracle@RHEL4 dbs]$ sqlplus / as sysdba

    SQL*Plus: Release 10.2.0.1.0 - Production on Sat Jun 7 21:41:36 2008

    Copyright (c) 1982, 2005, Oracle.? All rights reserved.

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SQL>
    SQL > create user test identified by test ;
    User created
    .
    SQL > grant sysdba to test
    ;
    Grant succeeded .
    SQL>exit
    Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    再看口令文件,已經修改了

    [oracle@RHEL4 dbs]$ ll orapworcl
    -rw-r-----? 1 oracle oinstall? 2560 Jun? 7 21:42 orapworcl

    再用新的test帳號登陸,能成功的登陸

    D:\Oracle\SQLPlus10.2&gt;sqlplus test/test@192.168.0.201/orcl as sysdba

    SQL*Plus: Release 10.2.0.4.0 - Production on Sat Jun 7 21:32:37 2008

    Copyright (c) 1982, 2007, Oracle.? All Rights Reserved.

    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
    With the Partitioning, OLAP and Data Mining options

    SYS@192.168.0.201/orcl>

    說明:如果要取消SYSDBA權限只需要運行下面的語句就可以了

    SQL > revoke sysdba from test ;

    常見問題說明

    1、如何查找擁有SYSDBA或是SYSOPER權限的用戶

    使用視圖V$PWFILE_USERS,結果集中的SYSDB和SYSOP分別代表是否有SYSDBA和SYSOPER權限。

    SQL > select * from v $ pwfile_users ;
    /**
    USERNAME?????????????????????? SYSDB SYSOP
    ------------------------------ ----- -----
    SYS??????????????????????????? TRUE? TRUE
    TEST?????????????????????????? TRUE? FALSE
    */

    2、授予權限時出現”ORA-01994: GRANT failed: password file missing or disabled”

    出現這種情況是因為沒有創建口令文件,或者是口令文件放置的目錄不正確,Oracle找不到。只要重建或將口令文件置于$ORACLE_HOME/dbs/目錄中就可以了。

    3、忘記了SYS帳號的密碼怎么辦?

    如果數據庫啟用的OS認證登陸,則可以用OS認證登陸數據庫,然后使用下面的命令進行修改

    alter user SYS identified by pwd ;

    如果沒有啟用OS認證登陸,則需要用orapwd重建口令文件

    orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=pwd entries=10 force=y

    其中的password項所指定的就是SYS的密碼

    參考文檔

    發表于 2008-06-08 @ 00:37:07 · 歸類于 Basics , Oracle · 瀏覽(620)

    ?

    posted on 2008-11-05 21:49 decode360 閱讀(509) 評論(0)  編輯  收藏 所屬分類: 08.DBA
    主站蜘蛛池模板: 四虎影院免费在线播放| 成人网站免费观看| 黑人精品videos亚洲人| 无码的免费不卡毛片视频| 色www永久免费视频| 国产亚洲精品成人久久网站| 国产女高清在线看免费观看| 精品一区二区三区无码免费直播| 国产91在线免费| xvideos永久免费入口| 77777亚洲午夜久久多人| 国产午夜成人免费看片无遮挡| 亚洲国产精品不卡在线电影| 日本最新免费网站| 亚洲AV无码专区在线观看成人| 亚洲国产av一区二区三区| 97国免费在线视频| 亚洲视频在线一区二区三区| 一个人免费观看www视频在线| 亚洲a无码综合a国产av中文| 亚洲精品人成电影网| 免费黄色福利视频| 亚洲av永久中文无码精品| 久久精品国产大片免费观看| 亚洲成AV人片久久| 免费国产真实迷j在线观看| 男女拍拍拍免费视频网站| 久久亚洲精品中文字幕| 日韩免费视频在线观看| 香蕉免费一级视频在线观看| 亚洲专区先锋影音| 四虎永久成人免费| 野花香在线视频免费观看大全| 亚洲五月综合缴情婷婷| 亚洲福利精品一区二区三区| 免费播放一区二区三区| 日本亚洲中午字幕乱码 | 日本a级片免费看| 国产午夜成人免费看片无遮挡 | 亚洲黄色高清视频| 在线观看永久免费视频网站|