oracle安全性

與刃爭鋒發表於2014-03-18
oracle安全性




建立和管理資料庫使用者賬戶


使用者登入到資料庫,通過指定一個賬戶名以及某種身份驗證方式連線到使用者賬戶. 


使用者:用某個使用者賬戶名建立針對例項的會話,並進行登入來連線到該賬戶的個人.
模式(schema):使用者賬戶擁有的一組物件.






使用者賬戶屬性


使用者賬戶擁有很多在建立賬戶時定義的屬性,這些將用於連線到賬戶的會話,在會話執行期間,DBA或會話可以更改其中一些屬性:


-使用者名稱
-身份驗證方法
-預設表空間
-表空間配額
-臨時表空間
-使用者配置檔案
-賬戶狀態


建立使用者時指定以上屬性,但其中只有使用者名稱和身份驗證方式是必須的,其它軍有預設值.


1.使用者名稱:
必須唯一,必須以字母開頭,不超過30個,不能是保留字,區分大小寫,但會自動轉為大寫字母,除非你要玩自己在雙引號中指定使用者名稱,可以不遵守這些規則(長度除外)


使用者名稱建立後不能更改,想改?刪了(同時使用者模式所有物件都會刪除)重建.


2.預設表空間配額:
每個賬戶都有預設的表空間,使用者的任何模式物件(表,索引等)將儲存在此表空間中.


            select property_value from database_properties
            where property_name='DEFAULT_PERMANENT_TABLESPACE'


如果建立使用者時沒指定預設表空間,那就使用資料庫的預設表空間給所有使用者賬戶.可以在建立資料庫時設定預設表空間,也可隨時更改:


            alter tablespace default tablespace 空間名;
           
配額(quota):
表空間中為使用者的模式物件分配的空間量.到達配額前隨意建立物件,用盡後則無法建立任何物件.如果將某使用者配額改為小於其擁有的物件大小,那麼物件將不變,但不允許變大.


select username,default_tablespace,temporary_tablespace from dba_users
where username='HR'                                     --查詢使用者hr的預設表空間和臨時表空間


alter user hr quota 10M on users                    --hr有權佔用user表空間的10M空間


alter user hr quota unlimited on example       --hr在example上可使用不限量空間


建立表,使用者必須有create table許可權,並且擁有在其中建立表的表空間上的配額.




2.臨時表空間


永久物件(比如表)儲存在永久表空間中,臨時物件就存在臨時表空間中.如果會話執行操作需要的空間量超出了PGA 的可用空間量,就需要臨時表空間中的空間.
PGA是程式全域性區,是分配給會話的專用記憶體.需要臨時空間(如果可能,在記憶體中,如有必要在臨時表空間中)的操作包括排序,聯接表,構建索引和使用臨時表.
回味每個使用者賬戶分配臨時表空間,但連線到 該賬戶的all使用者會話將共享此臨時表空間.


臨時表空間的管理自動完成,不用你操心,資料庫自己會根據需要建立,刪除臨時物件,不用為使用者授予臨時表空間的配額.因為臨時表空間的物件不歸使用者
所有,而屬於SYS使用者,SYS使用者擁有所有表空間上的無限配額.


要更改使用者的臨時表空間:
            alter user 使用者名稱 temporary tablespace 臨時空間名;
           


4.配置檔案
使用者的配置檔案控制口令設定,並在一定程度上控制資源的使用.配置檔案時管理口令和資源的有效方法,但實際上只適用於每個應用程式都有自己的資料庫使用者賬戶的環境.




5.使用者賬戶狀態:
            select account_status from dba_users
           
常見的也就是open,locked,expired,expired&locked


鎖定或解鎖某一賬戶:
            alter user 使用者名稱 account unlock;
            alter user 使用者名稱 account lock;
           
強制使用者更改口令:
            alter user 使用者名稱 password expire;
           










身份驗證方法


使用者必須有身份驗證方法:資料庫藉助這些方法,確定嘗試建立會話的使用者是否有權這麼做.最簡單的是提供一個與資料庫中儲存的口令相匹配的口令,除此之外還有其他方法:


-作業系統身份驗證(管理員專用)
-口令檔案身份驗證(管理員專用)
-口令身份驗證
-外部身份驗證
-全域性身份驗證




1.作業系統和口令檔案身份驗證
必須為使用者授予SYSDBA or SYSOPER許可權:
            
            grant [  sysdba | sysoper  ] to 使用者名稱;
           
一旦授予後,就會將使用者口令從資料字典複製到外部口令檔案中,此後資料庫即使沒開啟,例項也可讀取口令


            connect sys/bob@bob as sysdba | sysoper;
            
           
更改使用者口令,需要有許可權的使用者來:


            alter user 使用者名稱 identified by 新密碼;
           
3.外部身份驗證


4.全域性身份驗證






建立賬戶


create user必須有使用者名稱和身份驗證方法:


            create user myla identified by yang                     --使用者名稱,用與口令驗證的口令
            default tablespace users temporary temp          --提供預設表空間和臨時表空間
            quota 100m on users,unlimited on example       --設定配額
            profile developer_profile                                      --為使用者口令和資源管理的配置檔名
            password expire                                                   --強制使用者更改口令
            account unlock;                                                     --解鎖使用者,可用(預設設定)
           
要改口令:


            alter user myla identified by yang;


更改預設表空間臨時表空間:


            alter user myla default tablespace newusers temporary temp01;


更改配額:            
            
            alter user myla quota unlimited on newusers,quota 0 on users;
            
更改配置檔案:
       
            alter user myla profile prod_profile;


強制使用者更改口令:            
            
            alter user myla password expire;


鎖定賬戶:
           
            alter user myla lock;
刪除賬戶(一旦擁有物件就得加cascade了:


            drop user myla cascade;
           




public使用者挺有意思,它是個概念使用者,如果想給所有使用者授權,你可以將許可權授予public,那麼所有使用者就都擁有你賦予的某個許可權了. 












授予可撤銷許可權


預設下非授權使用者不能在資料庫中進行任何操作,用grant授權,revoke撤銷許可權.預設下SYS和SYSTEM才有權授予任何許可權.
將許可權授予他人的叫授予者grantor,被授予的叫grantee.


許可權有兩種:系統許可權(使用者可執行影響資料字典的操作)和物件許可權(可以執行影響主句的操作)




系統許可權
大約200種,大多數應用於影響資料字典的操作,比如建立使用者或表.其它的影響資料庫或例項,比如建立表空間,調整例項引數值,建立會話等.常用的許可權如下:


-create session                             允許使用者進行連線,否則使用者都無法登入到資料庫
-alter database                              允許訪問多個修改物理結構所需的命令
-create tablespace                        允許被授權人在自己的模式建立,更改或刪除表,在其上執行select和DML命令,建立更改刪除索引
-grant any object privilege            允許被授權人將其本身沒有的物件的物件許可權授予他人,但不能授予自己.
-create any table                           被授權人可以建立屬於其他使用者的表
-drop any table                              被授權人可以刪除屬於其他使用者的表
insert/update/delete any table      被授權人可以對所有其它使用者擁有的表執行DML命令
select any table                             可以對任何表執行select命令


授予許可權的語法:


            grant privilege [  ,privilege...  ] to 使用者名稱;
           
建立使用者賬戶後,通常給使用者如下系統許可權:


            grant create session,alter session,
                     create table,create view,create synonym,create cluster,create database link,
                     create sequence,create trigger,create type,create procedure,create operator
            to 使用者名稱;


這些許可權允許使用者連線和配置會話,建立儲存資料的物件和PL/SQL物件,只存在於其模式中,使用者沒有針對其他模式的許可權,物件的建立也受到為其分配
的配額的限制.
此語法的一個變體允許被授權人將許可權傳遞給第三方,比如:


            connect sys/bob
            grant create table to myla with admin option;
            
            connect myla/yang
            grant create table to peach;
            
這給予了myla發出grant的權利,讓peach也能建立表,但peach只在自己的模式中建立表


使用者被授予帶有admin option的許可權,即使對其做了撤銷,其給別人的許可權也都保留,也就是說不存在撤銷級聯.


來個栗子:A grant ... to B admin option,B grant ... to C,把B的許可權撤消了,也不影響C擁有的許可權. 


!!!系統許可權的撤銷不會級聯,而物件許可權的撤銷是有級聯效應的.


any許可權要慎用,因為針對的是資料庫所有相關物件給予許可權:


            grant select any table to myla;
           
此時myla能查詢每個模式的每個表,除系統管理員外,any許可權給誰都不穩妥!






物件許可權


物件許可權允許針對表和相關物件執行select,insert,update,delete命令,也允許執行PL/SQL物件.這些許可權不存在於使用者自己的模式物件中 .如果使用者有create table許可權,
那就能對建立的表執行select和DML操作,而不用額外再給它什麼許可權.


                                                                            不同許可權的授權物件


    許可權                                                                          不同許可權的授權物件                           
   
   select                                                   表,檢視,序列和同義詞
   insert                                                    表,檢視和同義詞
   update                                                  表,檢視和同義詞
   delete                                                   表,檢視和同義詞
   alter                                                      表和序列
   execute                                                過程,函式,包和同義詞       
  




語法如下:


            grant privilege on [  schema.  ] object to 使用者名稱 [  with grant option  ];
            
例如:


            grant select on store.customers to myla;
            grant update (order_status) on store.orders to myla;
            grant all on store.regions to myla;
           
允許myla查詢score模式中的orders表的所有列,但只對一個列order_status執行寫操作.此後myla給予了store的regions表的所有物件許可權(select和DML)


一般在列級別授權有些繁瑣,建立一個顯示特定列的檢視,更方便一些.




使用with grant option可將物件許可權傳給第三方,會產生級聯效應
            
再來個栗子:A grant ... to B with grant option,B grant ... to C,把B的許可權撤消了, C也沒了...許可權.


查查某個使用者都有哪些物件許可權and系統許可權


--select grantee,privilege,grantor,grantable from dba_tab_privs
select * from dba_tab_privs
where owner='HR' and table_name='JOBS'


select * from dba_sys_privs
where grantee='HR'










建立和管理角色


角色不是模式物件:不屬於任何人,所以前面不能加使用者名稱,但角色可以與使用者共享同一個名稱空間:建立的角色不能與已有使用者同名,也不能與已有角色同名.


            create role 角色名;
           
然後用普通方式給角色授權,根據需要with admin option或with grant option


可以將角色授予另一個角色,角色的撤銷不會級聯.




預先定義的角色


-connect  高版本中只有create session許可權
-resource 可建立資料物件(表)和過程物件(PL/SQL),還有unlimited tablespace許可權
-DBA 有大多數系統許可權,被授予的使用者除了啟動關閉資料庫,其它許可權都有.
-select_catalog_role 針對資料字典物件的2000多個物件許可權,但沒有系統許可權或針對使用者資料的許可權.這對新管理員有用,這些人監視資料庫並報告資料庫情況,但看不到資料.
-scheduler_admin 有管理排程服務的排程程式所需的系統許可權


還有個預定義的public,此角色始終授予每個使用者,給public任何許可權,大家就都有了此許可權.








建立和管理配置檔案

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25025926/viewspace-1124519/,如需轉載,請註明出處,否則將追究法律責任。

相關文章