Oracle

了解 SQL Developer 使用者帳戶

  • October 10, 2020

我今天安裝了這個 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;

我有兩個問題:

  1. 為什麼虛擬使用者的 SQLDeveloper 密碼是:dummy。我沒有具體說明這一點。
  2. 看來我現在可以使用以下憑據登錄 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

然後提示我輸入密碼,但是任何密碼似乎都可以使用。

  1. 是的,你做到了:

create user dummy identified by dummy;

  1. 預設情況下,對於本地登錄,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.

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