久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

oracle學(xué)習(xí)筆記之索引、權(quán)限

 levinLee 2010-07-27

十四:Oracle索引、權(quán)限

管理索引-原理介紹
 
介紹
索引是用于加速數(shù)據(jù)存取的數(shù)據(jù)對象,。合理的使用索引可以大大降低i/o次數(shù),,從而提高數(shù)據(jù)訪問性能。索引有很多種我們主要介紹常用的幾種:
為什么添加了索引后,,會加快查詢速度呢,?

創(chuàng)建索引
 
單列索引
單列索引是基于單個(gè)列所建立的索引,比如:
create index
索引名 on 表名(列名);
 
復(fù)合索引
復(fù)合索引是基于兩列或是多列的索引,。在同一張表上可以有多個(gè)索引,,但是要求列的組合必須不同,比如:
create index emp_idx1 on emp (ename, job);
create index emp_idx1 on emp (job, ename);

使用原則
 
使用原則
1.
在大表上建立索引才有意義
2.
where子句或是連接條件上經(jīng)常引用的列上建立索引
3.
索引的層次不要超過4
這里能不能給學(xué)生演示這個(gè)效果呢,?
如何構(gòu)建一個(gè)大表呢,?


索引的缺點(diǎn)
 
索引缺點(diǎn)分析
索引有一些先天不足:
1.
建立索引,系統(tǒng)要占用大約為表1.2倍的硬盤和內(nèi)存空間來保存索引,。
2.
更新數(shù)據(jù)的時(shí)候,,系統(tǒng)必須要有額外的時(shí)間來同時(shí)對索引進(jìn)行更新,以維持?jǐn)?shù)據(jù)和索引的一致性,。
實(shí)踐表明,不恰當(dāng)?shù)乃饕坏谑聼o補(bǔ),,反而會降低系統(tǒng)性能,。因?yàn)榇罅康乃饕谶M(jìn)行插入、修改和刪除操作時(shí)比沒有索引花費(fèi)更多的系統(tǒng)時(shí)間,。

比如在如下字段建立索引應(yīng)該是不恰當(dāng)?shù)模?
1.
很少或從不引用的字段,;
2.
邏輯型的字段,如男或女(是或否)等,。
綜上所述,,提高查詢效率是以消耗一定的系統(tǒng)資源為代價(jià)的,索引不能盲目的建立,,這是考驗(yàn)一個(gè)DBA是否優(yōu)秀的很重要的指標(biāo),。

其它索引
 
介紹
按照數(shù)據(jù)存儲方式,可以分為B*樹,、反向索引,、位圖索引;
按照索引列的個(gè)數(shù)分類,,可以分為單列索引,、復(fù)合索引;
按照索引列值的唯一性,,可以分為唯一索引和非唯一索引,。
此外還有函數(shù)索引,全局索引,分區(qū)索引...

對于索引我還要說:
在不同的情況,,我們會在不同的列上建立索引,,甚至建立不同種類的索引,請記住,,技術(shù)是死的,,人是活的。比如:
B*
樹索引建立在重復(fù)值很少的列上,,而位圖索引則建立在重復(fù)值很多,、不同值相對固定的列上。


顯示索引信息
 
顯示表的所有索引
在同一張表上可以有多個(gè)索引,,通過查詢數(shù)據(jù)字典視圖dba_indexsuser_indexs,,可以顯示索引信息。其中dba_indexs用于顯示數(shù)據(jù)庫所有的索引信息,,而user_indexs用于顯示當(dāng)前用戶的索引信息:
select index_name, index_type from user_indexes where table_name = '
表名';
 
顯示索引列
通過查詢數(shù)據(jù)字典視圖user_ind_columns,可以顯示索引對應(yīng)的列的信息
select table_name, column_name from user_ind_columns where index_name = 'IND_ENAME';
 
你也可以通過pl/sql developer工具查看索引信息

管理權(quán)限和角色
介紹
 
介紹
 
這一部分我們主要看看oracle中如何管理權(quán)限和角色,,權(quán)限和角色的區(qū)別在那里。
 
當(dāng)剛剛建立用戶時(shí),,用戶沒有任何權(quán)限,,也不能執(zhí)行任何操作。如果要執(zhí)行某種特定的數(shù)據(jù)庫操作,,則必須為其授予系統(tǒng)的權(quán)限,;如果用戶要訪問其它方案的對象,則必須為其授予對象的權(quán)限,。為了簡化權(quán)限的管理,,可以使用角色。這里我們會詳細(xì)的介紹,??磮D:

權(quán)限
 
權(quán)限
權(quán)限是指執(zhí)行特定類型sql命令或是訪問其它方案對象的權(quán)利,包括系統(tǒng)權(quán)限和對象權(quán)限兩種,。


系統(tǒng)權(quán)限
 
系統(tǒng)權(quán)限介紹
 
系統(tǒng)權(quán)限是指執(zhí)行特定類型sql命令的權(quán)利,。它用于控制用戶可以執(zhí)行的一個(gè)或是一組數(shù)據(jù)庫操作。比如當(dāng)用戶具有create table權(quán)限時(shí),,可以在其方案中建表,,當(dāng)用戶具有create any table權(quán)限時(shí),可以在任何方案中建表,。oracle提供了100多種系統(tǒng)權(quán)限,。
常用的有:
create session  
連接數(shù)據(jù)庫         create table            建表
create view     
建視圖             create public synonym   建同義詞
create procedure
建過程、函數(shù),、包   create trigger          建觸發(fā)器
create cluster
建簇

 
顯示系統(tǒng)權(quán)限
oracle
提供了100多種系統(tǒng)權(quán)限,,而且oracle的版本越高,,提供的系統(tǒng)權(quán)限就越多,我們可以查詢數(shù)據(jù)字典視圖system_privilege_map,,可以顯示所有系統(tǒng)權(quán)限,。
select * from system_privilege_map order by name;

 
授予系統(tǒng)權(quán)限
 
一般情況,授予系統(tǒng)權(quán)限是由dba完成的,,如果用其他用戶來授予系統(tǒng)權(quán)限,,則要求該用戶必須具有grant any privilege的系統(tǒng)權(quán)限。在授予系統(tǒng)權(quán)限時(shí),,可以帶有with admin option選項(xiàng),,這樣,被授予權(quán)限的用戶或是角色還可以將該系統(tǒng)權(quán)限授予其它的用戶或是角色,。為了讓大家快速理解,,我們舉例說明:
1.
創(chuàng)建兩個(gè)用戶kentom,。初始階段他們沒有任何權(quán)限,,如果登錄就會給出錯(cuò)誤的信息。
create user ken identfied by ken;
2
給用戶ken授權(quán)
1). grant create session, create table to ken with admin option;
2). grant create view to ken;
3
給用戶tom授權(quán)
我們可以通過kentom授權(quán),,因?yàn)?span lang=EN-US>with admin option
是加上的,。當(dāng)然也可以通過dbatom授權(quán),我們就用kentom授權(quán):
1. grant create session, create table to tom;
2. grant create view to ken;  --ok
嗎,?不ok

 
回收系統(tǒng)權(quán)限
 
一般情況下,,回收系統(tǒng)權(quán)限是dba來完成的,如果其它的用戶來回收系統(tǒng)權(quán)限,,要求該用戶必須具有相應(yīng)系統(tǒng)權(quán)限及轉(zhuǎn)授系統(tǒng)權(quán)限的選項(xiàng)(with admin option)?;厥障到y(tǒng)權(quán)限使用revoke來完成,。
 
當(dāng)回收了系統(tǒng)權(quán)限后,用戶就不能執(zhí)行相應(yīng)的操作了,,但是請注意,,系統(tǒng)權(quán)限級聯(lián)收回的問題?[不是級聯(lián)回收!]
system --------->ken ---------->tom
(create session)(create session)( create session)
system執(zhí)行如下操作:
revoke create session from ken;  --
請思考tom還能登錄嗎,?
答案:能,,可以登錄


對象權(quán)限
 
對象權(quán)限介紹
 
指訪問其它方案對象的權(quán)利,用戶可以直接訪問自己方案的對象,,但是如果要訪問別的方案的對象,,則必須具有對象的權(quán)限。
比如smith用戶要訪問scott.emp表(scott:方案,,emp:表)
常用的有:
alter
修改 delete 刪除  select 查詢 insert 添加
update
修改 index 索引  references 引用 execute 執(zhí)行
 
