tft每日頭條

 > 科技

 > oracle基礎角色

oracle基礎角色

科技 更新时间:2024-12-23 18:55:02

【關鍵術語】

Role 角色

Enabling role 角色生效

Disabling role 角色失效

Predefined roles 預定義角色

Application roles 應用角色

Default roles 默認角色

3.1 角色概述 3.1.1 角色的作用

● 簡化權限管理:

使用角色可簡化權限管理。可以将一些權限授予某個角色,然後将該角色授予每個用戶,而不是将同一組權限授予多個用戶。

● 動态進行權限管理:

如果修改了與某個角色關聯的權限,則授予該角色的所有用戶都會立即自動獲得修改過的權限。

● 有選擇地使用權限:

通過啟用或禁用角色可以暫時打開或關閉權限。啟用角色還可以用來驗證用戶是否已授予該角色。

當建立用戶時,用戶沒有任何權限。為使用戶可以連接到數據庫并執行各種操作,必須 為其授予相應的系統權限或對象權限。假定要使用戶 A、B、C 能夠連接到數據庫,并具有創建表的權限和可以在 SCOTT.EMP 表上執行 INSERT、UPDATE 操作,那麼需要進行 12次授權操作。如圖 P1-1 所示。

oracle基礎角色(Oracle數據庫用戶管理之角色管理)1

如果将來要收回用戶 A、B、C 的 INSERT ON SCOTT.EMP 權限,則分别需要從每個用 戶處收回該權限,共需要三次收回權限的操作。

因為用戶 A,B,C 具有相似的權限需求,我們可以通過角色簡化授權和收權操作的次數。假定使用角色,首先可以将這四種權限授予角色 OE,然後将該角色分别授予 A,B,C 用戶,隻需要進行 7 次授權操作,顯然可以降低授權次數。如圖 P1-2 所示。

oracle基礎角色(Oracle數據庫用戶管理之角色管理)2

如果要回收用戶 A、B、C 的 INSERT ON SCOTT.EMP,那麼隻需要從角色 OE 處收回INSERT ON SCOTT.EMP 對象權限就可以了。

所以,角色使得權限的授予和回收變得方便和簡化了。

結論:

在大多數系統中,将必需的權限一個一個授予每一個用戶是很耗時的工作,而且很有可

能會出錯。Oracle 軟件通過角色可實現簡單且受控的權限管理。角色是可授予用戶或其它

角色的、由相關權限組成的一些命名組。角色的設計目的是為了簡化數據庫中的權限管理,

從而可提高數據庫的安全性。

角色特性:

  • • 角色就像用戶,可以授予角色或撤銷角色權限。
  • • 角色就像系統權限,可以授予用戶或其它角色,也可以從用戶或其它角色撤銷。
  • • 角色可以由系統權限和對象權限組成。
  • • 可以對授予某一角色的每一個用戶啟用或禁用該角色。
  • • 可能需要口令才能啟用角色。
  • • 角色不由任何用戶擁有,角色也不屬于任何方案。
3.1.2 系統預定義角色

角色是一組相關權限的命名集合,使用角色最主要的目的是簡化權限管理。當建立數據

庫、安裝了數據字典和 PL/SQL 包之後,Oracle 會自動建立一些預定義角色。下面介紹一

些 Oracle 常用的預定義角色:

功能角色

已經創建了一些授權您管理特殊功能的其它角色(如果已安裝這些功能)。例如,

XDBADMIN 包含管理擴展标記語言(XML) 數據庫(如果已安裝此功能)所需的權限。

AQ_ADMINISTRATOR_ROLE 提供管理高級隊列的權限。HS_ADMIN_ROLE 包括管理異種服務所需的權限。在沒有 Oracle 技術支持協助的情況下,一定不能改變授予這些功能角色的權限,因為這樣做可能會無意禁用所需的功能

1)CONNECT 角色

� Oracle 10g R2之前:

  • 1 CREATE SESSION
  • 2 CREATE TABLE
  • 3 CREATE VIEW
  • 4 CREATE SYNONYM5 CREATE CLUSTER
  • 6 CREATE DATABASE LINK
  • 7 CREATE SEQUENCE
  • 8 ALTER SESSION

� Oracle 10g R2之後:

oracle CONNECT 角色現在隻有這一個權限: CREATE SESSION

如果想還原原來的 oracle CONNECT 角色的設置,Oracle 提供了下面的腳本:

$ORACLE_HOME/rdbms/admin/rstrconn.SQL.

2)RESOURCE 角色
  • 1 CREATE CLUSTER
  • 2 CREATE SEQUENCE
  • 3 CREATE TRIGGER
  • 4 CREATE TABLE
  • 5 CREATE PROCEDURE
  • 6 CREATE TYPE
  • 7 CREATE OPERATOR
  • 8 CREATE INDEXTYPE

從 role_sys_privs 中看 ORACLE resource 角色的權限:

SQL> select PRIVILEGE from role_sys_privs where role='RESOURCE';

當把 ORACLE resource 角色授予一個 user 的時候,不但會授予 ORACLE resource 角色

本身的權限,而且還有 unlimited tablespace 權限。

1 SQL> conn desk 2 Enter password: 3 Connected. 4 SQL> select PRIVILEGE from user_sys_privs; 5 no rows selected 6 SQL> conn / as sysDBA 7 Connected. 8 SQL> grant resource to desk; 9 Grant succeeded. 10 SQL> conn desk 11 Enter password: 12 Connected. 13 SQL> select PRIVILEGE from user_sys_privs; 14 PRIVILEGE 15 ---------------------------------------- 16 UNLIMITED TABLESPACE 17 SQL> 18 當把 resource 授予一個 role 時,就不會授予 unlimited tablespace 權限 19 SQL> show user 20 USER is "SYS" 21 SQL> create role testrole identified using testrole; 22 Role created. 23 SQL> revoke resource from desk; 24 Revoke succeeded. 25 SQL> grant resource to testrole; 26 Grant succeeded. 27 SQL> grant testrole to desk; 28 Grant succeeded. 29 SQL> conn desk 30 Enter password: 31 Connected. 32 SQL> select privilege from user_sys_privs; 33 no rows selected 34 SQL>

3)DBA 角色

DBA 是在建立數據庫時 Oracle 執行腳本 SQL.BSQ 自動建立的角色,該角色具有所有 系統權限以及 WITH ADMIN OPTION 選項。

要注意的是,CONNECT、RESOURCE、DBA 三種角色是為與先前版本兼容而保留的, 在将來版本中可能不會自動建立。

4)EXP_FULL_DATABASE 角色

EXP_FULL_DATABASE 角色是在安裝數據字典時執行 CATEXP.SQL 腳本建立的角色,

該角色用于執行數據庫的完全導出和增量導出操作,并且它包含以下一些權限和角色:

系統權限 SELECT ANY TABLE、BACKUP ANY TABLE、EXECUTE ANY PROCEDURE、

EXECUTE ANY TYPE、ADMINISTER RESOURCE MANAGER,在表 SYS.INCVID、SYS.

INCFIL 以 及 SYS . INCEXP 上 的 INSERT 、 DELETE 和 UPDATE 對 象 權 限 , 以 及

EXECUTE_CATALOG_ROLE 和 SELECT_CATALOG_ROLE 角色。

5)IMP_FULL_DATABASE 角色

IMP_FULL_DATABASE 角色也是在安裝數據字典時執行 CATEXP.SQL 腳本建立的角

色,該角色用于執行完全數據庫導人操作,它包含了 EXECUTE CATALOG ROLE 和

SELECT_CATALOG_ROLE 角色以及大量系統權限(查詢 DBA_ SYS_ PRIVS)。

6)DELETE_CATALOG_ROLE 角色

DELETE_CATALOG_ROLE 是在建立數據庫時 Oracle 執行 SQL.BSQ 自動建立的角色,該角色提供了在系統審計表 SYS.AUD$上的 DELETE 對象權限。

7)EXECUTE_CATALOG_ROLE 角色

EXECUTE_CATALOG_ROLE 是在建立數據庫時 Oracle 執行 SQL.BSQ 自動建立的角

色,該角色提供了對所有系統 PL/SQL 包的 EXECUTE 對象權限。

8)SELECT_CATALOG_ROLE 角色

SELECT_CATALOG_ROLE 是在建立數據庫時 Oracle 執行 SQLBSQ 自動建立的角色,

該角色提供了在所有數據字典上的 SELECT 對象權限。

