歡迎光臨
每天分享高質量文章

Oracle 19c 新特性:Schema Only Account詳解

點選▲關註 “資料和雲”   給公眾號標星置頂

更多精彩 第一時間直達

老張拉呱:thomas zhang,甲骨文雲平臺事業部資深技術顧問,2008年加入甲骨文公司資料庫諮詢部門,10+年甲骨文解決方案諮詢支援經驗,資深系統工程師、Oracle OCM認證專家,具有豐富的Cloud /IT專案經驗。目前主要負責甲骨文中國北方區(醫院/衛生、交通、製造、教育、政府、證券、媒體、金融、零售等行業)客戶的資料庫、中介軟體、IaaS/PaaS、整合系統等相關技術解決方案諮詢工作。

簽名:我為人人,人人為我,三人行,必有我師

新浪微博: http://weibo.com/tomszrp

 

 

從 Database 18c 開始,可以建立 Schema Only Account(可以擁有物件、許可權/角色,但不允許直接連線的 Schema),不過可以透過 single session proxy 的方式連線訪問。

 

這種型別的 account 設計既是為了滿足 Oracle-provided schemas 同時也適用於客戶應用設計的需要,建立使用者的時候不需要指定密碼或授權方式。除非使用 ALTER USER 陳述句分配身份驗證方法,否則無法對 Schema Only Account 進行身份驗證。DBA_USERS_WITH_DEFPWD資料字典檢視中不再包含Schema Only Account 資訊。

 

從19c開始,大部分Oracle-providedschemas,除了SYS,SYSTEM以及Sample Schema User Accounts(比如HR)都是Schema Only Account。也就是說,這些帳戶都是在沒有密碼的情況下建立的,好處是管理員無需週期性的維護這些密碼,同時也降低了攻擊者使用預設密碼侵入這些帳戶的安全風險。我們可以透過dba_users資料字典的authentication_type欄位來判斷,如果是NONE,表示該account是Schema Only的。當然了,當我們確實有需要的時候,可以為這些帳戶分配密碼,但是為了更好的安全性,Oracle 建議您使用完畢後將它們再設定為Schema Only。

 

•關於Schema Only Account的一些說明:

     1)可以是 administrator 和 non-administratoraccounts

     2)這種account只能在data base instance中建立,不支援 ASM instance

     3)可以授予 system privileges (比如CREATE ANY TABLE)和管理員角色(比如DBA)

     4)可以建立物件比如tables 、procedures等(根據所授許可權決定)

     5)可以配置透過 single session proxy的方式連線訪問

     6)不能透過 data base link 使用

tips:18c中Schema Only Account不能擁有SYSDBA,SYSOPER, SYSBACKUP, SYSKM, SYSASM, SYSRAC, SYSDG這些管理許可權,19c中取消了這一限制。

 

下麵是在18.3和19.2綜合體驗的一個筆記,希望能給大家一點啟發,後面大部分都是指令碼,介紹性的話語很少,我想大家應該能看明白。

 


1)建立一個Schema-Only Account

 

CDB$ROOT@SYS>conn sys/Alpha2019#@pdb1 as sysdba;

  Connected.

  PDB1@SYS>CREATE USER study NO AUTHENTICATION;

  User created.

  PDB1@SYS>CREATE USER toms IDENTIFIED BY toms default tablespace users;

  User created.

  PDB1@SYS>SELECT username, password, password_versions, account_status, authentication_type

           FROM dba_users 

           WHERE username in (‘STUDY’,’TOMS’);

 

     CREATE USER “STUDY” NO AUTHENTICATION

        DEFAULT TABLESPACE “USERS”

        TEMPORARY TABLESPACE “TEMP”

 

  PDB1@SYS>


 

 

2)AUTHENTICATION 和 NO AUTHENTICATION之間的轉換

 

透過如下命令可以很容易的在Schema Only Account和Normal Account之間轉換:

       ALTER USER … IDENTIFIED BY …;

       ALTER USER … NO AUTHENTICATION;

 

說明:18c的時候Schema only accounts可以被授予所有的normal database roles和privileges,但不能是administrative privileges(比如SYSDBA, SYSOPER, SYSRAC等),否則會遇到類似如下的錯誤:

 

       CDB$ROOT@cdb1>grant sysdba to study;

       grant sysdba to study

       *

       ERROR at line 1:

       ORA-40366: Administrative privilege cannot be granted to this user.

但19.2中是可以的,比如

 

       CDB$ROOT@demo>grant sysdba to study;

       Grant succeeded.

       CDB$ROOT@demo>

 

  PDB1@SYS>ALTER USER study IDENTIFIED BY study quota unlimited on users;

  User altered.

  PDB1@SYS>grant create session, create table to study;

  Grant succeeded.

  PDB1@SYS>conn study/study@pdb1

  Connected.

 

  PDB1@STUDY>

  PDB1@STUDY>create table a (no int);

  Table created.

  PDB1@STUDY>create table b (str varchar2(32));

  Table created.

  PDB1@STUDY>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  PDB1@SYS>grant sysdba to study;

  Grant succeeded.

 

註意:在18c測試的時候,會遇到類似如下錯誤,所以必須先透過V$PWFILE_USERS 檢視找到那些administrative privileges並收回。

 

       PDB1@pdb1>ALTER USER study no authentication;

       ALTER USER study no authentication

       *

       ERROR at line 1:

       ORA-40367: An Administrative user cannot be altered to have no authentication type.

 

       CDB$ROOT@cdb1>revoke sysdba from study;

       Revoke succeeded.

       CDB$ROOT@cdb1>ALTER USER study no authentication;

       User altered.

       CDB$ROOT@cdb1>

說明:19c(19.2)測試中,是支援administrative privileges的,所以可以直接ALTER USER study no authentication;

 

這個時候,study使用者就不能直接連線訪問了,因為已經切換為Schema Only Account了 ,示例如下:

 

     PDB1@pdb1>conn study/study@pdb1

       ERROR:

       ORA-01017: invalid username/password; logon denied

 

       Warning: You are no longer connected to ORACLE.

       PDB1@>

 

3)透過single session proxy方式訪問

 

我這裡用之前建立的toms使用者來做proxy user,下麵先在toms使用者下建立個測試表

  PDB1@SYS>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  PDB1@SYS>grant connect, resource to toms;

  Grant succeeded.

  PDB1@SYS>conn toms/toms@pdb1

  Connected.

  PDB1@TOMS>create table test (no int );

  Table created.

  PDB1@TOMS>

 

設定study(Scheam Only Account)透過toms代理連線(簡單示例,詳細語法參見相關手冊)

  PDB1@TOMS>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  PDB1@SYS>ALTER USER study GRANT CONNECT through toms;

  User altered.

 

  連線測試

  PDB1@SYS>CONNECT toms[study]/toms@pdb1

  Connected.

 

  PDB1@STUDY>show user

  USER is “STUDY”

  PDB1@STUDY>SELECT sys_context(‘USERENV’,’SESSION_USER’) AS session_user,

                   sys_context(‘USERENV’,’SESSION_SCHEMA’) AS session_schema,

                   sys_context(‘USERENV’,’PROXY_USER’) AS proxy_id,

                   USER

            FROM dual;

 

  SESSION_USER    SESSION_SCHEMA     PROXY_ID    USER

  ————— —————— ———– ————

  STUDY           STUDY              TOMS        STUDY

 

  PDB1@STUDY>select table_name from tabs;  ##看到的是study使用者下的物件

  TABLE_NAME

  —————–

  B

  A

  PDB1@STUDY>insert into a values(1);

  1 row created.

  PDB1@STUDY>commit;

  Commit complete.

  PDB1@STUDY>select * from a;

          NO

  ———-

           1

  PDB1@STUDY>  

4)回收single session proxy訪問設定

 

  PDB1@STUDY>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  PDB1@SYS>select * from proxy_users;

  PROXY  CLIENT     AUT     FLAGS 

  —— ———- ——- ————————————-

  TOMS   STUDY      NO      PROXY MAY ACTIVATE ALL CLIENT ROLES

  PDB1@SYS>ALTER USER study revoke CONNECT through toms;

  User altered.

  PDB1@SYS>select * from proxy_users;

  no rows selected

  PDB1@SYS>CONNECT toms[study]/toms@pdb1

  ERROR:

  ORA-01017: invalid username/password; logon denied

 

  Warning: You are no longer connected to ORACLE.

  PDB1@>

 

好了,本小節的簡單示例就到這裡,希望能給大家起到一點簡單的引導示範作用,不當之處,請以實際環境和當前檔案說明為準。

 

 

    贊(0)

    分享創造快樂