標籤:
http://blog.csdn.net/weiwenhp/article/details/8093661
我們發現我們現在的生活中到處是涉及到密碼,你要記各種各樣的密碼.比如銀行卡,郵件,QQ,微博,遊戲,各種網站會員.
使用資料庫自然也不例外,得先整個使用者名稱和密碼才能登進去使用裡面的資料啊.雖然也有啥windows驗證不用你輸密碼了,但那實際上也是需要你登陸windwos的使用者名稱和密碼.
Oracle許可權管理 建立使用者
create user arwenidentifiedby abc; --建立了使用者名稱為arwen密碼為abc的使用者
如果你要改密碼就是
alter userarwenidentifiedby abc123;--把密碼改為abc123
shcema與資料表空間
當然做上面的操作你一般要用個許可權較多的使用者去做.一般剛開始都是用sys或system使用者去建立一些新使用者.創立一個新使用者的時候同時預設建立一個schema,相當於在資料表空間中給你分一塊空間給你.shcema相當於是一塊空間.但由於使用者與schema是一一對應而且完全綁定在一起不分開所以也能把它們完全等同.上面建立使用者時沒指定資料表空間,系統會處理這種情況.當發現某使用者創立時沒指定資料表空間會提供一個預設的資料表空間,一般是system資料表空間.但你也可以通過如下語句修改
alter databasedefaulttablespaceusers;
這樣一改後前面建立的使用者arwen的預設分配的資料表空間就是users了.當然你還可以建立時顯式指定arwen的資料表空間
create user arwenidentifiedby abc123defaulttablespacesystem;
或者建立完了之後顯式更改資料表空間
alter user arwendefaulttablespace myspace;
等上面的使用者建好之後你一看發現竟然登不了.這很不符合常理吧.以前還真沒碰到過建立使用者成功後竟然不能登陸的.我們一般都是能直接登進去,最多是第一次登的時候被強制要求先改下密碼.於是你剛開始會想會不會是新建立的使用者被locked住了.像裝好Oracle後會預設有一些使用者比如scott,是被lock住的.你可以這樣解鎖
alter user scott accountunlock;
你如果要鎖住scott的話自然就是alter user scott accountlock;
但此時的建立使用者不是屬於這種情況,還是屬於沒許可權.僅僅是串連串連資料庫也要需要單獨的一個許可權.(sql server中是沒有這種許可權的,建立了使用者就直接能連資料庫的.等會再討論為啥oracle要單獨整個這許可權出來)
賦予系統許可權
要串連資料庫得有create session的許可權.Oracle中每一個串連就叫作一個session(會話).用如下語句賦予許可權
grant createsessiontoarwen;
但你這時雖然能登陸了,但登進去發現裡面啥都沒有,你也啥都不能做,尋找不了其他使用者的表或自己建立表.當然還有些不存在啥保密的資訊你還是能看,比如
select *from v$version; --查看版本資訊
那如果要做其他啥事咋整啊,得繼續要被賦予許可權啊.所以在oracle中差不多沒有啥操作是理所當然就能去做的.必須得有一個個的許可權了才能去做.Oracle中的許可權劃分的非常細.雖然這樣挺麻煩的,但極大的保證了安全性.
賦予許可權一般有兩種方式
1.通過grant語句把一個個細分的許可權賦予某個使用者,就像上面那樣用.
很顯然如果要賦予使用者上百個許可權,而同時要建立上百個使用者,你一個個的敲得敲得你手發軟,於是就有另外一種方法
2.先建立一個角色,然後把各種許可權賦予這個角色.然後你建立使用者的時候可以把這個角色賦予他.這樣新使用者就擁有了所有角色的許可權.
實際上這有點像物件導向中的繼承,子類繼承了父類就繼承了父類的財產了啊.角色像父類,使用者像子類.
建立角色
create role father;
grant create table to father;
grant father to arwen;
上面先建立一個角色father,然後賦予角色建表許可權,然後把角色賦給使用者arwen.此時arwen也具有了建表許可權.我們知道物件導向中父類還能再繼承父類.那這裡角色還能被賦予角色,比如oracle中預設有角色resource
grant resource to father;
賦予對象許可權(object privileges)
大部分時候我們指的許可權是系統許可權,一般是泛指,範圍較廣.比如具有建表,查詢表的許可權啊.而對象許可權是從較細的範圍講.比如讓你具有對某一個對象(具體的某一個表或視圖等的操作許可權).
比如有表tmp.則grant select on tmp to arwen.表示arwen具有了訪問表tmp的許可權,但沒許可權訪問其他任何錶.
賦予許可權的許可權
聯級賦予系統許可權(with admin option)
看了這麼多賦予許可權的方式你可能會問難道賦予許可權都得sys這樣的超級使用者去做嘛.那多累啊.自然不是啊.你還可以讓其他使用者也有賦予別人的許可權.舉例
先通過sys使用者, grant create table to arwen with admin option;--加上with admin option這個修飾就表示arwen也可以把建表的許可權接著賦予其他使用者了.這是一種具有傳遞性的賦權方式.而且假如arwen通過grant create table to weiwen賦予使用者weiwen建表許可權後,如果啥時arwen自己的建表許可權被回收了.weiwen的建表許可權還在
聯級賦予對象許可權(with grant option)
另外還有grant select on emp to arwen with grant option; --也跟上面一樣表示arwen也可以把查表tmp的許可權再接著賦予其他使用者
arwen通過grant select on emp to weiwen with grant option; --與系統許可權不同,如果arwen的許可權被回收後,weiwen的查表許可權也沒了.
如果weiwen又通過grant select on emp to test ; --賦權給test.當arwen或weiwen任意一個被取消許可權了它也被取消.就像一個繼承層次一樣.前面的許可權被取消了後面的也沒了.
回收許可權
我們知道賦予了許可權肯定還能回收,
很簡單,賦予許可權是grant ... to ...
回收就是revoke ... from ...
例如revoke create table from arwen;
為什麼會有create session許可權
關於這個許可權很有爭議.因為沒有這個許可權其實也是可以的,而且這許可權很容易誤導人.比如建立了使用者竟然還不能登陸有點不全常理.在sql server中也沒有這樣的許可權.那在oracle中它到底有什麼作用呢?
我覺得create session有個蠻重要的作用就是起lock的作用.比如說我們在某些情況想lock住一個使用者.像發現使用者帳號有異常或此使用者因某員工離職先暫時lock住.你回收了create session許可權就不能串連了,跟lock住的作用完全一樣.而且你可以同時回收create session許可權和lock住.雙保險啊.
另外如果想鎖住使用者時,你又沒lock它的許可權時你就只能回收create session了.
SQL Server與Oracle對比學習:許可權管理(一)