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

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

 

[email protected]>conn sys/Alpha2019#@pdb1 as sysdba;

  Connected.

  [email protected]>CREATE USER study NO AUTHENTICATION;

  User created.

  [email protected]>CREATE USER toms IDENTIFIED BY toms default tablespace users;

  User created.

  [email protected]>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”

 

  [email protected]>


 

 

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等),否則會遇到類似如下的錯誤:

 

       [email protected]>grant sysdba to study;

       grant sysdba to study

       *

       ERROR at line 1:

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

但19.2中是可以的,比如

 

       [email protected]>grant sysdba to study;

       Grant succeeded.

       [email protected]>

 

  [email protected]>ALTER USER study IDENTIFIED BY study quota unlimited on users;

  User altered.

  [email protected]>grant create session, create table to study;

  Grant succeeded.

  [email protected]>conn study/[email protected]

  Connected.

 

  [email protected]>

  [email protected]>create table a (no int);

  Table created.

  [email protected]>create table b (str varchar2(32));

  Table created.

  [email protected]>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  [email protected]>grant sysdba to study;

  Grant succeeded.

 

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

 

       [email protected]>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.

 

       [email protected]>revoke sysdba from study;

       Revoke succeeded.

       [email protected]>ALTER USER study no authentication;

       User altered.

       [email protected]>

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

 

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

 

     [email protected]>conn study/[email protected]

       ERROR:

       ORA-01017: invalid username/password; logon denied

 

       Warning: You are no longer connected to ORACLE.

       [email protected]>

 

3)通過single session proxy方式訪問

 

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

  [email protected]>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  [email protected]>grant connect, resource to toms;

  Grant succeeded.

  [email protected]>conn toms/[email protected]

  Connected.

  [email protected]>create table test (no int );

  Table created.

  [email protected]>

 

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

  [email protected]>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  [email protected]>ALTER USER study GRANT CONNECT through toms;

  User altered.

 

  連接測試

  [email protected]>CONNECT toms[study]/[email protected]

  Connected.

 

  [email protected]>show user

  USER is “STUDY”

  [email protected]>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

 

  [email protected]>select table_name from tabs;  ##看到的是study用戶下的物件

  TABLE_NAME

  —————–

  B

  A

  [email protected]>insert into a values(1);

  1 row created.

  [email protected]>commit;

  Commit complete.

  [email protected]>select * from a;

          NO

  ———-

           1

  [email protected]>  

4)回收single session proxy訪問設置

 

  [email protected]>conn sys/Alpha2019#@pdb1 as sysdba

  Connected.

  [email protected]>select * from proxy_users;

  PROXY  CLIENT     AUT     FLAGS 

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

  TOMS   STUDY      NO      PROXY MAY ACTIVATE ALL CLIENT ROLES

  [email protected]>ALTER USER study revoke CONNECT through toms;

  User altered.

  [email protected]>select * from proxy_users;

  no rows selected

  [email protected]>CONNECT toms[study]/[email protected]

  ERROR:

  ORA-01017: invalid username/password; logon denied

 

  Warning: You are no longer connected to ORACLE.

  [email protected]>

 

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

 

 

    赞(0)

    分享創造快樂