亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Oracle 口令文件

系統(tǒng) 1921 0

口令文件:
? oracle的口令文件的作用是存放所有以sysdba或者sysoper權(quán)限連接數(shù)據(jù)庫的用戶的口令 ,如果想以sysdba權(quán)限遠程連接數(shù)據(jù)庫,必須使用口令文件,否則不能連上,由于sys用戶在連接數(shù)據(jù)庫時必須以sysdba or sysoper方式,也就是說sys用戶要想連接數(shù)據(jù)庫必須使用口令文件,因此我認為在數(shù)據(jù)庫中存放sys用戶的口令其實沒有任何意義! 使用口令文件的好處是即使數(shù)據(jù)庫不處于open狀態(tài),依然可以通過口令文件驗證來連接數(shù)據(jù)庫 。開始安裝完oracle,沒有給普通用戶授予sysdba權(quán)限,口令文件中只存放了sys的口令, 如果之后把sysdba權(quán)限授予了普通用戶,那么此時會 把普通用戶的口令從數(shù)據(jù)庫中讀到口令文件中保存下來 ,當(dāng)然這時必須要求數(shù)據(jù)庫處于open狀態(tài) 。如:

??? SQL> grant sysdba to test;
??? 授權(quán)成功。

??? SQL> connect test/aaa@orcl as sysdba
??? ERROR:
??? ORA-01017: 用戶名/口令無效; 登錄被拒絕
??? 警告: 您不再連接到 ORACLE。

??? SQL> connect test/test@orcl as sysdba
??? 已連接。

??? SQL> alter database close;
??? 數(shù)據(jù)庫已更改。

??? SQL> grant sysdba, sysoper to test;
??? grant sysdba, sysoper to test
??? *
??? 第 1 行出現(xiàn)錯誤:
??? ORA-01109: 數(shù)據(jù)庫未打開

??? 到底有幾個用戶被授予了sysdba或者sysoper權(quán)限,可以通過查詢?nèi)缦聉$pwfile_users獲得, v$pwfile_users的信息就是源于口令文件的 (This view lists users who have been granted SYSDBA and SYSOPER privileges as derived from the password file.)

??? SQL> select * from v$pwfile_users;
??? USERNAME SYSDB SYSOP
??? ------------------------------ ----- -----
??? SYS TRUE TRUE
??? TEST TRUE FALSE
???
?? 從用戶剝奪sysdba權(quán)限:revoke sysdba from test;
??? 到底可以有幾個用戶被授予sysdba或者sysoper權(quán)限,是由 創(chuàng)建口令文件時指定的entries數(shù)決定的,準確的說還不完全是,最終還和os block的大小有關(guān) ,如果entries指定了5,一個os block可以存放8個用戶的口令,那么可以由8個用戶被授予sysdba或者sysoper。

??? 下面看一個簡單的測試 :-----給數(shù)據(jù)庫添加100個新用戶
??? SQL> declare
????? 2???? v_string varchar2(100);
????? 3? begin
????? 4? for i in 1..100 loop
????? 5???? v_string := 'create user test'||i||' identified by test'||i;
????? 6???? execute immediate v_string ; ----執(zhí)行create user語句
????? 7? end loop;
????? 8? end;
????? 9? /
??? PL/SQL 過程已成功完成。

??? SQL> select count(*) from dba_users where username like '%TEST%';
????? COUNT(*)
??? ----------
?????????? 101

??? 這里之所以是101,是因為之前已經(jīng)創(chuàng)建過test用戶

??? SQL> declare
????? 2???? v_string varchar2(100);
????? 3? begin
????? 4????????? for i in 1..100 loop
????? 5???????????? v_string := 'grant sysdba to test'||i;? ---為這100個新用戶賦sysdba權(quán)限。考察可以付多少個
????? 6????????????????? execute immediate v_string ;
????? 7????????? end loop ;
????? 8? end ;
????? 9? /

??? declare
??? *
??? 第 1 行出現(xiàn)錯誤:
??? ORA-01996: GRANT 失敗: 口令文件 '' 已滿
??? ORA-06512: 在 line 6

??? SQL> select * from v$pwfile_users;
??? USERNAME?????????????????????? SYSDB SYSOP
??? ------------------------------ ----- -----
??? SYS??????????????????????????? TRUE? TRUE
??? TEST1????????????????????????? TRUE? FALSE
??? TEST2????????????????????????? TRUE? FALSE
??? TEST3????????????????????????? TRUE? FALSE
??? TEST4????????????????????????? TRUE? FALSE
??? TEST5????????????????????????? TRUE? FALSE
??? TEST6????????????????????????? TRUE? FALSE
??? TEST7????????????????????????? TRUE? FALSE
??? TEST8????????????????????????? TRUE? FALSE

??? 已選擇9行。

??? SQL>

??? 可以清楚的看到 v$pwfile_users里面并不是創(chuàng)建口令文件時指定的entries=5而是9條記錄 ,意味著9個用戶的口令占用了一個os block,其實也可能是多個os block,總之這些block都是滿的,但是觀察口令文件,還是占了2k,這是我解釋不清的地方。通過os命令發(fā)現(xiàn) ; 每個簇字節(jié)數(shù)4096;這里其實就是os block 大小實際上是4k ,但是口令文件占用了2k,根本沒有用滿一個os block,不知道何故,也是我的疑惑?。
??? win下查看os block大小
??? C:\WINDOWS\system32>fsutil fsinfo ntfsinfo e:
??? NTFS 卷序列號 :?????? 0x12afb454f6e54b31
??? 版本 :???????????????????????? 3.1
??? 區(qū)數(shù)量 :????????????????? 0x00000000040270d0
??? 簇總數(shù) :????????????????? 0x0000000000804e1a
??? 可用簇? :????????????????? 0x00000000000b8d41
??? 保留總數(shù) :????????????????? 0x0000000000000000
??? 每個扇區(qū)字節(jié)數(shù)? :?????????????? 512
??? 每個簇字節(jié)數(shù) :?????????????? 4096
??? 每個 FileRecord 段的字節(jié)數(shù)??? : 1024
??? 每個 FileRecord 段的簇數(shù) : 0
??? Mft 有效數(shù)據(jù)長度 :?????????? 0x00000000058d0000
??? Mft 起始 Lcn? :????????????????? 0x0000000000000004
??? Mft2 起始 Lcn :????????????????? 0x0000000000080000
??? Mft 區(qū)域起始 :????????????????? 0x0000000000483740
??? Mft 區(qū)域結(jié)尾?? :????????????????? 0x000000000049c760

??? C:WINDOWS\system32>
??? 還有一個問題修改了口令,口令長度增加了,按說占用的空間多了,但是查詢v$pwfile_users發(fā)現(xiàn)還是9條記錄?不過這個問題突然想到了答案,那就是不論我們的 口令多長,加密之后的長度幾乎都是相同的,也就是說口令文件占用的大小和口令指定的長度幾乎關(guān)系不大!

??? 創(chuàng)建口令文件需要注意的是=前后沒有空格!另外值得一提的是10g增加了一個新的參數(shù)force default值n,它的作用類似于創(chuàng)建表空間時的reuse功能,當(dāng)同名文件存在時是否覆蓋。

??? 是否使用口令文件,是通過oracle提供的一個參數(shù)remote_login_passwordfile來控制的,remote_login_passwordfile有none,shared,exclusive3個值, none表示不使用口令文件,exclusive表示實例獨占使用口令文件,也就是各自實例使用單獨的口令文件,shared表示多個實例共享一個口令文件 ,缺省情況下,win下口令文件的格式是pwdsid.ora,unix下的格式是orapwSID(大小寫敏感),unix下尋找口令文件的順序是oracle_home\dbs\orapwSID,如果找不到,會在dbs目錄想尋找orapw文件,如果找不到9i下會報錯,數(shù)據(jù)庫可以啟動到mount狀態(tài),當(dāng)然再次alter database open之后還是可以打開數(shù)據(jù)庫。10g下open數(shù)據(jù)庫時不在檢查口令文件。win下如果在oracle_home/database/下找不到pwdsid.ora文件,不會尋找任何文件。這里所說的win下如果找不到PWDsid.ora文件之后不會尋找任何文件其實是相對unix下如果找不到orapwSID文件之后會尋找orapw文件而言的。其實 win下尋找口令文件也是有順序的。尋找順序是這樣的:首先尋找注冊表中ora_sid_pwfile環(huán)境變量所指向的口令文件,其次尋找ora_pwfile執(zhí)行的口令文件,最后才尋找$ORACLE_HOME/database/PWDsid.ora ,下面做一個簡單的測試:

??? 開始存在一個口令文件PWDtsid.ora,之后又創(chuàng)建了兩個口令文件pwd.ora和orapwd.ora
??? C:>orapwd file=E:\oracle\product\10.2.0\db_1\databasepwd.ora password=manager entries=5 force=y

??? C:>orapwd file=E:\oracle\product\10.2.0\db_1\databaseorapwd.ora password=manager_system entries=5

??? C:>e:
??? E:>cd E:\oracle\product\10.2.0\db_1\database

??? E:\oracle\product\10.2.0\db_1\database>dir *pwd*

???? 驅(qū)動器 E 中的卷沒有標簽。
???? 卷的序列號是 F6E5-4B31
???? E:\oracle\product\10.2.0\db_1\database 的目錄

??? 2007-12-07? 21:30???????????? 2,048 orapwd.ora
??? 2007-12-07? 21:29???????????? 2,048 pwd.ora
??? 2007-12-06? 21:44???????????? 2,048 PWDtsid.ora

??? 3個口令文件的口令分別是system, manager, system_manager沒有什么特別的意義,都是隨意指定的,其中在注冊表中ora_tsid_pwfile指向了文件E:\oracle\product\10.2.0\db_1\databasepwd.ora,ora_pwfile指向了E:\oracle\product\10.2.0\db_1\databaseorapwd.ora,然后通過遠程client端進行測試:

??? SQL> connect sys/system@testdb as sysdba
??? ERROR:
??? ORA-01017: 用戶名/口令無效; 登錄被拒絕
??? 警告: 您不再連接到 ORACLE。

??? SQL> connect sys/manager@testdb as sysdba
??? 已連接。

??? SQL> connect sys/manager_system@testdb as sysdba
??? ERROR:
??? ORA-01017: 用戶名/口令無效; 登錄被拒絕
??? 警告: 您不再連接到 ORACLE。

??? SQL>

??? 測試結(jié)果顯示要求輸入的口令是manager,而manager對應(yīng)的口令文件是環(huán)境變量ora_tsid_pwfile所指向的pwd.ora,之后刪除環(huán)境變量ora_tsid_pwfile再次連接:


??? SQL> connect sys/system@testdb as sysdba
??? ERROR:
??? ORA-01017: 用戶名/口令無效; 登錄被拒絕
??? 警告: 您不再連接到 ORACLE。

??? SQL> connect sys/manager_system@testdb as sysdba
??? 已連接。

??? SQL>
??? 這次要求輸入的口令是manager_system,而manager_system對應(yīng)的口令文件是環(huán)境變量ora_pwfile所指向的orapwd.ora,之后刪除環(huán)境變量ora_pwfile進行連接測試:

??? SQL> connect sys/system@testdb as sysdba
??? 已連接。

??? SQL>

??? 連接成功,system對應(yīng)的口令文件正是$ORACLE_HOME/database/PWDtsid.ora

??? 接著上面介紹共享口令文件,由于在unix下會尋找orapw文件(該文件不含sid的信息),因此各個實例可以shared口令文件,前提是需要把參數(shù)remote_login_passwordfile設(shè)置為shared,該參數(shù)是靜態(tài)參數(shù),修改之后需要重啟實例,當(dāng)然也可以通過連接的方式(unix下ls)實現(xiàn)口令文件共享,不過沒感覺到共享口令文件有什么好處;win下可以通過在注冊表中指定環(huán)境變量ora_sid_pwfile或者ora_pwfile來改變口令文件的位置和名稱,從而也可以實現(xiàn)口令文件共享。

??? 共享口令文件會有很多問題:
??? 首先要求所有的sys口令相同,其次orcl庫上的用戶xys被授予了sysdba,結(jié)果在test1庫上通過v$pwfile_users也可以看到xys用戶。

??? SQL> connect sys/system as sysdba
??? ERROR:
??? ORA-01017: invalid username/password; logon denied

??? SQL> connect sys/manager as sysdba
??? 已連接到空閑例程。

??? SQL> startup
??? ORACLE 例程已經(jīng)啟動。
??? Total System Global Area 167772160 bytes
??? Fixed Size 1247900 bytes
??? Variable Size 62915940 bytes
??? Database Buffers 100663296 bytes
??? Redo Buffers 2945024 bytes
??? 數(shù)據(jù)庫裝載完畢。
??? 數(shù)據(jù)庫已經(jīng)打開。

??? SQL> alter user sys identified by system;
??? 用戶已更改。

??? SQL> show user
??? USER 為 SYS;

??? SQL> show parameter db_name
??? NAME TYPE VALUE
??? ------------------------------------ ----------- ------------------------------
??? db_name string test1

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

??? SQL> select username from dba_users;
??? USERNAME
??? ------------------------------
??? OUTLN
??? SYS
??? SYSTEM
??? TEST
??? DBSNMP
??? TSMSYS
??? DIP
??? 已選擇7行。

??? 從上面查詢結(jié)果看到數(shù)據(jù)庫orcl和test1,準確的說是實例共享了口令文件之后,test1中根本不存在用戶xys,但是通過v$pwfile_users還是查詢出來了

??? 還有一個問題是如果remote_login_passwordfile=shared則sys的口令通過

??? alter user...不能修改!

??? SQL> show parameter remote_log
??? NAME???????????????????????????????? TYPE??????? VALUE
??? ------------------------------------ ----------- ------------------------------
??? remote_login_passwordfile??????????? string????? SHARED

??? SQL> alter user sys identified by manager;
??? alter user sys identified by manager
??? *
??? 第 1 行出現(xiàn)錯誤:
??? ORA-28046: 不允許更改 SYS 口令

??? 提到alter user...這個系統(tǒng)權(quán)限,我覺得oracle做的不是很安全, 只要有了alter user權(quán)限,sys用戶的口令可以隨意修改

??? ,另外凡是修改具有sysdba or sysoper權(quán)限的用戶,如果通過alter user來修改口令,那么同時修改了口令文件和數(shù)據(jù)庫中的口令。

??? 簡單的測試如下:
??? SQL> create user test11 identified by test11;
??? 用戶已創(chuàng)建。

??? SQL> grant connect , alter user to test11;
??? 授權(quán)成功。

??? SQL> connect test11/test11
??? 已連接。

??? SQL> CONNECT / as sysdba
??? 已連接。

??? SQL> grant select on dba_users to test11;
??? 授權(quán)成功。

??? SQL> connect test11/test11
??? 已連接。

??? SQL> col username format a10
??? SQL> col password format a30
??? SQL> select password , username from dba_users where username ='SYS';
??? PASSWORD?????????????????????? USERNAME
??? ------------------------------ ----------
??? 75800913E1B66343?????????????? SYS

??? SQL> show user
??? USER 為 TEST11;

??? SQL> alter user sys identified by manager;
??? 用戶已更改。

??? SQL> select password , username from dba_users where username ='SYS';
??? PASSWORD?????????????????????? USERNAME
??? ------------------------------ ----------
??? 5638228DAF52805F?????????????? SYS

??? SQL>

??? remote_login_passwordfile=shared時,也不能把sysdba or sysoper授予普通用戶!

??? SQL> grant sysdba to test;
??? grant sysdba to test
??? *
??? 第 1 行出現(xiàn)錯誤:
??? ORA-01999: 口令文件不能在 SHARED 模式下更新

??? SQL> grant sysoper to test;
??? grant sysoper to test
??? *
??? 第 1 行出現(xiàn)錯誤:
??? ORA-01999: 口令文件不能在 SHARED 模式下更新

??? 通過上面兩部分內(nèi)容的解釋, 了解了os認證和口令文件之后,如果為了安全不想讓用戶以sysdba or sysoper權(quán)限連接數(shù)據(jù)庫,可以通過上面的方法屏蔽os認證的同時靜止使用口令文件。

??? 3、sysdba 和 sysoper
??? 很多人可能不了解sysdba and sysoper到底是什么,其實他們是oracle的system privilege,通過查詢系統(tǒng)權(quán)限表system_privilege_map可以清楚的知道:

??? SQL> select name from system_privilege_map where name like 'SYS%';
??? NAME
??? ----------------------------------------------------------------------------
??? SYSOPER
??? SYSDBA

??? 只不過這兩個權(quán)限就是以這種方式發(fā)揮作用的!

??? 值的一提的是win下尤其是home版的xp控制面板中沒有組的可操作界面,而oracle默認安裝之后也沒有為我們創(chuàng)建ora_oper 這個組,因此在以sysoper權(quán)限連接數(shù)據(jù)庫時提示沒有權(quán)限:

??? SQL> connect / as sysoper
??? ERROR:
??? ORA-01031: 權(quán)限不足

??? 為了能夠以sysoper方式連接數(shù)據(jù)庫,于是可以通過dos命令方式創(chuàng)建ora_oper組,同時把os用戶加入到這個組中:

??? E:>net? localgroup ora_oper /add
??? 命令成功完成。

??? E:>net? localgroup ora_oper wch /add
??? 命令成功完成。

??? 有關(guān)localgroup的詳細說明可以通過命令net help localgroup獲得更多的幫助,注意和group的區(qū)別,group用在domain中
??? 再次嘗試接連,連接成功:
??? SQL> connect / as sysoper
??? 已連接。

??? SQL> show user
??? USER 為 PUBLIC;

??? SQL>
??? 但是需要注意的是以sysoper權(quán)限連接數(shù)據(jù)庫時顯示的schema是public,而以sysdba連接時顯示的schema是我們眾所周知的sys,這也是sysdba和sysoper的區(qū)別之一。

??? 同時需要注意的是在linux下默認是可以以sysoper 連接數(shù)據(jù)庫的:

??? [oracle@xys oracle]$ sqlplus /nolog
??? SQL*Plus: Release 11.1.0.6.0 - Production on Fri Dec 7 23:52:49 2007
??? Copyright (c) 1982, 2007, Oracle.? All rights reserved.
??? SQL> connect / as sysoper
??? Connected to an idle instance.

??? SQL> create user wch identified externally;
??? 用戶已創(chuàng)建。

??? SQL> grant create session to wch;
??? 授權(quán)成功。

??? SQL> show parameter auth
??? NAME???????????????????????????????? TYPE??????? VALUE
??? ------------------------------------ ----------- -------------------------
??? os_authent_prefix??????????????????? string????? OPS$
??? remote_os_authent??????????????????? boolean???? FALSE

??? SQL> col username format a10
??? SQL> col password format a30
??? SQL> select username , password from dba_users where username='WCH';
??? USERNAME?? PASSWORD
??? ---------- ------------------------------
??? WCH??????? EXTERNAL

??? SQL> connect /
??? ERROR:
??? ORA-01017: 用戶名/口令無效; 登錄被拒絕
??? 警告: 您不再連接到 ORACLE。

??? SQL>

使用普通用戶os認證的好處是可以在執(zhí)行一些批處理腳本時屏蔽數(shù)據(jù)庫連接用戶的口令,如exp ,expdp . sqlldr等

Oracle 口令文件


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 狠狠热精品免费观看 | 久久98| 四虎影视在线影院在线观看 | 欧美日韩视频在线 | 精品精品国产自在香蕉网 | 亚洲美女黄视频 | 梦想成为魔法少女在线观看 | 精品国产一区二区二三区在线观看 | 欧美最大成人毛片视频网站 | 免费黄色一级大片 | 亚洲国产精品热久久 | 在线国产一区 | 免费夜色污私人影院网站 | 伊人久久大杳蕉综合大象 | 亚洲国产成人久久 | 在线观看亚洲精品专区 | 日本不卡三级 | 中文字幕亚洲一区婷婷 | 欧美在线中文 | 日韩欧美视频在线 | 日韩成人黄色片 | 成人毛片免费视频 | 久久加勒比| 特级一级毛片 | 91视频美女 | 国产成人午夜精品影院游乐网 | 99久久99热久久 | 狠狠狠狠狠狠 | 性影院| 大学生不戴套毛片视频 | 国内精品免费久久久久妲己 | aaaa级日本片免费视频 | 国产成人综合95精品视频免费 | 国产精品欧美一区二区三区不卡 | 中文字幕第66页永久乱码 | 四虎影院免费视频 | 99国产精品高清一区二区二区 | 国产精品久久大陆 | 26uuu欧美视频在线观看 | 黄色片网站视频 | 国产精品久久久久久亚洲伦理 |