oracle資料庫許可權管理

來源:互聯網
上載者:User

標籤:into   使用者   div   使用者建立   trie   顯示   manager   value   並且   

許可權管理: oracle 9裡面預設的三個username和password: sys change_on_install //許可權最高的管理員 system manager //普通的管理員 scott tiger //普通使用者 在oracle 10中,仍然使用這三個使用者作為預設使用者。

但sys和system使用者的password不再預設。


  許可權管理:

  oracle 9裡面預設的三個username和password:

  sys change_on_install //許可權最高的管理員

  system manager //普通的管理員

  scott tiger //普通使用者

  在oracle 10中,仍然使用這三個使用者作為預設使用者。但sys和system使用者的password不再預設。在安裝資料庫的時候。能夠由使用者指定 。

從安全形度考慮,scott使用者預設被鎖定,所以要使用該使用者,

須要先解除鎖定。



  注意:我們要使用oracle資料庫,至少要啟動兩個服務,一個是監聽服務,一個是資料庫執行個體。



  建立使用者;

  以系統管理員的身份登陸。

  使用語句:create user lisi identified by lisi; //建立了一個叫lisi的使用者,password也為lisi

  儘管建立了使用者。但該使用者如今並無不論什麼許可權。

就連登陸資料庫的許可權都沒有。假如使用:sqlplus lisi/lisi 登陸資料庫,會報錯,顯示沒有create session的許可權。

  所以還是先使用系統管理員給lisi這個使用者指定登陸的許可權。

  語句為:grant create session to lisi;

  授權過後。lisi能夠登陸資料庫了。可是如今還沒有建立資料庫表的許可權。仍需指定。

  語句為:grant create table to lisi;

  使用lisi帳號,建立資料庫表:create table mytable(id int);

  運行後卻提示錯誤:對錶空間‘USERS’無許可權。每一個資料庫表都有自己的資料表空間,相當於檔案必須位於某個目錄下。

  儘管lisi使用者具有建立表的許可權,但沒有使用資料表空間的許可權,終於還是建立不了表。

這就好比你有我房間的鑰匙。可是沒有我家大門的鑰匙,你終於還是進不了我的房間。



  通過系統管理員授予lisi使用者使用資料表空間的許可權:

  grant unlimited tablespace to lisi;這樣使用者lisi對錶空間的使用就沒有限制了。

  在lisi賬戶下,建立表:create table mytable(id int);

  插入一條記錄:insert into mytable values(1);

  插入成功。



  也能夠刪除表:drop table mytable;

  有人可能會產生疑問,既然資料庫的許可權管理這麼嚴格。上面我們僅僅是授予lisi使用者建立表的許可權。並沒有授予其插入,刪除等許可權呀。這裡我們能夠這樣理解:目前使用者建立了一個表。那麼該表

就屬於該使用者,使用者既然建立了表,自然就對該表擁有一切許可權啦。



  並且:資料庫並沒有drop table的許可權。使用:grant drop table to lisi;出現:許可權缺失或無效的錯誤提示。



  上面是授予許可權。那麼怎樣撤銷使用者的某個許可權呢?

  使用例如以下語句能夠撤銷lisi的建立表的許可權:revoke create table from lisi;

  再使用lisi帳號建立表。就會出現錯誤提示:許可權不足。



  在大多情況下。假設我們對使用者的許可權常常改動,我們怎樣知道使用者有哪些許可權呢?

  資料庫預設維護了一個視圖對外提供一些系統資訊(叫資料字典),能夠查看使用者的詳細許可權。

  使用例如以下語句查看目前使用者的系統許可權:

  select * from user_sys_privs;

  USRENAME PRIVILEGE ADM

  ----------------------------------------------- ---------------------------------------- ----

  LISI CREATE SESSION NO

  LISI UNLIMITED TABLESPACE NO

  oracle中的許可權分為系統許可權和對象許可權。

  系統許可權就是我們上面所講的一些許可權。



  對象許可權是指:比方使用者lisi建立了一個表,該表就能夠作為一個對象看待。另外一個使用者是否有訪問該表的許可權呢。這就是所謂的對象許可權管理。

  我們在建立一個使用者wangwu。password也為wangwu。在該使用者下,建立一個表mytab。假設lisi使用者向訪問表mytab,是否會成功呢?

  在lisi的表單下。輸入:select * from mytab;報錯:表或視圖不存在。

我們知道表屬於表的建立者。

  這裡我們直接查詢表mytab,資料庫會到目前使用者下尋找該表。顯然目前使用者lisi沒有表mytab。

所以提示表或視圖不存在。

  那我們指定表的全部者。重新查詢:select * from wangwu.mytab;表單顯示“許可權不足”的錯誤提示。

由此可知。儘管找到了mytab表,卻沒有訪問的許可權。

  僅僅有表的擁有者才幹夠授予該表的相關許可權給其它使用者。

使用使用者wangwu的操作表單。使用例如以下語句,把查詢語句授予lisi;

  grant select on mytab to lisi;

  運行此語句後。lisi就能夠查詢使用者wangwu的mytab表了。

  假設要獲得其它對於mytab表的許可權,仍然須要指定(多個許可權同一時候指定。用逗號分隔):

  grant update,select,delete on mytab to lisi;

  假設要把表的全部許可權都賦予給使用者lisi。能夠這樣寫;

  grantallon mytab to lisi;

  在wangwu的表單下,向mytab插入幾條資料。然後查詢。卻顯示“未選定行”。說明剛才的插入沒有同步到資料庫中去。



  在oracle下。預設須要對sql語句手動進行提交。所以在幾條插入語句後,能夠運行commit;語句提交。重新查詢,表中就有資料了。

  假設要把某個許可權授予全部的使用者。能夠使用publickeyword:

  grant create session topublic;

  查看目前使用者的對象許可權。使用例如以下語句:

  select * from user_tab_privs;

  oracle的許可權控制粒度非常細,甚至能夠精確到某一列的許可權。



  grant update(name) on mytab to lisi;

  這句啟動並執行效果就是,lisi使用者對錶mytab僅擁有更新name這一列的許可權。



  grant insert(id) on mytab to lisi;

  查看目前使用者對資料庫表的列的許可權:

  select * from user_col_privs;

  在lisi許可權下,運行:update wangwu.mytab set name=‘fdsfa‘,id="dfs" where id=1;

  運行後顯示許可權不足。



  update wangwu.mytab set name="fsa" where id=1;

  這樣就能夠了。

  相同運行:insert into wangwu.mytab values(4,"asf");運行後也顯示許可權不足。

  改動語句為:inset into wangwu.mytab(id) values(4);成功運行。

  僅僅能對更新和插入設定精確到某列的許可權控制,不能對查詢和刪除設定。



  命令:show user能夠查看目前使用者

  資料庫有三種類型的語句:

  ddl:資料定義語言 (Data Definition Language),指定是資料庫表的建立,刪除之類的操作。



  dml:資料操縱語言,針對錶的增刪改查操作。僅僅有dml須要進行提交操作。

  dcl:資料控制語言。對系統許可權和對象許可權的管理。



  許可權的傳遞:

  系統許可權的傳遞:

  sys使用者把一些系統許可權授權給lisi使用者.

  grant alter any table to lisi;

  查看lisi的系統許可權,就有了alter any table的許可權。

  如今lisi想把該許可權傳遞授權給wangwu使用者運行下面語句:grant alter any table to wangwu;運行後報“許可權不足”。

  要想lisi也能夠傳遞許可權,能夠在sys使用者授權時加上with admin option的選項,該選項就說明了還擁有許可權的管理能力。

  即:grant alter any table to lisiwith admin option;這樣lisi就能夠把alter any table的許可權傳遞給wangwu了。

  要想wangwu也能夠傳遞該許可權,也使用該admin選項就可以。

  查看lisi的系統許可權。他的alter any table許可權的同一行的adm欄位取值由NO變為YES,說明lisi對該許可權具有分配功能了。

  對象許可權的傳遞:

  與系統許可權的傳遞類似,只是後面的選項有所改變:

  增加sys建立了一個A表。授予lisi的select許可權:

  grant select On A to lisi;

  假設想讓lisi擁有對A表的select許可權的分配能力,僅僅需改動為:

  grant select On A to lisiwithgrantoption;

  思考:假設sys管理員撤銷了lisi的許可權,那麼wangw的許可權是否也被撤銷了呢?

  通過角色對許可權進行管理

  假設依照上面的許可權管理方法 。對每一個使用者逐一的分配許可權。必定會非常混亂,導致管理的困難。所以oracle提供了角色來對許可權進行集合化的管理。

  角色就是許可權的集合。

  在sys下建立角色:

  create role myrole;

  給角色加入許可權:

  grant create session to myrole;

  grant create table to myrole;

  建立使用者:

  create user zhangsan;

  grant myrole to zhangsan;//賦予以上的兩個許可權給zhangsan

  有些系統許可權無法直接賦予角色,由於該許可權太大了,比方unlimited tablespace。

  比如:運行grant unlimited tablespace to myrole;

  出現錯誤提示:無法將unlimited tablespace授予角色

  刪除角色:

  drop role myrole;

  許可權舉例:

  create table create any table

  [alter table] alter any table

  [delete table] delete any table

  補充:oracle資料庫不含紫色的權限類別型。由於有了create table許可權,說明表的一切都歸建立者。

不須要還指定alter table和drop table許可權了。預設就有了。

  而create any table這個許可權表明該使用者能夠給其它使用者建立表。

  示範範例:wangwu給lisi建立一個表temp

  create tablelisi.temp(id int);//有可能報“超出資料表空間‘USERS’的空間限額”錯誤提示,那是由於lisi使用者可能還沒有資料表空間許可權,運行賦予lisi使用者unlimited tablespace的許可權。問題就可以

解決。

  注意:表是屬於某個使用者的。

而角色不屬於某個使用者。

  oracle三種登陸驗證機制

  作業系統驗證

  password檔案驗證

  資料庫驗證

  對於絕大多少的普通使用者而言,資料庫啟動後。使用者登陸時採用的是資料庫驗證。

  而相應sys使用者。它的許可權是最大的。它的許可權甚至包含啟動和關閉資料庫。它在oracle資料庫還沒啟動時,就串連到oracle資料庫中去,進行啟動。

這樣我們不難理解。sys的身分識別驗證不可能採用資料庫驗證,由於當時資料庫還沒有啟動呢。所以sys的身分識別驗證使用的是作業系統驗證和password檔案驗證(這樣說不是非常嚴格,應該是以SYSDBA和SYSOPER串連身份登陸都會以這兩種方式進行驗證)。

  當一個使用者串連資料庫的時候。client首先串連到監聽服務,監聽把請求發送到資料庫。假設驗證通過了,以後就不須要監聽了。client直接和資料庫執行個體通訊。

  早期在linux和unix上執行的oracle,它有嚴格的啟動順序:先啟動監聽(僅僅須要敲個命令就可以,不須要什麼許可權),後啟動資料庫執行個體(須要許可權)

  啟動並執行命令序列:lsnrctl start //啟動監聽服務

  sqlplus sys/oracle as sysdba//啟動資料庫執行個體的請求。發現以sysdba的身份串連,所以不進行資料庫驗證,而是採用作業系統和password檔案驗證。假設驗證通過。執行啟動資料庫執行個體

  startup //啟動資料庫執行個體

  早期版本號碼命令得這樣寫:

  lsnrctl start

  sqlplus /nolog

  conn sys/oracle as sysdba

  startup

  在windows下oracle的啟動過程,進行了傻瓜式的封裝:

  lsnrctl start

  oradim -starup -sid orcl

  補充:在串連到資料庫時。能夠這樣寫:conn / as sysdba也能夠連連上。甚至胡亂指定username和password,如:conn abc/abc as sysdba都能夠登陸。這是由於串連是以sysdba身份,首先採用作業系統驗證。

在我們安裝資料庫時。會把當前系統的帳號加入到oracle的系統管理員組中去。按以上方式串連。它是預設依據系統的當前賬戶驗證通過的。把Administrator 群組中的該系統帳號刪去後。他就會採用password驗證機制。就必需要指定username和password了。

  問題:丟失password怎麼辦?



  我們知道假設普通使用者的password忘記了,我們能夠管理員的身份對該使用者的password進行改動(無法查看,由於password都是加了密的,僅僅能改動)

  能夠在圖形化的工具下直接進行改動。

也能夠以命令的方式:

  alter user scott identified by tiger;

  在實際開發中。我們要把作業系統驗證給取消掉。那以後就會採用password驗證了。

可是假如我們把password忘記了,又怎樣解決呢?

  我們能夠把password檔案刪掉,在產生一個password檔案就可以。

  找到password檔案的所在地:..\db_2\database\pwdorcl.ora,紅色部分是該password檔案命名的固定部分,orcl指的是資料庫的sid。可能不一樣

  刪除password檔案後,再產生一個。使用orapwd命令,詳細例如以下:

  orapwdfile=<password檔案的全路徑,password檔案的命名要依照先前> password=<指定的password> entries=<該password檔案儲存的DBA最大數量> force=僅僅是否強制覆蓋檔案操作

  示範範例:orapwd file=E:\oracle\ora92\database\pwdora9i.ora password=sys entries=10;

  使用下面語句查看在該password檔案裡放了多少特權使用者:

  select * from v$pwfile_users;

  建立使用者:

  create user username

  identified by password

  default tablespace 資料表空間

  temporary tablespace 資料表空間

  quota 整數 K|M|unlimited on 資料表空間

  示範範例:

  create user abc

  identified by abc

  default tablespace users //使用者的預設資料表空間為users。在該資料表空間下使用者能夠建立表

  temporary tablespace temp //使用者的暫時資料表空間,用於索引,排序等工作的暫時場所。相當於windows下的暫時目錄

  quota 50M on users //指定users資料表空間的限額大小

  quota unlimited on temp; //指定暫時資料表空間的限額大小

  限制使用者

  使用者加鎖

  alter user username account lock

  使用者解鎖

  alter user username account unlock

  使用者口令即刻失效

  alter user username password expire

  刪除使用者:

  drop user username [cascade]

  cascade 用在當被刪除的使用者下還有未刪除的對象(如一些表)時。強制串聯刪除。它表示刪除使用者全部對象。


oracle資料庫許可權管理

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.