Oracle

Oracle 數據庫 18c 中“_oracle_script”=true 的影響

  • June 14, 2020

我剛剛安裝了 Oracle XE 18c(我是從 11g XE 遷移過來的)…執行安裝程序後,我看到了新功能;例如,Oracle 現在支持多租戶模型和稱為可插拔數據庫的概念……

我發現的第一個問題是創建一個新使用者……看起來為了支持可插拔數據庫的概念,使用者名必須符合一些命名規則前綴(即c##)……搜尋這個問題,我找到這個連結……他們建議使用舊語法(在non-CDB 上使用的那個)創建使用者,我們應該使用以下方法更改會話:

alter session set "_ORACLE_SCRIPT"=true;

但是,他們警告說,使用者不能在任何可插入數據庫中使用……

**所以,這是我的問題:**如果在送出命令後創建使用者,使用者是在 ROOT 容器(CDB$ROOT)中創建的嗎?此類使用者將是 Oracle 實例的本地使用者,可用於管理所有其他可插拔數據庫,包括 CDB(假設此類使用者具有所有必需的權限)?

謝謝!

免責聲明:我不是 DBA,我只是一名軟體開發人員,對數據庫有先進的知識……

在探勘了"_ORACLE_SCRIPT"=true命令並在數據庫中進行了一些測試之後,我得出了以下結論:

  • _ORACLE_SCRIPT"=true是一個強大的命令。因為它是一個下劃線參數,所以它應該是私有的並且只用於Oracle ……但是,它似乎是應該使用的有效情況,例如,這個但這些假設非常罕見)。 ..
  • 在我提出的案例中,當我發出命令時,我關閉了一些數據庫保護_ORACLE_SCRIPT"=true,允許繞過創建“commons”使用者所需的語法……使用者是在根容器(又名CDB$ROOT)中創建的…… .我可以通過兩個查詢來驗證這一點:

SELECT SYS_CONTEXT('USERENV', 'CON_NAME') from dual;

SELECT * FROM ALL_USERS ORDER BY USERNAME;

第一個查詢顯示目前容器,第二個查詢顯示該容器中可用的使用者。

奇怪的部分來自查詢視圖“all_users”,它說我剛剛創建的使用者是“ORACLE_MAINTAINED”的普通使用者(不是)……可悲的是,這樣的使用者並不常見,因為你不能和他一起訪問其他可插拔數據庫(正如我提供的連結所說)並且它在其他可插拔數據庫中不存在……

所以,總結一下:使用者是在CDB$ROOT繞過 Oracle 語法規則中創建的,但是這樣的使用者只是這樣的容器的本地使用者……

C##是的,將在 CDB 中創建以開頭的普通使用者。它們將在所有 PDB 中可用(假設它們具有正確的權限)。

如果您需要在 PDB 中創建使用者,請確保連接到 PDB ( SID=XEPDB) 而不是 CDB ( SID=XE)

引用自:https://dba.stackexchange.com/questions/269055