3.2 創建和使用角色 3.2.1 創建角色

盡管在設計應用時可以直接使用預定義角色,但出于安全考慮,Oracle,建議使用自定

義角色。建立角色是使用命令 CREATE ROLE,由 DBA 來完成的,但如果要以其他用戶身

份建立角色,那麼要求該用戶必須具有 CREATE ROLE 系統權限。

1.建立角色:不驗證

采用不驗證方式建立的角色,隻是在數據字典中存放角色名稱的信息,并且在使角色生

效時不需要進行任何檢查。

【實例 1-1】創建不需要驗證的角色 oe_clerk。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)創建角色 SOL>CREATE ROLE oe_clerk; 角色已創建

與用戶類似,角色也可以進行驗證,以确保角色的安全性。

2.建立角色:數據庫驗證

數據庫驗證是指使用數據庫檢查角色及其口令的方式。當采用這種方式時,角色名及口

令是存放在數據庫中的。當使角色生效時,必須提供口令。

【實例1-2】創建數據庫驗證的角色 hr_clerk。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA已連接。 2)創建角色 SOL>CREATE ROLE hr_clerk IDENTIFIED BY bonus; 角色已創建

3.建立角色:外部驗證

外部驗證是指使用操作系統服務或網絡服務檢查角色的方式。

【實例 1-3】創建外部驗證的角色 hr_manager。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)創建角色 SOL>CREATE ROLE hr_manager IDENTIFIED EXTERNALLY; 角色已創建

4.建立應用角色

通過使用應用角色可以避免激活角色,采用這種方式建立角色之後,使角色生效是由認

證包來完成的。

【實例 1-4】創建應用角色 admin_role。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)創建角色 SOL>CREATE ROLE admin_role IDENTIFIED USING hr.pcrt; 角色已創建

其中 USING 子句用于指定認證包。當建立了應用角色 admin_role 之後,該角色可以由

HR 用戶的 pcrt 包中的任何過程或函數激活。

角色創建後,角色沒有任何權限。為了使得角色分配給用戶後,用戶具有相應權限,就

必須為角色授予系統權限或對象權限。給角色授權與給用戶授權的方法完全相同。

【實例1-5】給角色授系統權限。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)角色授權 SOL>GRANT CREATE SESSION,CREATE TABLE,CREATE VIEW TO oe_clerk WITH ADMIN OPTION; 授權成功。

這樣,當用戶具有角色 oe_clerk 時,該用戶就可以連接到數據庫,并能創建表。另外,

因為在授予這些系統權限時帶有 WITH ADMIN OPTION 選項,所以具有該角色的用戶還可

以将這些系統權限授予其他用戶或角色。

注意,UNLIMITED TABLESPACE 系統權限不能被授予角色;當将對象權限授予角色

時,不能帶有 WITH GRANT OPTION。

3.2.2 用控制台創建角色

用控台創建角色的步驟如下:

oracle基礎角色(Oracle數據庫用戶管理之角色管理)3

oracle基礎角色(Oracle數據庫用戶管理之角色管理)4

oracle基礎角色(Oracle數據庫用戶管理之角色管理)5

oracle基礎角色(Oracle數據庫用戶管理之角色管理)6

3.2.3 分配角色

分配角色是指将角色分配給某用戶。在建立了角色并為其授予了權限之後,必須将該角

色分配給用戶,它才能起作用。分配角色與授予系統權限的命令完全相同。當将角色分配給

用戶時,用戶将具有角色的所有系統權限和對象權限。一般情況下,分配角色是由 DBA 來

完成的,如果要以其他用戶身份分配角色,則要求該用戶必須具有 GRANT ANY ROLE 系

統權限或角色的 WITH ADMIN OPTION 選項。

【實例 1-6】把角色 oe_clerk 分配給用戶 devp。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)分配角色 SOL>GRANT oe_clerk TO devp ; 授權成功。 2)創建表 SQL>connect devp/development 已連接。 SQL>CREATE TABLE tt(a int); 表已創建。

把角色分配給 devp 用戶後,用戶 devp 就具有角色的所有權限了。

【實例 1-7】把角色 hr_manager 分配給用戶 devp。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)分配角色 SOL>GRANT hr_manager TO devp WITH ADMIN OPTION; 授權成功。