顯示對象權(quán)限
 
通過數(shù)據(jù)字段視圖可以顯示用戶或是角色所具有的對象權(quán)限,。視圖為dba_tab_privs
SQL> conn system/manager;
SQL> select distinct privilege from dba_tab_privs;
SQL> select grantor, owner, table_name, privilege from dba_tab_privs where grantee = 'BLAKE';

1.
授予對象權(quán)限
oracle9i前,,授予對象權(quán)限是由對象的所有者來完成的,如果用其它的用戶來操作,,則需要用戶具有相應(yīng)的(with grant option)權(quán)限,,從oracle9i開始,dba用戶(sys,,system)可以將任何對象上的對象權(quán)限授予其它用戶,。授予對象權(quán)限是用grant命令來完成的。
 
對象權(quán)限可以授予用戶,,角色,,和public。在授予權(quán)限時(shí),,如果帶有with grant option選項(xiàng),,則可以將該權(quán)限轉(zhuǎn)授給其它用戶。但是要注意with grant option選項(xiàng)不能被授予角色,。
1.monkey
用戶要操作scott.emp表,,則必須授予相應(yīng)的對象權(quán)限
1).
希望monkey可以查詢scott.emp表的數(shù)據(jù),怎樣操作,?
   grant select on emp to monkey;
2).
希望monkey可以修改scott.emp的表數(shù)據(jù),,怎樣操作?
   grant update on emp to monkey;
3).
希望monkey可以刪除scott.emp的表數(shù)據(jù),,怎樣操作,?
   grant delete on emp to monkey;
4).
有沒有更加簡單的方法,一次把所有權(quán)限賦給monkey,?
   grant all on emp to monkey;

2.
能否對monkey訪問權(quán)限更加精細(xì)控制,。(授予列權(quán)限)
1).
希望monkey只可以修改scott.emp的表的sal字段,怎樣操作,?
   grant update on emp(sal) to monkey
2).
希望monkey只可以查詢scott.emp的表的enamesal數(shù)據(jù),,怎樣操作,?
   grant select on emp(ename,sal) to monkey
...
3.
授予alter權(quán)限
如果black用戶要修改scott.emp表的結(jié)構(gòu),則必須授予alter對象權(quán)限
SQL> conn scott/tiger
SQL> grant alter on emp to blake;
當(dāng)然也可以用system,,sys來完成這件事。
4.
授予execute權(quán)限
如果用戶想要執(zhí)行其它方案的包/過程/函數(shù),,則須有execute權(quán)限。
比如為了讓ken可以執(zhí)行包dbms_transaction,,可以授予execute權(quán)限,。
SQL> conn system/manager
SQL> grant execute on dbms_transaction to ken;
5.
授予index權(quán)限
如果想在別的方案的表上建立索引,,則必須具有index對象權(quán)限。
如果為了讓black可以在scott.emp表上建立索引,,就給其index的對象權(quán)限
SQL> conn scott/tiger
SQL> grant index on scott.emp to blake;
6.
使用with grant option選項(xiàng)
該選項(xiàng)用于轉(zhuǎn)授對象權(quán)限,。但是該選項(xiàng)只能被授予用戶,,而不能授予角色
SQL> conn scott/tiger;
SQL> grant select on emp to blake with grant option;
SQL> conn black/shunping
SQL> grant select on scott.emp to jones;

 
回收對象權(quán)限
 
oracle9i中,收回對象的權(quán)限可以由對象的所有者來完成,,也可以用dba用戶(sys,,system)來完成,。
 
這里要說明的是:收回對象權(quán)限后,用戶就不能執(zhí)行相應(yīng)的sql命令,,但是要注意的是對象的權(quán)限是否會被級聯(lián)收回?【級聯(lián)回收】
如:scott------------->blake-------------->jones
   select on emp     select on emp       select on emp
SQL> conn scott/tiger@accp
SQL> revoke select on emp from blake
請大家思考,,jones能否查詢scott.emp表數(shù)據(jù),。
答案:查不了了(和系統(tǒng)權(quán)限不一樣,,剛好相反)

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多