本文轉自:https://blog.csdn.net/yu102655/article/details/53301363
一、Oracle 用戶,權限,角色的概念
1、用戶
(1)對數據庫的訪問需要以適當的身份通過驗證,這就是用戶的作用;每個Oracle用戶都有自己的用戶名和密碼,並且擁有他們所創建的任意表、視圖和其他資源,需要注意的是新創建的用戶連最基本的訪問登入Oracle的權限都沒有,所以后續需要授予不同的權限和角色來達成不同的操作目的。
(2)用戶,就是真正可以操作數據庫的對象了,一個用戶可以擁有0個或多個角色。用戶分為普通用戶和特權用戶。普通用戶就不贅述了,特權用戶是指擁有特殊權限(sysdba、sysoper)的數據庫用戶。我們可以通過下面的語句查看數據庫的特權用戶:
select * from v$pwfile_users;
如果參數REMOTE_LOGIN_PASSWORDFILE的值為EXCLUSIVE,那么就可以將sysdba和sysoper權限授予其它用戶。但是當以特權用戶身份登錄時,必須帶有as sysdba或as sysoper選項。
2、權限
(1)權限管理是 Oracle 系統的精華,不同用戶登錄到同一數據庫中,可能看到不同數量的表,擁有不同的權限。權限一般分為系統權限和對象權限,系統權限可以通俗地理解為將數據庫對象從無到有或從有到無的創建操作,比如說創建和刪除表、視圖、存儲過程、session等這些操作都可以認為是系統權限;對象權限賦予了你在不同的數據庫對象上操作的能力,比如DELETE權限允許你對表和視圖刪除行,SELETE權限允許你對表、視圖、序列等進行查詢操作!至於系統權限和對象權限分別有哪些,具體請參照Oracle官網。
(2)ORACLE系統提供三種權限:Object 對象級、System 系統級、Role 角色級。這些權限可以授予給用戶、特殊用戶public或角色,如果授予一個權限給特殊用戶”Public”(用戶public是oracle預定義的,每個用戶享有這個用戶享有的權限),那么就意味作將該權限授予了該數據庫的所有用戶。對管理權限而言,角色是一個工具,權限能夠被授予給一個角色,角色也能被授予給另一個角色或用戶。用戶可以通過角色繼承權限,除了管理權限外角色服務沒有其它目的。權限可以被授予,也可以用同樣的方式撤銷。
3、角色
(1) ORACLE有許多的系統權限,如果一個一個地把它們分配給用戶,管理起來相當的不方便,所以我們引入了角色這個概念。如果多個新建用戶需要后續賦予10不等的不同權限,一般方法是需要將10個不等的權限分別列出來進行授予,不但麻煩而且重用性不高,角色的出現就是為了解決這個問題。Oracle角色是一組權限的集合。正常情況下我們可以授予角色一些權限,然后將角色分配給適當的用戶。
這樣,就方便了用戶的管理,通過一個角色授權語句就可以將很多的系統權限授予給用戶。
(2)系統已經預定義好了一些角色,我們查看某一角色所具有的系統權限時,用下面的語句:
select * from role_sys_privs where role=’角色名’;
如果參數REMOTE_LOGIN_PASSWORDFILE的值為EXCLUSIVE,那么就可以將sysdba和sysoper權限授予其它用戶。但是當以特權用戶身份登錄時,必須帶有as sysdba或as sysoper選項。
二、Oracle 用戶,權限,角色的語法知識
1、用戶
1.用戶管理:
創建用戶(指定密碼)
create user itcast identified by password;
由於scott普通用戶沒有權限創建用戶,因此先登錄管理員用戶,
在cmd窗口中,
SQL> conn / as sysdba
已連接。
登陸上管理員用戶。
2.修改密碼
alter user itcast identified by password2;
3.鎖定與解鎖用戶
alter user itcast account lock;
alter user itcast account unlock;
4.刪除用戶
drop user xx;
2、權限
授予權限
grant 權限1,權限2,… to 用戶;
收回權限
revoke 權限1,權限2,… from 用戶;
設置用戶的空間配額
alter user itcast quota unlimited on users;
quota 容量的意思
unlimited 無限制
on users 在users這個表空間上沒有限制
其中,oracle中create session系統權限,是創建會話的權限。
create session就是允許使用這個用戶在服務器上創建session。通俗的說,就是允許這個用戶登錄。
oracle中應該很多角色應該都包含這個系統權限。
查詢管理員擁有的權限,select * from session_privs;
會發現,擁有208行權限。
3、角色
創建角色
create role role1;
給角色授予權限
grant create session, create table, create view to role1;
給角色收回權限
revoke create session from role1;
刪除角色
drop role role1;
三、實例測試:創建用戶和授予權限
1、創建用戶和授予權限
1.連接管理員用戶,conn / as sysdba
2.創建一個新用戶, create user itcast identified by password;
3.授予新用戶itcast的登錄權限,create session就是允許使用這個用戶在服務器上創建session。通俗的說,就是允許這個用戶登錄。 grant create session to itcast;
4.授予新用戶itcast的建表權限,grant create table to itcast;
5.再登錄新用戶itcast,sqlplus itcast/password
6.登錄用戶itcast后,建表,create table test (id number);
7.雖有建表的權限,但是出現磁盤空間使用的問題,還沒有給它指定有多少磁盤空間使用的權限。
出現的問題: ORA-01950:對表空間’USER’無權限
8.給用戶itcast分配磁盤空間,分配了無限空間, alter user itcast quota unlimited on users;
9.再次建表,create table test (id number); 表已創建
10.建了表后,我們再來通過視圖的方式來查詢表, create view myview as select * from itcast;
在cmd窗口中結果如下:
SQL> create view myview as select * from itcast;
create view myview as select * from itcast *
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在
(1)我們起初以為是缺少授予創建視圖的權限,好了,這次授予新用戶itcast的視圖權限,
grant create view to itcast;
(2)再次創建視圖,create view myview as select * from itcast; 還是出現下面的問題
SQL> create view myview as select * from itcast;
create view myview as select * from itcast *
第 1 行出現錯誤:
ORA-00942: 表或視圖不存在
(3)原因是,我們還需要創建過程,函數等等常用的權限。這樣很麻煩,因此,這時,角色的作用就體現出來了。角色就是把一堆權限給一個角色,新用戶只要使用這個角色,就能有這一堆權限了。
2、相關的截圖
用戶口令如下:
測試截圖:
四:角色
1.角色:
例如:有經理,員工1,員工2;
經理:查詢、更新、刪除、插入
員工:查詢、更新
可以有兩個角色
HR_EMP 兩個權限
HR_MGR 繼承HR_EMP,自己還有兩個權限,共4個。
2.要求要有create role權限,才可以創建角色,可以使用管理員操作。
conn / as sysdba
create role role1; // 這時這個角色沒有任何權限。
把權限授予給角色
grant create session to role1;
角色繼承:
create role role2;
grant create table,role1 to role2; // 相當於把role1當成一個組合的新權限使用,與普通權限一樣使用,這就是繼承角色了。
把角色授予角色
grant role1 to aa;
3.Oracle實現預置好了一些角色:
CONNECT
RESOURCE
DBA
…
對於普通用戶,一般要有CONNECT與resource。
例:
create user mytest2 identified by password;
grant connect, resource to mytest2;
一般就是這樣用的,創建完用戶后就會指定權限。
在RESOURCE角色中就含有空間配額
4.預定義角色和權限如圖