這裡,在分配角色時使用了 WITH ADMIN OPTION 選項,這樣該用戶将具有如下權利:

  • • 将這個角色再授予其它用戶。
  • • 從任何具有這個角色的用戶那裡回收該角色
  • • 删除和修改這個角色

因此,在為用戶分配角色時應當謹慎使用 WITH ADMIN OPTION 選項,因為該用戶将對角色具有完全控制能力。

3.2.4 用控制台分配角色

以下是使用控制台分配角色的步驟:

oracle基礎角色(Oracle數據庫用戶管理之角色管理)7

oracle基礎角色(Oracle數據庫用戶管理之角色管理)8

3.2.5 默認角色

默認角色是用戶所具有的角色的子集,當為用戶指定了默認角色後,以該用戶身份登錄

時會自動激活其默認角色,即用戶具有了角色的權限。當我們為用戶分配了角色之後,隻要

沒有用 ALTER USER …DEFAULT ROLE 作過修改,那麼這些角色都是用戶的默認角色。但

有時要把某些角色設為默認角色,有些角色不是默認角色,就要用命令顯式設定。設置默認

角色一般是由 DBA 來完成的,如果要以其他用戶身份設置用戶的默認角色,則要求該用戶

必須具有 ALTER USER 系統權限。

1.把用戶的所有角色都設為默認角色

使用 ALTER USER 命令可以把一個用戶的所有角色都設置為默認角色,這樣,當以該

用戶身份登錄之後,系統會自動激活該用戶的所有角色,用戶就具有了角色的所有權限。

【實例 1-8】把用戶 devp 的所有角色都設置為默認角色,并查看該用戶當前激活的角色。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)設置默認角色 SOL>ALTER USER devp DEFAULT ROLE ALL; 用戶已更改。 3)以 devp 帳戶登錄 SOL>connect devp/development 已連接。 4)查看 devp 用戶當前激活的角色 SOL>SELECT * FROM session_roles; ROLE ------------ HR_CLERK OE_CLERK

2.指定除某些角色外其他角色都為默認角色

在為用戶分配了多個角色之後,可以明确指明多數角色為默認角色,使少數幾個角色成

為非默認角色。

【實例 1-9】指定除某些角色外其他角色都為默認角色,并驗證。

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)設置默認角色 SOL>ALTER USER devp DEFAULT ROLE ALL EXCEPT hr_manager; 用戶已更改。 3)以 devp 帳戶登錄 SQL>connect devp/development 已連接。 4)驗證 devp 權限 SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或視圖不存在

因為未将 hr_manager 角色設置為 devp 用戶的默認角色,所以以 devp 用戶身份登錄後 不會激活 hr_manager 角色。此時該用戶将不能執行 hr_manager 角色所具有的權限操作。

3.指定某些角色為用戶的默認角色

在為用戶分配了多個角色之後,如果隻是要将少數角色設置為默認角色,那麼可以使用

如下方法。

【實例 1-10】把用戶 devp 的某些角色設置為默認角色

1)以管理員身份登錄 SOL>CONNECT / AS SYSDBA 已連接。 2)設置默認角色 SOL>ALTER USER devp DEFAULT ROLE oe_clerk; 用戶已更改。 SQL>connect devp/development 已連接。 3)驗證角色 SOL>SELECT * FROM session_roles; ROLE ------------ OE_CLERK SQL>delete from scott.salgrade where grade=1; ERROR 位于第 1 行: ORA-00942: 表或視圖不存在

因為用戶 devp 的默認角色被設置為 oe_clerk,所以,以 devp 用戶身份登錄後隻會激活角色 oe_clerk,并且隻能執行這種角色所允許的權限操作。

4.指定無默認角色

在建立了用戶之後,可以指定用戶無任何默認角色。方法如下:

SOL>connect / AS SYSDBA 已連接。 SOL>ALTER USER alex DEFAULT ROLE NONE; 用戶已更改。

因為沒有給 Alex 用戶設置默認角色,所以以 Alex 用戶身份登錄之後不會激活任何角色,從而使得該用戶不能執行任何角色所具有的權限操作。

oracle基礎角色(Oracle數據庫用戶管理之角色管理)9

寫在最後的話

感謝各位的支持與閱讀,後續會繼續推送相關知識和交流,歡迎交流、轉發和關注,感謝

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved