了解 SQL Developer 使用者帳戶
我今天安裝了這個 Docker 鏡像:https ://hub.docker.com/_/oracle-database-enterprise-edition
我按照此處的說明進行操作:https ://www.youtube.com/watch?v=ciYsDbBx80s 。基本上我執行了以下命令:
docker pull store/oracle/database-enterprise:12.2.0.1 docker run -d -p 1521:1521 --name oracle store/oracle/database-enterprise:12.2.0.1 docker exec -it 0500ab7ee75c bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
然後在sqlpus中:
connect sys as sysdba Enter password: anyrandompassword alter session set "_ORACLE_SCRIPT"=true; create user dummy identified by dummy; SQL> GRANT ALL PRIVILEGES TO dummy; SQL>ALTER USER sysdba IDENTIFIED BY Password1 ACCOUNT UNLOCK;
我有兩個問題:
- 為什麼虛擬使用者的 SQLDeveloper 密碼是:dummy。我沒有具體說明這一點。
- 看來我現在可以使用以下憑據登錄 SQL Developer(如此處所述:https ://stackoverflow.com/questions/9129664/unable-to-log-in-to-database-as-sys-with-oracle -sql-開發者):
使用者名:SYS AS SYSDBA 密碼:Password1
但是,當我在 sqlplus 中執行以下命令時
connect sys as sysdba
然後提示我輸入密碼,但是任何密碼似乎都可以使用。
- 是的,你做到了:
create user dummy identified by dummy;
- 預設情況下,對於本地登錄,Oracle 數據庫使用基於作業系統使用者組成員身份的作業系統身份驗證。任何屬於該
dba
組的成員或任何指定為該OSDBA
組的組的使用者都可以在本地以 sysdba 身份登錄,而無需提供密碼(或提供任何密碼)。我建議你忘記這部分:
alter session set "_ORACLE_SCRIPT"=true; create user dummy identified by dummy;
帶有此解決方法的教程(
alter session set "_ORACLE_SCRIPT"=true;)
是由於懶惰或對 Oracle 12c 中引入的 CDB 架構缺乏了解的結果。這就是不正確的“解決方案”傳播的方式。作者忘記告訴您,通過執行上述操作,您違反了基本原則CDB架構(因為您創建了一個被視為內置Oracle管理使用者的新使用者+您將來的數據應該儲存在可插拔數據庫中,而不是根容器中)。這不是容器數據庫的使用方式。而不是執行上述操作,在使用 this 獲得 SQL 提示後
docker exec -it 0500ab7ee75c bash -c "source /home/oracle/.bashrc; sqlplus /nolog"
,您應該按照以下方式進行操作。連接到數據庫實例,下面連接到數據庫的根容器。此時不要打擾密碼:
connect / as sysdba
列出可插拔數據庫,您應該會看到一個名為
ORCLDB1
.SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 ORCLPDB1 READ WRITE NO SQL>
連接到該可插拔數據庫:
SQL> show con_name CON_NAME ------------------------------ CDB$ROOT SQL> alter session set container=ORCLPDB1; Session altered. SQL> show con_name CON_NAME ------------------------------ ORCLPDB1 SQL>
並在那裡創建使用者:
SQL> create user dummy identified by dummy; User created. SQL> GRANT ALL PRIVILEGES TO dummy; Grant succeeded. SQL>
現在您可以連接虛擬使用者,該使用者位於 ORCLPDB1 可插拔數據庫中,而不是在根容器中。為此,請
orclpdb1.localdomain
用作服務名稱而不是ORCLCDB.localdomain
.