小編整理的一篇關於Oracle知識的學習筆記,希望對大家有協助。
1.簡單對比一下SQL Server 和Oracle
先給大家看一張我畫得圖:
安裝完Sql Server後,我們開啟、串連資料庫引擎後可以看到很多的資料庫有系統資料庫也有使用者資料庫。而Oracle安裝後,一個資料庫都對應一個服務,我們在使用前需要在電腦服務中開啟相應的服務,如圖中所示,服務開啟,使用者登入後看到的是一個資料庫,一個資料庫中可以有表、視圖、預存程序等資料對象。一個Oracle資料庫可以有多個使用者,使用者的許可權不同,進入到資料庫中看到的資料對象也是不同的。
2.Oracle中基本的概念和關係
我總結了一下Oracle中有5個必須要知道的概念:使用者、許可權、角色、方案和資料對象。
使用者的概念大家都知道不用贅述;許可權就是能不能做某一件事的證明;而角色可以看做是某些許可權的集合體。在Oracle中許可權有很多種,如果挨個給使用者授權會很麻煩,所以就把一些許可權分配給一個角色,那麼給使用者授予這個角色就解決挨個授予許可權的麻煩。方案這裡和使用者相對應。一個使用者,Oracle會預設給它一個方案,這個方案裡會存放資料對象。那麼資料對象又是什嗎?一想便知,資料對象就是表、視圖、預存程序等的總稱。他們之間的關係我用一張圖來說明。
系統許可權是使用者對資料庫的相關許可權,比如:登入。對象許可權是使用者對其他使用者的資料對象的操作許可權。比如:更新其他方案的表。看到這張圖不知道大家有沒有疑問:Oracle的許可權有哪些?角色有哪些?我們怎麼操作這個資料庫呢?後面的部落格會介紹這些。
3.Oracle的一種管理工具pl/sql Developer
pl/sql developer 是用於開發pl/sql塊的整合式開發環境,它是一個獨立的產品,而不是oracle的一個附帶品。pl/sql是procedural language/sql是Oracle在標準sql語言上的擴充。pl/sql不僅允許嵌入sql語言,還可以定義變數和常量,允許使用例外處理各種錯誤,使得它的功能變得更強大。
pl/sql塊由三部分構成:定義部分、執行部分、例外處理部分。定義部分和例外部分可選。
Declear /* 定義部分-----定義變數,常量,遊標,例外,複雜資料類型*/ Begin /*執行部分-----要執行的pl/sql語句和sql語句*/ Exception /*例外處理部分-----處理啟動並執行各種錯誤*/ End; 舉個最簡單的例子: Begin dbms_output.put_line('hello,world'); End;
為什麼會出現pl/sql中文亂碼問題?
前提是:本機沒有安裝Oracle,採用pl/sql遠端存取Oracle資料庫。本機安裝了Oracle用戶端和pl/sql。
伺服器上的Oracle有一個字元設定,比如UTF-8或者簡體中文,若沒有手動修改那麼會有一個預設的。在本機上Oracle用戶端和pl/sql也需要字元設定.如果伺服器和用戶端的字元編碼不一致,就會出現中文亂碼問題。所以,我們要做得就是修改他們使他們一致。(現在看來是如此簡單,當時怎麼會那麼糾結!)
怎麼解決pl/sql中文亂碼問題?
首先,我們要Crowdsourced Security Testing道伺服器端的Oracle是什麼字元編碼。開啟你的pl/sql,在命令視窗中輸入 select userenv('language') from dual; 就會先看到。如圖:
然後要做的就是設定原生字元設定為 SIMPLIFIED CHINESE_CHINA.ZHS16GBK。辦法是設定環境變數。步驟:我的電腦-->右擊-->屬性-->環境變數-->系統變數-->把nls_lang修改成SIMPLIFIED CHINESE_CHINA.ZHS16GBK,然後需要重啟pl/sql。網上很多資料說做到這一步就可以解決問題了。但是我的亂碼問題還是解決不了。若你的問題也解決不了,請這樣做:開啟你的註冊表找到這樣的目錄:找到:HKEY_LOCAL_MACHINE->SOFTWARE->ORACLE 中
設定右側NLS_LANG,將它的值也設定為SIMPLIFIED CHINESE_CHINA.ZHS16GBK。重啟pl/sql後,將已經添加進去的記錄刪除,重新添加一條再測試。以前添加的記錄很可能就是亂碼寫入的,看不到效果。
4、如何分配許可權和角色
1).什麼是許可權,什麼是角色?
許可權分為系統許可權和對象許可權。系統許可權是指執行特定類型sql命令的的權利。比如使用者具有了create table的許可權,可以在其方案中建表;當具有了create any table,可以在任何方案中建表。對象許可權是指訪問其他方案的權利,使用者可以直接存取自己方案的對象,但是如果要訪問別的方案的對象,則必須具有對象的許可權。比如Scott使用者要訪問Jane.emp表(Jane方案,emp表),則必須在Jane.emp表上具有對象許可權。
角色是相關許可權的命令集合,使用角色的目的主要是為了簡化許可權的管理。
2).常用的許可權和角色分類
這裡我們只簡單介紹最常用的即可,若想瞭解可查閱協助文檔也可通過查詢語句獲得。
a.系統許可權:關於資料庫連接(database link)、會話(session)、使用者(User)、資料表空間(tablespace)、角色(role)、資料對象(表、視圖、預存程序)等這些操作的create、drop和alter。
b.對象許可權:insert --添加 、delete --刪除 (資料)、 Alter --修改(修改表結構) 、Update --修改(更新資料) 、Select --查詢 。也就是增刪改查四大類。
c.角色分為預定義和自訂兩種。預定義是指Oracle所提供的角色,常用的包括:connect,resource,dba.
dba角色具有所有的系統許可權,預設的有dba角色的使用者是sys和system。 這兩個使用者可以將任何系統許可權授予其他使用者。注意一點就是:dba角色沒有啟動關閉資料庫的權利.Connect角色具有一般開發人員需要的大部分許可權,多數情況下,只要給使用者授權connect和resource角色就夠了。那麼connect和resource角色都有什麼許可權呢?這裡沒有必要一一列舉。我們可通過查詢獲得。那麼如何查詢呢?
3).查詢
如何查詢Oracle有多少種角色? select * from dba_roles;
如何查詢Oracle有多少種系統許可權和對象許可權? select * from system_privilege_map order by name; select distinct privilege from dba_tab_privs;
如何查看某個使用者有什麼樣的角色? select * from dba_role_privs where grantee='使用者名稱';
如何查看一個角色包括什麼系統許可權和對象許可權? select * from dba_sys_privs where grantee='角色名稱'; select * from dba_tab_privs where grantee='角色名稱';
4).授予和回收
這部分知識在學習過程中是按一條一條規則來的,學完覺得特別亂。我把這裡的東西按照一個正常的操作過程編成了一條操作線。感覺知識比較清晰了。
a.現在我要使用Oracle,必須要有使用者才行。Oracle預設建立兩個使用者sys和system.我們可以使用這兩個使用者登入上去,建立自己的使用者,如:create user Ken identified by ken.現在我們使用Ken來登入會給出錯誤資訊。為什嗎?因為Ken使用者沒有登入的許可權。現在我們需要給Ken授權:grant create session to Ken with admin option.這樣Ken使用者登入就ok了。那麼with admin option能起到什麼作用?這說明被授權的使用者或者是角色還可以將該系統許可權給其他使用者或者角色。
回收系統許可權操作:依然採用上面的例子:回收登入許可權:revoke create session from Ken; 系統許可權的回收不是級聯的。比如:Ken又將登入許可權授予Jane,那麼回收Ken的許可權後,Jane依然可以登入。
b.對於對象許可權來說,我們舉個例子:如果我的方案中有一張表emp,現在我想讓Ken使用者有許可權來操作我的表。那我怎麼辦?第一種辦法是用dba使用者將操作我的表emp的許可權給Ken,這裡需要說明一點:dba使用者可以將任何對象上的對象許可權授予其他使用者。第二種辦法是我自己來做。 如何做? grant select on emp to Ken with grant option.這裡我用到了 with grant option.這能起到這樣的作用:Ken使用者可以將操作我的表emp的許可權在授予別的使用者。這裡注意一點。它跟with admin option 不同,with grant option只能授予使用者,不能授予角色。
回收對象許可權操作:revoke select on emp from Ken ;對象許可權的回收是級聯的。比如:Ken將對emp表查詢的許可權授予Jane,那麼回收Ken的許可權後,Jane也不能對emp表進行查詢。
c.角色授權這裡需要兩步:1給角色授權2將角色給某一個使用者。現在我們將登入許可權給一個角色:grant create session to 角色名稱;然後把這個角色給使用者Ken:grant 角色名稱 to Ken.刪除角色採用 drop role 角色名稱。
總結:這篇部落格側重於介紹Oracle的基本機制,是最基本的知識,最後還介紹了如何分配許可權和角色,包括它們是什麼,分類以及如何去用它們。這裡我們要搞明白一個前提就很好理解:我們要做某一件事必須要有許可權。當我們沒有許可權的時候可以使用系統使用者去做,如果系統授予我們許可權那我們也可以做了。
以上就是對Oracle知識的整理,還有許多知識點未涉及到,在將來的文章更新中會陸續補充,希望大家繼續關注。