Oracle用戶、角色、權限


一、Oracle權限

系統權限:系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)
對象權限:某種權限用戶對其它用戶的表或視圖的存取權限。(是針對表或視圖而言的)

1.Oracle系統權限

​ oracle提供了166系統權限,而且oracle的版本越高,提供的系統權限就越多,我們可以查詢數據字典視圖system_privilege_map,可以顯示所有系統權限。

基本語法

select * from system_privilege_map order by name;
oracle11GR2中提供了208個系統權限。

Oracle常用100個權限

權限名 含義
alter any cluster 修改任意簇的權限
alter any index 修改任意索引的權限
alter any role 修改任意角色的權限
alter any sequence 修改任意序列的權限
alter any snapshot 修改任意快照的權限
alter any table 修改任意表的權限
alter any trigger 修改任意觸發器的權限
alter cluster 修改擁有簇的權限
alter database 修改數據庫的權限
alter procedure 修改擁有的存儲過程權限
alter profile 修改資源限制簡表的權限
alter resource cost 設置佳話資源開銷的權限
alter rollback segment 修改回滾段的權限
alter sequence 修改擁有的序列權限
alter session 修改數據庫會話的權限
alter sytem 修改數據庫服務器設置的權限
alter table 修改擁有的表權限
alter tablespace 修改表空間的權限
alter user 修改用戶的權限
analyze 使用analyze命令分析數據庫中任意的表、索引和簇
audit any 為任意的數據庫對象設置審計選項
audit system 允許系統操作審計
backup any table 備份任意表的權限
become user 切換用戶狀態的權限
commit any table 提交表的權限
create any cluster 為任意用戶創建簇的權限
create any index 為任意用戶創建索引的權限
create any procedure 為任意用戶創建存儲過程的權限
create any sequence 為任意用戶創建序列的權限
create any snapshot 為任意用戶創建快照的權限
create any synonym 為任意用戶創建同義名的權限
create any table 為任意用戶創建表的權限
create any trigger 為任意用戶創建觸發器的權限
create any view 為任意用戶創建視圖的權限
create cluster 為用戶創建簇的權限
create database link 為用戶創建的權限
create procedure 為用戶創建存儲過程的權限
create profile 創建資源限制簡表的權限
create public database link 創建公共數據庫鏈路的權限
create public synonym 創建公共同義名的權限
create role 創建角色的權限
create rollback segment 創建回滾段的權限
create session 創建會話的權限
create sequence 為用戶創建序列的權限
create snapshot 為用戶創建快照的權限
create synonym 為用戶創建同義名的權限
create table 為用戶創建表的權限
create tablespace 創建表空間的權限
create user 創建用戶的權限
create view 為用戶創建視圖的權限
delete any table 刪除任意表行的權限
delete any view 刪除任意視圖行的權限
delete snapshot 刪除快照中行的權限
delete table 為用戶刪除表行的權限
delete view 為用戶刪除視圖行的權限
drop any cluster 刪除任意簇的權限
drop any index 刪除任意索引的權限
drop any procedure 刪除任意存儲過程的權限
drop any role 刪除任意角色的權限
drop any sequence 刪除任意序列的權限
drop any snapshot 刪除任意快照的權限
drop any synonym 刪除任意同義名的權限
drop any table 刪除任意表的權限
drop any trigger 刪除任意觸發器的權限
drop any view 刪除任意視圖的權限
drop profile 刪除資源限制簡表的權限
drop public cluster 刪除公共簇的權限
drop public database link 刪除公共數據鏈路的權限
drop public synonym 刪除公共同義名的權限
drop rollback segment 刪除回滾段的權限
drop tablespace 刪除表空間的權限
drop user 刪除用戶的權限
execute any procedure 執行任意存儲過程的權限
execute function 執行存儲函數的權限
execute package 執行存儲包的權限
execute procedure 執行用戶存儲過程的權限
force any transaction 管理未提交的任意事務的輸出權限
force transaction 管理未提交的用戶事務的輸出權限
grant any privilege 授予任意系統特權的權限
grant any role 授予任意角色的權限
index table 給表加索引的權限
insert any table 向任意表中插入行的權限
insert snapshot 向快照中插入行的權限
insert table 向用戶表中插入行的權限
insert view 向用戶視圖中插行的權限
lock any table 給任意表加鎖的權限
manager tablespace 管理(備份可用性)表空間的權限
references table 參考表的權限
restricted session 創建有限制的數據庫會話的權限
select any sequence 使用任意序列的權限
select any table 使用任意表的權限
select snapshot 使用快照的權限
select sequence 使用用戶序列的權限
select table 使用用戶表的權限
select view 使用視圖的權限
unlimited tablespace 對表空間大小不加限制的權限
update any table 修改任意表中行的權限
update snapshot 修改快照中行的權限
update table 修改用戶表中的行的權限
update view 修改視圖中行的權限

Oracle權限相關的視圖

與權限,角色相關的視圖:

視圖名 說明
BA_SYS_PRIVS 查詢某個用戶所擁有的系統權限
SER_SYS_PRIVS 前用戶所擁有的系統權限
ESSION_PRIVS 當前用戶所擁有的全部權限
OLE_SYS_PRIVS 某個角色所擁有的系統權限
OLE_ROLE_PRIVS 當前角色被賦予的角色
ESSION_ROLES 當前用戶被激活的角色
SER_ROLE_PRIVS 前用戶被授予的角色
dba_roles Oracle 角色
dba_sys_privs 角色包含的系統權限
dba_tab_privs 角色包含的對象權限

注意: 要以SYS用戶登陸查詢這些視圖,否則返回空!

針對表訪問權限的視圖:

視圖名 說明
ABLE_PRIVILEGES
LL_TAB_PRIVS
OLE_TAB_PRIVS 某個角色被賦予的相關表的權限

A:授予權限

 	一般情況,授予系統權限是有dba完成的,如果用其它用戶來授予系統權限,則要求用戶必需具有grant any privilege的系統權限在授予系統權限時,可以帶有with admin option選項,這樣,被授予權限的用戶或是角色還可以將該系統權限授予其它的用戶或是角色。

授權基本語法:

grant 權限名稱 to 用戶名;

示例: grant create session to test with admin option; 授予連接數據庫權限給test

​ grant create table, create view to test with admin option; 授予創建表,創建視圖的權限給test

B:回收權限

 一般情況下,回收系統權限是dba來完成的,如果其它的用戶來回收系統權限,要求該用戶必需具有相應系統權限及轉授系統權限的選項(with admin option)。回收系統權限使用revoke來完成,當回收了系統權限后,用戶就不能執行相應的操作了,但是請注意,系統權限級聯收回問題!(不會級聯回收權限)

回收系統權限基本語法:

revoke系統權限名 from 用戶名;

特別說明:系統權限的回收不是級聯回收

示例: revoke create session from test; test用戶權限被回收后,還可以登錄

2.Oracle對象權限

訪問其它方案對象的權利,用戶可以直接訪問自己方案的對象,但是如果要訪問別的方案的對象,則必需具有對象的權限,比如smith用戶要訪問scott.emp表(scott:方案,emp:表),則必需在scott.emp表上具有對象的權限。

常用的權限

alter 修改、delete 刪除、select 查詢、insert 添加、update 修改、index 索引、references 引用、execute執行。

注: 在oracle9i前,授予對象權限是由對象的所有者來完成的,如果用其它的用戶來操作,則需要用戶具有相應的(with grant option)權限,從oracle9i開始,sys,system可以將任何對象上的對象權限授予其它用戶

A:授權基本語法

grant 對象權限 on 數據庫對象 to 用戶名 [with grant option] [,角色名];

特別說明:可以把權限直接賦給用戶或角色。[with grant option]選項只能授予用戶,不能授予角色。

示例:

grant select on geoff.emp to test;  將geoff用戶emp表的查詢權限賦予test用戶

grant alter on geoff.emp to test; 	將geoff用戶emp表的alert權限(修改表結構)賦予test用戶

B:回收基本語法:

 revoke 對象權限 on 數據庫對象 from 用戶名[,角色名];

特別說明:對象的權限回收是級聯回收。

3.sys和system用戶

區別:

system用戶只能用normal身份登陸em。除非你對它授予了sysdba的系統權限或者syspoer系統權限。

sys用戶具有“SYSDBA”或者“SYSOPER”權限,登陸em也只能用這兩個身份,不能用normal。

最重要的區別,存儲的數據的重要性不同

sys所有oracle的數據字典的基表和視圖都存放在sys用戶中,這些基表和視圖對於oracle的運行是至關重要的,由數據庫自己維護,任何用戶都不能手動更改。sys用戶擁有dba,sysdba,sysoper等角色或權限,是oracle權限最高的用戶。

system用戶用於存放次一級的內部數據,如oracle的一些特性或工具的管理信息。system用戶擁有普通dba角色權限。 

“SYSOPER”權限,即數據庫操作員權限,權限包括:

 打開數據庫服務器  關閉數據庫服務器 備份數據庫 恢復數據庫  日志歸檔 會話限制

“SYSDBA”權限,即數據庫管理員權限,權限包括:

 打開數據庫服務器  關閉數據庫服務器	備份數據庫  恢復數據庫 日志歸檔 會話限制 管理功能  創建數據庫

normal 、sysdba、 sysoper區別

 normal 是普通用戶,只有通過被sys授權之后才可以對數據庫進行操作
sysdba擁有最高的系統權限
sysoper主要用來啟動、關閉數據庫,sysoper 登陸后用戶是 public
sysdba登陸后是sys,而且只能是SYS登錄sysdba. 
系統權限 sysdba sysoper
Startup(啟動數據庫) startup
Shutdown(關閉數據庫) shutdown
alter database open/mount/backup alter database open/mount/backup
改變字符集 none
create database(創建數據庫) None不能創建數據庫
drop database(刪除數據庫) none
create spfile create spfile
alter database archivelog(歸檔日志) alter database archivelog
alter database recover(恢復數據庫) 只能完全恢復,不能執行不完全恢復
擁有restricted session(會話限制)權限 擁有restricted session權限
可以讓用戶作為sys用戶連接 可以進行一些基本的操作,但不能查看用戶數據
登錄之后用戶是sys 登錄之后用戶是public

二、Oracle角色

角色就是權限的一個集合體,如果將權限比作一個士兵,那么角色就是排長、連長、營長,不同的角色擁有的權限個數和大小也不同!

角色分為預定義角色和自定義角色。

A:預定義角色

預定義角色是指oracle所提供的角色,每種角色都用於執行一些特定的管理任務。

常用的預定義角色

1、connect角色
connect角色具有一般應用開發人員需要的大部分權限,只要給用戶授予connect和resource角色就夠了。

connect角色具有:create session 創建連接權限

2、resource角色
resource角色具有應用開發人員所需要的其它權限,比如建立存儲過程、觸發器等。這里需要注意的是resource角色隱含了unlimited tablespace系統權限。

resource角色具有:

角色名 說明 角色名 說明
create trigger 創建觸發器 create cluster 創建集群
create sequence 創建序列 create operator 創建運營商
create type 創建類型權限 create indextype 創建索引類型
create procedure 創建過程 create table 創建表
3、dba角色
dba角色具有所有的系統權限,及with admin option選項,默認的dba用戶為sys和system他們可以將任何系統權限授予其它用戶,但是要注意的是dba角色不具備sysdba和sysoper的特權(啟動和關閉數據庫)

B:自定義角色

就是自己定義的角色,根據自己的需要來定義,一般是dba來建立,如果使用別的用戶來建立,則需要具有create role的系統權限。在建立角色時可以指定驗證方式(不驗證,數據庫驗證等)

1、建立角色(不驗證)

如果角色是公用的角色,可以采用不驗證的方式建立角色。

建立角色不驗證基本語法:create role 角色名 not identified;

2、建立角色(數據庫驗證)

采用這樣的方式時,角色名、口令存放在數據庫中。當激活該角色時,必需提供口令。在建立這種角色時,需要為其提供口令。

建立角色需數據庫驗證基本語法:create role 角色名 identified by 口令;

3、角色授權

給角色授予權限和給用戶授權沒有太多區別,但是要注意,系統權限的unlimited tablespace和對象權限的with grant option選項是不能授予角色的。

給角色授權基本語法:grant 對象權限 on 數據庫對象 to 自定義角色名;

4、 分配角色給用戶

一般分配角色是由DBA來完成的,如果要以其它用戶身份分配角色,則要求用戶必需具有grant any role的系統權限。

通過角色名授權用戶基本語法:grant 角色名 to 用戶名 [with admin option];

如果給用戶賦權限時帶了with admin option選項,被授權的用戶可以繼續將此權限授予其它用戶。

5、刪除角色

使用drop role,一般是dba來執行,如用其它用戶則要求該用戶具有drop any role系統權限

刪除角色基本語法:drop role 角色名;

三、Oracle用戶

		Oracle數據庫是根據用戶進行分片管理的,可以簡單理解為每個Oracle用戶都是一個相對獨立的數據庫,每個用戶對應的表空間是用於永久存儲當前用戶數據的空間,對應的臨時表空間是用於當前用戶在數據庫進行處理數據的空間,用戶是Oracle角色權限和角色的載體。

用戶相關操作

詳細操作請看我另一篇文章:Oracle新建用戶

相關查詢操作

查詢當前用戶系統權限:select * from session_privs;

查詢當前用戶擁有角色:select * from role_sys_privs;

參考文獻: https://www.cnblogs.com/yucoder/p/11057764.html

​ 如有問題,歡迎指正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM