一、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
如有問題,歡迎指正!