oracle安裝sid重複問題,oraclesid重複
Oracle卸載後再次安裝,設定的SID相同出現“指定的SID在本機上已經存在。請指定一個不同的SID。”
SID簡介
SID也就是安全性識別碼(Security Identifiers),是標識使用者、組和電腦帳戶的唯一的號碼。在第一次建立該帳戶時,將給網路上的每一個帳戶發布一個唯一的 SID。Windows 2000 中的內部進程將引用帳戶的 SID 而不是帳戶的使用者或組名。如果建立帳戶,再刪除帳戶,然後使用相同的使用者名稱建立另一個帳戶,則新帳戶將不具有授權給前一個帳戶的權力或許可權,原因是該帳戶 具有不同的 S識別碼。安全性識別碼也被稱為安全性識別碼 或 SID。
SID的作用
使用者通過驗證後,登陸進程會給使用者一個存取權杖,該令牌相當於使用者訪問系統資源的票證,當使用者試圖訪問系統資源時,將存取權杖提供給 Windows NT,然後 Windows NT 檢查使用者試圖訪問對象上的存取控制清單。如果使用者被允許訪問該對象,Windows NT將會分配給使用者適當的存取權限。
存取權杖是使用者在通過驗證的時候有登陸進程所提供的,所以改變使用者的許可權需要登出後重新登陸,重新擷取存取權杖。
SID號碼的組成
如果存在兩個同樣SID的使用者,這兩個帳戶將被鑒別為同一個帳戶,原理上如果帳戶無限制增加的時候,會產生同樣的SID,在通常的情況下SID是唯一的,他由電腦名稱、目前時間、目前使用者態線程的CPU耗費時間的總和三個參數決定以保證它的唯一性。
一個完整的SID包括:
• 使用者和組的安全描述
• 48-bit的ID authority
• 修訂版本
• 可變的驗證值Variable sub-authority values
例:S-1-5-21-31044058 8- 2 500 36847- 5 803 895 05-500
我們來先分析這個重要的SID。第一項S表示該字串是SID;第二項是SID的版本號碼,對於 2000來說,這個就是1;然後是標誌符的頒發機構(identifier authority),對於2000內的帳戶,頒發機構就是NT,值是5。然後表示一系列的子頒發機構,前面幾項是標誌域的,最後一個標誌著域內的帳戶和 組。
SID的獲得
開始-運行-regedit32-HKEY_LOCAL_MACHINESAMSAMDomainsBuiltinAliasesMembers,找到本地的域的代碼,展開後,得到的就是本地帳號的所有SID列表。
其中很多值都是固定的,比如第一個000001F4(16進位),換算成十進位是500,說明是系統建立的內建管理員帳號administrator,000001F5換算成10進位是501,也就是GUEST帳號了,詳細的參照後面的列表。
這一項預設是system可以完全控制,這也就是為什麼要獲得這個需要一個System的Cmd的Shell的原因了,當然如果許可權足夠的話你可以把你要添加的帳號添加進去。
或者使用Support Tools的Reg工具:
reg query “HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersionProfileList
還有一種方法可以獲得SID和使用者名稱稱的對應關係:
1. Regedit32:
HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindows NTCurrentVersion ProfileList
2. 這個時候可以在左側的視窗看到SID的值,可以在右側的視窗中ProfileImagePath看到不同的SID關聯的使用者名稱,
比如%SystemDrive%Documents and SettingsAdministrator.momo這個對應的就是本地機器的管理員SID
%SystemDrive%Documents and SettingsAdministrator.domain這個就是對應域的管理員的帳戶
另外微軟的ResourceKit裡面也提供了工具getsid,sysinternals的工具包裡面也有Psgetsid,其實感覺原理都是讀取註冊表的值罷了,就是省了一些事情。
Oracle SID重複解決方案
Oracle卸載後再次安裝,設定的SID相同出現“指定的SID在本機上已經存在。請指定一個不同的SID。”
實現方法:
1、 開始->設定->控制台->管理工具->服務 停止所有Oracle服務。
2、 開始->程式->Oracle - OraHome81->Oracle Installation Products-> Universal Installer 卸裝所有Oracle產品,但Universal Installer本身不能被刪除
5、 運行regedit,選擇HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE,按del鍵刪除這個入口。
6、 運行regedit,選擇HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services,滾動這個列表,刪除所有Oracle入口。
7、 運行regedit,HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Application,刪除所有Oracle入口。
8、 開始->設定->控制台->系統->進階->環境變數 刪除環境變數CLASSPATH和PATH中有關Oracle的設定
9、 從案頭上、STARTUP(啟動)組、程式菜單中,刪除所有有關Oracle的組和表徵圖
10、 刪除\Program Files\Oracle目錄
11、 重新啟動電腦,重起後才能完全刪除Oracle所在目錄
12、 刪除與Oracle有關的檔案,選擇Oracle所在的預設目錄C:\Oracle,刪除這個入口目錄及所有子目錄,並從Windows 2000目錄(一般為C:\WINNT)下刪除以下檔案ORACLE.INI、oradim73.INI、oradim80.INI、 oraodbc.ini等等。
13、 WIN.INI檔案中若有[ORACLE]的標記段,刪除該段
14、 如有必要,刪除所有Oracle相關的ODBC的DSN
15、 到事件檢視器中,刪除Oracle相關的日誌
說明:
其中,6、7兩條為重點刪除對象,通常刪除時我們易刪除5,但不易發現6、7.
如果有個別DLL檔案無法刪除的情況,則不用理會,重新啟動,開始新的安裝,
安裝時,選擇一個新的目錄,則,安裝完畢並重新啟動後,老的目錄及檔案就可以刪除掉了。