首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 10g R2 CONNECT 角色權限變更:從 8 項權限縮減至僅 CREATE SESSION 的影響與還原

     編輯:Oracle 資料庫基礎

Oracle 10g R2 重大安全強化:內建 `CONNECT` 角色從原本擁有 8 項建立類權限 (`CREATE TABLE`、`CREATE VIEW`...),縮減為**僅保留 `CREATE SESSION`**。導致依賴 `CONNECT` 角色的應用帳號無法建表、建視圖等。本文列出被移除權限清單、提供官方還原腳本 `rstrconn.sql`、並建議自訂角色替代內建角色的最佳實踐。

CONNECT 角色權限對比

被移除的 7 項權限

  1. CREATE TABLE
  2. CREATE VIEW
  3. CREATE SYNONYM
  4. CREATE CLUSTER
  5. CREATE DATABASE LINK
  6. CREATE SEQUENCE
  7. ALTER SESSION

官方還原腳本 (rstrconn.sql)


-- 位置:$ORACLE_HOME/rdbms/admin/rstrconn.sql
-- 內容:
GRANT CREATE SESSION,
      CREATE TABLE,
      CREATE VIEW,
      CREATE SYNONYM,
      CREATE DATABASE LINK,
      CREATE CLUSTER,
      CREATE SEQUENCE,
      ALTER SESSION
TO CONNECT;

執行方式:


SQL> @$ORACLE_HOME/rdbms/admin/rstrconn.sql
SQL> COMMIT;

影響評估與遷移建議

版本CONNECT 角色包含權限
10g R1 及以前CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, ALTER SESSION
10g R2 及以後僅 CREATE SESSION
場景影響建議對策
舊應用直接 GRANT CONNECT TO app_userapp_user 喪失建表/建視圖等權限,應用報 ORA-01031短期:執行 rstrconn.sql 還原;長期:改用自訂角色
新應用開發若繼續用 CONNECT 角色,權限不足直接建立自訂角色,勿依賴內建角色
合規/稽核要求最小權限CONNECT 角色 (舊版) 權限過大;新版過小自訂角色精確授權,滿足合規

自訂角色替代方案 (標準化範本)


-- 1. 建立應用開發角色
CREATE ROLE app_developer;

-- 2. 精確授予所需系統權限
GRANT CREATE SESSION,
      CREATE TABLE,
      CREATE VIEW,
      CREATE SEQUENCE,
      CREATE PROCEDURE,
      CREATE TRIGGER,
      CREATE TYPE,
      CREATE SYNONYM,
      CREATE DATABASE LINK
TO app_developer;

-- 3. 表空間配額 (替代 UNLIMITED TABLESPACE)
ALTER USER app_user QUOTA 500M ON users;
ALTER USER app_user QUOTA 1G ON data_ts;

-- 4. 授予角色給使用者
GRANT app_developer TO app_user;

-- 5. 設為預設角色 (登入自動啟用)
ALTER USER app_user DEFAULT ROLE app_developer;

版本演進時間軸

  • 9i/10g R1: `CONNECT` = 8 項建立權限 + `CREATE SESSION`。
  • 10g R2 (10.2.0.1+): `CONNECT` 縮減為 `CREATE SESSION`,發布 `rstrconn.sql` 還原腳本。
  • 11g/12c/18c/19c/21c: 維持新版 `CONNECT` 定義,`rstrconn.sql` 仍隨附。
  • 23c: 建議完全棄用 `CONNECT`/`RESOURCE`,採用細粒度權限模型。

快速檢測腳本


-- 檢查目前 CONNECT 角色權限
SELECT privilege FROM role_sys_privs WHERE role = 'CONNECT';

-- 掃描被授予 CONNECT 角色的使用者
SELECT grantee FROM dba_role_privs WHERE granted_role = 'CONNECT';

-- 評估影響:這些使用者是否需建表/建視圖權限
SELECT u.username,
       CASE WHEN EXISTS (SELECT 1 FROM dba_sys_privs WHERE grantee = u.username AND privilege LIKE 'CREATE %')
            THEN '有直接權限' ELSE '可能受影響' END AS status
FROM   dba_users u, dba_role_privs r
WHERE  u.username = r.grantee
AND    r.granted_role = 'CONNECT';

總結

10g R2 `CONNECT` 角色瘦身是 Oracle 安全預設值強化的里程碑。雖有 `rstrconn.sql` 還原腳本,但**長期正解是建立自訂角色,精確授予業務所需權限**,徹底擺脫內建角色變更帶來的相容性風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved