作者:UB時(shí)間:2003-08-14 21:06:59
[修改][回復(fù)][刪除]ORACLE數(shù)據(jù)庫(kù)對(duì)象與用戶管理
一、
ORACLE數(shù)據(jù)庫(kù)的模式對(duì)象的管理與維護(hù)
本節(jié)的主要內(nèi)容是關(guān)于
ORACLE數(shù)據(jù)庫(kù)的模式對(duì)象的管理與維護(hù),這些模式對(duì)象包括:表空間、表、視圖、索引、序列、同義詞、聚集和完整性約束。對(duì)于每一個(gè)模式對(duì)象,首先描述了它的定義,說明了它的功能,最后以基于
SQL語言的實(shí)例說明如何對(duì)它們進(jìn)行管理于維護(hù)。
1.1表空間
由于表空間是包含這些模式對(duì)象的邏輯空間,有必要先對(duì)它進(jìn)行維護(hù)。
創(chuàng)建表空間
SQL>CREATETABLESPACEjxzy
>DATAFILE‘/usr/
oracle/dbs/jxzy.dbf’
>ONLINE;
修改表空間
SQL>ALTERTABLESPACEjxzyOFFLINENORMAL;
SQL>ALTERTABLESPACEjxzy
>RENAMEDATAFILE‘/usr/
oracle/dbs/jxzy.dbf’
>TO‘/usr/
oracle/dbs/jxzynew.dbf’
>ONLINE
SQL>CREATETABLESPACEjxzyONLINE
刪除表空間
SQL>DROPTABLESPACEjxzy
>INCLUDINGCONTENTS
1.2表維護(hù)
表是數(shù)據(jù)庫(kù)中數(shù)據(jù)存儲(chǔ)的基本單位,一個(gè)表包含若干列,每列具有列名、類型、長(zhǎng)度等。
表的建立
SQL>CREATETABLEjxzy.switch(
>OFFICE_NUMNUMBER(3,0)NOTNULL,
>SWITCH_CODENUMBER(8,0)NOTNULL,
>SWITCH_NAMEVARCHAR2(20)NOTNULL);
表的修改
SQL>ALTERTABLEjxzy.switch
>ADD(DESCVARCHAR2(30));
表的刪除
SQL>DROPTABLEjxzy.switch
>CASCADECONSTRAINTS
//刪除引用該表的其它表的完整性約束
1.3視圖維護(hù)
視圖是由一個(gè)或若干基表產(chǎn)生的數(shù)據(jù)集合,但視圖不占存儲(chǔ)空間。建立視圖可以保護(hù)數(shù)據(jù)安全(僅讓用戶查詢修改可以看見的一些行列)、簡(jiǎn)化查詢操作、保護(hù)數(shù)據(jù)的獨(dú)立性。
視圖的建立
SQL>CREATEVIEWjxzy.pole_well_viewAS
>(SELECTpole_path_numASpath,
poleASdevice_numFROMpole
>UNION
>SELECTpipe_path_numASpath,
>wellASdevice_numFROMwell);
視圖的替換
SQL>REPLACEVIEWjxzy.pole_well_viewAS
>(SELECTpole_path_numASpath,
poleASsupport_deviceFROMpole
>UNION
>SELECTpipe_path_numASpath,
wellASsupport_deviceFROMwell);
視圖的刪除
SQL>DROPVIEWjxzy.pole_well_view;
1.4序列維護(hù)
序列是由序列發(fā)生器生成的唯一的整數(shù)。
序列的建立
SQL>CREATESEQUENCEjxzy.sequence_cable
>STARTWITH1
>INCREMENTBY1
>NO_MAXVALUE;
建立了一個(gè)序列,jxzy.sequence_cable.currval返回當(dāng)前值,jxzy.sequence_cable.nextval返回當(dāng)前值加1后的新值
序列的修改
SQL>ALTERSEQUENCEjxzy.sequence_cable
>STARTWITH1//起點(diǎn)不能修改,若修改,應(yīng)先刪除,然后重新定義
>INCTEMENTBY2
>MAXVALUE1000;
序列的刪除
SQL>DROPSEQUENCEjxzy.sequence_cable
1.5索引維護(hù)
索引是與表相關(guān)的一種結(jié)構(gòu),它是為了提高數(shù)據(jù)的檢索速度而建立的。因此,為了提高表上的索引速度,可在表上建立一個(gè)或多個(gè)索引,一個(gè)索引可建立在一個(gè)或幾個(gè)列上。
對(duì)查詢型的表,建立多個(gè)索引會(huì)大大提高查詢速度,對(duì)更新型的表,如果索引過多,會(huì)增大開銷。
索引分唯一索引和非唯一索引
索引的建立
SQL>CREATEI(yíng)NDEXjxzy.idx_switch
>ONswitch(switch_name)
>TABLESPACEjxzy;
索引的修改
SQL>ALTERI(yíng)NDEXjxzy.idx_switch
>ONswitch(office_num,switch_name)
>TABLESPACEjxzy;
索引的刪除
SQL>DROPI(yíng)NDEXjxzy.idx_switch;
1.6完整性約束管理
數(shù)據(jù)庫(kù)數(shù)據(jù)的完整性指數(shù)據(jù)的正確性和相容性。數(shù)據(jù)完整型檢查防止數(shù)據(jù)庫(kù)中存在不符合語義的數(shù)據(jù)。
完整性約束是對(duì)表的列定義一組規(guī)則說明方法。
ORACLE提供如下的完整性約束.
a.NOTNULL非空
b.UNIQUE唯一關(guān)鍵字
c.PRIMATYKEY主鍵一個(gè)表只能有一個(gè),非空
d.FOREIGAKEY外鍵
e.CHECK表的每一行對(duì)指定條件必須是true或未知(對(duì)于空值)
例如:
某列定義非空約束
SQL>ALTERTABLEoffice_organization
>MODIFY(descVARCHAR2(20)
>CONSTRAINTnn_descNOTNULL)
某列定義唯一關(guān)鍵字
SQL>ALTERTABLEoffice_organization
>MODIFY(office_nameVATCHAR2(20)
>CONSTRAINTuq_officenameUNIQUE)
定義主鍵約束,主鍵要求非空
SQL>CREATETABLEswitch(switch_codeNUMBER(8)
>CONSTRAINTpk_switchcodePRIMARYKEY,)
使主鍵約束無效
SQL>ALTERTABLEswitchDISABLEPRIMARYKEY
定義外鍵
SQL>CREATETABLEPOLE(pole_codeNUMBER(8),
>office_numnumber(3)
>CONSTRAINTfk_officenum
>REFERENCESoffice_organization(office_num)
>ONDELETECASCADE);
定義檢查
SQL>CREATETABLEoffice_organization(
>office_numNUMBER(3),
>CONSTRAINTcheck_officenum
>CHECK(office_numBETWEEN10AND99);
二、
ORACLE數(shù)據(jù)庫(kù)用戶與權(quán)限管理
ORACLE是多用戶系統(tǒng),它允許許多用戶共享系統(tǒng)資源。為了保證數(shù)據(jù)庫(kù)系統(tǒng)的安全,數(shù)據(jù)庫(kù)管理系統(tǒng)配置了良好的安全機(jī)制。
2.1
ORACLE數(shù)據(jù)庫(kù)安全策略
建立系統(tǒng)級(jí)的安全保證
系統(tǒng)級(jí)特權(quán)是通過授予用戶系統(tǒng)級(jí)的權(quán)利來實(shí)現(xiàn),系統(tǒng)級(jí)的權(quán)利(系統(tǒng)特權(quán))包括:建立表空間、建立用戶、修改用戶的權(quán)利、刪除用戶等。系統(tǒng)特權(quán)可授予用戶,也可以隨時(shí)回收。
ORACLE系統(tǒng)特權(quán)有80多種。
建立對(duì)象級(jí)的安全保證
對(duì)象級(jí)特權(quán)通過授予用戶對(duì)數(shù)據(jù)庫(kù)中特定的表、視圖、序列等進(jìn)行操作(查詢、增、刪改)的權(quán)利來實(shí)現(xiàn)。
建立用戶級(jí)的安全保證
用戶級(jí)安全保障通過用戶口令和角色機(jī)制(一組權(quán)利)來實(shí)現(xiàn)。引入角色機(jī)制的目的是簡(jiǎn)化對(duì)用戶的授權(quán)與管理。做法是把用戶按照其功能分組,為每個(gè)用戶建立角色,然后把角色分配給用戶,具有同樣角色的用戶有相同的特權(quán)。
2.2用戶管理
ORACLE用戶管理的內(nèi)容主要包括用戶的建立、修改和刪除
用戶的建立
SQL>CREATEUSERjxzy
>IDENTIFIEDBYjxzy_password
>DEFAULTTABLESPACEsystem
>QUATA5MONsystem;//供用戶使用的最大空間限額
用戶的修改
SQL>CREATEUSERjxzy
>IDENTIFIEDBYjxzy_pw
>QUATA10MONsystem;
刪除用戶及其所建對(duì)象
SQL>DROPUSERjxzyCASCADE;//同時(shí)刪除其建立的實(shí)體
2.3系統(tǒng)特權(quán)管理與控制
ORACLE提供了80多種系統(tǒng)特權(quán),其中每一個(gè)系統(tǒng)特權(quán)允許用戶執(zhí)行一個(gè)或一類數(shù)據(jù)庫(kù)操作。
授予系統(tǒng)特權(quán)
SQL>GRANTCREATEUSER,ALTERUSER,DROPUSER
>TOjxzy_new
>WITHADMINOPTION;
回收系統(tǒng)特權(quán)
SQL>REVOKECREATEUSER,ALTERUSER,DROPUSER
>FROMjxzy_new
//但沒有級(jí)聯(lián)回收功能
顯示已被授予的系統(tǒng)特權(quán)(某用戶的系統(tǒng)級(jí)特權(quán))
SQL>SELECT*FROMsys.dba_sys_privs
2.4對(duì)象特權(quán)管理與控制
ORACLE對(duì)象特權(quán)指用戶在指定的表上進(jìn)行特殊操作的權(quán)利。這些特殊操作包括增、刪、改、查看、執(zhí)行(存儲(chǔ)過程)、引用(其它表字段作為外鍵)、索引等。
授予對(duì)象特權(quán)
SQL>GRANTSELECT,INSERT(office_num,office_name),
>UPDATE(desc)ONoffice_organization
>TOnew_adminidtrator
>WITHGRANTOPTION;
//級(jí)聯(lián)授權(quán)
SQL>GRANTALLONoffice_organization
>TOnew_administrator
回收對(duì)象特權(quán)
SQL>REVOKEUPDATEONoffice_orgaization
>FROMnew_administrator
//有級(jí)聯(lián)回收功能
SQL>REVOKEALLONoffice_organization
>FROMnew_administrator
顯示已被授予的全部對(duì)象特權(quán)
SQL>SELECT*FROMsys.dba_tab_privs
2.5角色的管理
ORACLE的角色是命名的相關(guān)特權(quán)組(包括系統(tǒng)特權(quán)與對(duì)象特權(quán)),
ORACLE用它來簡(jiǎn)化特權(quán)管理,可把它授予用戶或其它角色。
ORACLE數(shù)據(jù)庫(kù)系統(tǒng)預(yù)先定義了CONNECT、RESOURCE、DBA、EXP_FULL_DATABASE、I(yíng)MP_FULL_DATABASE五個(gè)角色。CONNECT具有創(chuàng)建表、視圖、序列等特權(quán);RESOURCE具有創(chuàng)建過程、觸發(fā)器、表、序列等特權(quán)、DBA具有全部系統(tǒng)特權(quán);EXP_FULL_DATABASE、I(yíng)MP_FULL_DATABASE具有卸出與裝入數(shù)據(jù)庫(kù)的特權(quán)。
通過查詢sys.dba_sys_privs可以了解每種角色擁有的權(quán)利。
授予用戶角色
SQL>GRANTDBATOnew_administractor
>WITHGRANTOPTION;