常見異常:
ORA-14025:不能為實體化視圖或實體化視圖日志指定PARTITION
ORA-14026:PARTITION和CLUSTER子句互相排斥
ORA-14027:僅可以指定一個PARTITION子句
ORA-14028:缺少AT或VALUES關鍵字
ORA-14029:GLOBAL分區索引必須加上前綴
ORA-14030:CREATETABLE語句中有不存在的分區列
ORA-14031:分區列的類型不可以是LONG或LONGRAW
ORA-14032:分區編號的分區界限過高
ORA-14033:ctchvl:未預期的strdef類型
ORA-14034:ctchvl:未預期的操作數類型
ORA-14035:ctchvl:未預期的字符串數據類型
ORA-14036:列的分區界限值過大
ORA-14037:分區""的分區界限過高
ORA-14038:GLOBAL分區索引必須加上前綴
ORA-14039:分區列必須構成UNIQUE索引的關鍵字列子集
ORA-14040:傳遞給TABLE$OR$INDEX$PART$NUM的參數個數不當
ORA-14041:可能沒有為結果分區指定分區界限
ORA-14042:可能沒有為要移動,修改或重建的分區指定分區界限
ORA-14043:僅可以添加一個分區
ORA-14044:僅可以移動一個分區
ORA-14045:僅可以修改一個分區
ORA-14046:分區可以剛好分成兩個新的分區
ORA-14047:ALTERTABLE|INDEXRENAME不可以與其它分區組合
ORA-14048:分區維護操作不可以與其它操作組合
ORA-14049:無效的ALTERTABLEMODIFYPARTITION選項
ORA-14050:無效的ALTERINDEXMODIFYPARTITION選項
ORA-14051:ALTERMATERIALIZEDVIEW選項無效
ORA-14052:此上下文中不允許分區擴展表名稱語法
ORA-14053:非法嘗試修改(在語句中)
ORA-14054:無效的ALTERTABLETRUNCATEPARTITION選項
ORA-14055:ALTERINDEXREBUILD中的關鍵字REBUILD必須緊跟索引名稱
ORA-14056:分區編號:PCTUSED和PCTFREE的總和不可以超過100
ORA-14057:分區"":PCTUSED和PCTFREE的總和不可以超過100
ORA-14058:分區編號:INITRANS值必須小於MAXTRANS值
ORA-14059:分區"":INITRANS值必須小於MAXTRANS值
ORA-14060:不可以更改表分區列的數據類型或長度
ORA-14061:不可以更改索引分區列的數據類型或長度
ORA-14062:一個或多個表分區駐留在只讀表空間中
ORA-14063:唯一/主約束條件關鍵字中存在無用索引
ORA-14064:唯一/主約束條件關鍵字中存在無用分區的索引
ORA-14065:不可以指定分區表的ALLOCATESTORAGE
ORA-14066:按索引組織的未分區表的選項非法
ORA-14067:重復的TABLESPACE_NUMBER說明
ORA-14068:不可以同時指定TABLESPACE和TABLESPACE_NUMBER
ORA-14069:無效的TABLESPACE_NUMBER值
ORA-14070:僅可以指定分區索引或包含REBUILD的選項
ORA-14071:用於強制約束條件的索引選項無效
ORA-14072:不可以截斷固定表
ORA-14073:不可以截斷引導程序表或群集
ORA-14074:分區界限必須調整為高於最后一個分區界限
ORA-14075:分區維護操作僅可以對分區索引執行
ORA-14076:DROP/SPLITPARTITION不可以應用到LOCAL索引分區
ORA-14078:您不可以刪除GLOBAL索引的最高分區
ORA-14079:標記為無用索引的分區選項非法
ORA-14080:無法按指定的上限來分割分區
ORA-14081:新分區名必須與舊分區名不同
ORA-14082:新分區名必須與對象的任何其它分區名不同
ORA-14083:無法刪除分區表的唯一分區
ORA-14084:您僅可以指定LOCAL索引的TABLESPACEDEFAULT
ORA-14085:分區表不能具有LONG數據類型的列
ORA-14086:不可以將區索引作為整體重建
一般權限用戶的登錄驗證都是第三種方式,即數據庫驗證,因為用戶名和密碼都是存儲在數據庫當中的。然而,SYS用戶(具有SYSDBA和SYSOPER權限的用戶)卻不是數據庫驗證。在oracle數據沒有啟動的時候,SYS用戶就可以連接到數據庫,並對其進行啟動等操作,所以不可能是數據庫驗證。SYS用戶采用的是第一種和第二種驗證方式。
1 sqlplus /nolog,conn /as sysdba 之所以能夠登錄,在於oracle登錄時的身份認證方式。可以試一下這個:sqlplus /nolog,conn abcd/sss as sysdba,你發現也能夠登錄成功。2 oracle在登錄時,有三種身份認證方式:操作系統身份認證、密碼文件認證、數據庫認證。而conn /as sysdba是屬於操作系統認證。 為什么這樣說呢?你當前電腦開機時登錄的用戶,也就是進入操作系統的用戶,例如是gooooal,它在你電腦的ora_dba組中。可以在我的電腦單擊右鍵,找到管理,選擇本地用戶和組,發現有一個組叫ora_dba,雙擊它,看到成員列表中有gooooal。 也就是在conn /as sysdba,oracle會進行操作系統驗證,發現你當前登錄的用戶就屬於ora_dba組,因此才可以登錄成功。 你可以把ora_dba組中的gooooal用戶刪除,再conn /as sysdba,就發現進不去了。3 密碼文件驗證可以查閱相關資料,百度oracle的身份驗證方式,就可以查到相關資料。4 其實在linux或unix環境下,安裝oracle是要設置很多東西的,比如用戶和用戶組的設置等,不像在windows下,安裝傻瓜化了。5 關於安全性,如果將oracle安裝在本地,其實你本地就是oracle服務器,所以權限高一些。你用哪個用戶來啟動oracle實例?哪個用戶來mount數據庫?哪個用戶來打開數據庫?從而才能進行之后的select等sql操作? 在oracle實例等還沒有啟動的時候,oracle數據庫里面建的用戶肯定是不能使用的。所以才會有操作系統身份驗證。用這個用戶,來啟動oracle實例、轉載數據庫等。之后才能做oracle表的增刪改查。
3.2 Sql*Plus
3.2.1 Windows操作系統
3.2.1.1 連接數據庫
3.2.1.2 斷開數據庫
3.2.2 Linux操作系統
3.2.2.1 連接數據庫
連接遠程數據庫:
1) 輸入Shell命令:sqlplus 用戶名/密碼@連接描述符。例如:sqlplus test/test@orcl,表示使用test用戶名和test密碼通過orcl連接描述符連接數據庫。
2) 操作系統會自動根據$PATH環境變量去運行$ORACLE_HOME/bin/sqlplus可執行文件。如果$PATH環境變量或$ORACLE_HOME環境變量不對,會導致無法執行sqlplus命令。
3) sqlplus會自動去找$ORACLE_HOME/network/admin/tnsnames.ora文件里配置的連接描述符。
4) sqlplus會自動使用指定的用戶名、密碼和連接描述符連接遠程數據庫,連接成功后會出現SQL命令的交互界面SQL。
注意:如果連接失敗,檢查遠程的數據庫是否已經啟動,遠程的監聽服務是否已經啟動,連接描述符配置文件tnsnames.ora是否有讀取權限,連接描述符是否配置正確,用戶名和密碼是否正確,密碼是否過期,用戶是否具有connect權限等。
連接本機數據庫:
1) 在命令行下輸入:sqlplus / as sysdba
2) 操作系統會自動根據$PATH環境變量去運行$ORACLE_HOME/bin/sqlplus可執行文件。
3) 連接成功后會出現SQL 交互界面。
提示:本機數據庫可以在關閉狀態下用此方法連接,但如果用連接遠程數據庫的方法來連接本機數據庫,要求數據庫必須已經啟動。
3.2.2.2 斷開數據庫
輸入SQL命令:exit或quit,表示斷開並退出sqlplus。
輸入SQL命令:disconnect,表示只斷開、但不退出sqlplus。
3.3 OEM
3.3.1 連接數據庫
用瀏覽器打開OEM的URL地址,輸入數據庫用戶名和密碼,點擊登錄即可完成連接。
查看OEM的URL地址:查看$ORACLE_HOME\install下的readme.txt
3.3.2 斷開數據庫
點擊網頁的右上角的注銷按鈕,即可斷開數據庫。斷開后可以再次登錄,或關閉瀏覽器。
3.4 OCILIB
3.4.1 連接及斷開數據庫
#include stdio.h #include "ocilib.h"
int main (int argc, char ** argv) { if (OCI_Initialize (NULL, NULL, OCI_ENV_DEFAULT) == 0)//如果初始化OCILIB庫失敗,就報錯 { return -1; }
OCI_Connection * ociConn;
ociConn = OCI_ConnectionCreate ("192.168.227.128", "test", "test", OCI_SESSION_DEFAULT);//連接數據庫 if (ociConn == 0)//如果連接數據庫失敗,就報錯 { return -1; }
OCI_ConnectionFree (ociConn);//斷開數據庫
return 0; } |
3.5 tnsnames.ora連接描述符配置文件說明
3.5.1 TNS簡介
TNS全稱Transparence Network Substrate,直譯為透明網絡底層,也稱連接描述符。
Oracle數據庫客戶端就是通過連接描述符來知道如何連接數據庫服務器的。
3.5.2 配置文件路徑
本配置文件在Oracle數據庫安裝路徑下的network下的admin下的tnsnames.ora
3.5.3 文件格式說明
表示一個空格,一個都不能少,也不能多
表示連接描述符的名字,不區分大小寫
表示數據庫服務器的IP地址
表示數據庫服務器的端口號,一般不用改
表示直連方式連接數據庫服務器,一般不用改
表示數據庫服務名,使用SQL show parameter service_name;命令查看
注意:配置多個連接描述符時,每一個之間間隔一空行。
3.6 sqlnet.ora連接方式配置文件說明
3.6.1 簡介
本配置文件主要是配置數據庫客戶端如何連接數據庫服務端。例如配置連接超時時間、接收數據超時時間、發送數據超時時間、服務器查找方式等。
3.6.2 配置文件路徑
本配置文件在Oracle數據庫安裝路徑下的network下的admin下的sqlnet.ora
3.6.3 文件格式說明
SQLNET.RECV_TIMEOUT = 1 //配置接收數據超時時間,單位秒
SQLNET.SEND_TIMEOUT = 1 //配置發送數據超時時間,單位秒
SQLNET.INBOUND_CONNECT_TIMEOUT = 1 //配置連接超時時間,單位秒
SQLNET_ALLOWED_LOGON_VERSIONS = (11,10,9,8) //允許連接的數據庫服務端版本號
3.7 listener.ora監聽服務配置文件說明
3.7.1 簡介
本配置文件主要是配置數據庫服務端的監聽服務。
3.7.2 配置文件路徑
本配置文件在Oracle數據庫安裝路徑下的network下的admin下的listener.ora
3.7.3 文件格式說明
暫無。
3.8 設置Windows下ODBC訪問Oracle數據庫
假如Oracle 數據庫安裝在IP 為 192.168.0.20 的服務器上,實例名為"MyTestInstance",並添加用戶mytestuser 和密碼 password1,以備下文作為范例使用。服務器上可以配置多個實例,每個實例就是一個邏輯上獨立的數據庫。
客戶端是指需要訪問服務端的Oracle數據庫的計算機,它可以與服務器是同一台機器,它也可以是網絡能夠訪問到該服務器的任何其它計算機。
下面討論如何在Windows客戶端機上配置 Oracle 9i ODBC 來訪問遠程Oracle 9i數據庫。
通過ODBC來訪問Oracle的原理如圖所示:
客戶程序---- ODBC ---- Oracle OCI ------ Oracle 服務器
首先,在客戶端上裝一個 Oracle OCI (Oracle Call Interface),它是真正直接與遠程Oracle服務器打交到,實現數據傳輸的組件。為了使用ODBC的統一方式來訪問Oracle數據庫,還必須裝一個Oracle ODBC driver. 它接收客戶程序的數據庫訪問請求,並把ODBC類型的請求轉換為對Oracle OCI的請求。OCI實現操縱Oracle數據庫,並將查詢結果或其它結果返回給ODBC driver, ODBCdriver 最后將結果返回給客戶程序。換句話說,客戶通過ODBC來訪問數據庫,而ODBC則是通過調用OCI的API來實現其功能的。
以剛才所述的服務器設置為基礎,下面給出客戶端Oracle ODBC的配置步驟。
步驟1:安裝Oracle 客戶端運行時庫,其中包括 Oracle OCI.
步驟2:設置 OCI 訪問信息
OCI訪問Oracle 服務器需要知道
1,服務器IP地址或主機名,(主機名)
2,服務器的監聽端口, (端口號)
3,欲訪問的數據庫實例名。 (服務標識/服務名)
把這三個信息組成的信息集合起個名字就叫數據源名(服務命名)。
這些信息可以通過 Oracle Net Manager 來設置。在它的設置界面中用的名詞分別被列在對應的括號中。
本例設置如下:
服務命名: ABCD (隨便字符串)
主機名: 192.168.0.20
端口號: 1521 (必須與服務器端的一致,這里是缺省值)
服務標識/服務名: MyTestInstance
以后 Oracle ODBC driver 只需要提供給OCI服務命名(本例為ABCD),OCI就知道如何去訪問真正的數據庫了。
步驟3:設置ODBC DSN,即 ODBC數據源
進入控制面板/管理工具/數據源(ODBC)/系統DSN
點擊添加,選擇 MicroSoft ODBC for Oracle,.然后彈出一個對話框,填寫如下內容。
1,數據源名稱: MyOracleSrc 可隨便起,客戶程序將用它。
2, 描述:一段說明文字,自己能看懂即可。
3,用戶名稱: mytestuser 你最終需要訪問的數據庫所認可的用戶名。
4,服務器:ABCD (即OCI設置中的服務命名。這是中文版最容易引起誤解的地方。筆者開始就誤以為要填寫Oracle服務器的主機名)
步驟4: 客戶程序通過ODBC訪問數據庫的方法
客戶程序訪問數據庫時需要三個信息:
1,數據源: MyOracleSrc ,即ODBC DSN中設置的數據源名稱
2,用戶名: mytestuser
3,密碼: password1
這樣,就可以訪問到192.168.0.20上的數據庫 MyTestInstance.
為了驗證ODBC設置是否成功,可是使用DB查詢分析器試用版照步驟4來進行簡單的測試。
4 查看數據庫的服務名、實例名、端口號
4.1 Sql*Plus
如果無法連接數據庫,就建議使用連接本機數據庫方式連接。
查看服務名:
在SQL下輸入:select global_name from global_name;
在SQL下輸入:show parameter service_name;
查看實例名:
在SQL下輸入:select instance_name from v$instance;
查看端口號:
5 管理數據庫連接
5.1 查看數據庫連接
v$session表里存放所有的數據庫連接信息,使用select命令對此表的數據進行查看。其中:
username字段:此連接使用的數據庫用戶名。
sid字段:此連接的會話ID(Session ID)。
machine字段:此連接的遠端主機名。
port字段:此連接的遠端端口號。
注意:此視圖需要DBA權限才能查看此表。
6 數據庫用戶
Oracle數據庫的每一個用戶對應一個用戶配置文件,用戶配置文件控制着用戶的一些行為、權限和資源占用等。
一般的用戶都是對應DEFAULT這個用戶配置文件,也可以修改對應的用戶配置文件名。
Oracle數據庫還有一個用戶配置文件是否生效開關,如果為TRUE表示開啟用戶配置文件,如果為FALSE表示關閉用戶配置文件,但是用戶配置文件里有些配置是不由此開關控制,始終開啟(詳見4.1.4.5)。
6.1 創建數據庫用戶
注意:新用戶必須賦予connect或dba系統權限后,才能遠程連接。
6.1.1 Sql*Plus
在SQL下輸入:create user 用戶名 identified by 密碼;
6.2 刪除數據庫用戶
注意:當前已連接的用戶不能刪除。
6.2.1 Sql*Plus
在SQL下輸入:drop user 用戶名 cascade;
6.3 修改數據庫用戶的密碼
6.3.1 Sql*Plus
在SQL下輸入:alter user 用戶名 identified by "新密碼";
6.4 數據庫用戶權限
6.4.1 用戶權限簡介
權限分兩種,一種是系統權限,一種是對象權限。
系統權限是指數據庫系統規定的用戶使用數據庫的權限,權限作用於用戶。
只有擁有DBA權限的用戶才能給用戶賦予或收回系統權限。
system_privilege_map表里有所有的oracle數據庫系統內置的權限。
系統權限有以下幾種:
create cluster:
create procedure:
create sequence:
create table:
create view:
create trigger:
create type:
create session:可以創建會話,也就是允許這個用戶登錄,沒有此權限則不可以。
alter session:
create synonym:
create database link:可以創建私有的DBLink,私有的DBLink僅創建的用戶可用。
create public database link:可以創建全局的DBLink,全局的DBLink所有的用戶都可用。
以下是權限集合:
dba:全部特權,是系統最高權限,可以創建數據庫結構,沒有此權限則不可以。
resource:允許用戶創建各種對象的權限集合,包括:create cluster、create procedure、create sequence、create table、create trigger、create type。
connect:允許用戶遠程登錄的權限集合,包括:alter session、create cluster、create database link、create sequence、create session、create synonym、create view。
Oracle系統權限的分類
群集權限:
CREATE CLUSTER:在自己的方案中創建、更改和刪除群集。
CREATE ANY CLUSTER:在任何方案中創建群集。
ALTER ANY CLUSTER:在任何方案中更改群集。
DROP ANY CLUSTER:在任何方案中刪除群集。
數據庫權限:
ALTER DATABASE:運行ALTER DATABASE語句,更改數據庫的配置。
ALTER SYSTEM:運行ALTER SYSTEM語句,更改系統的初始化參數。
AUDIT SYSTEM:運行AUDIT SYSTEM和NOAUDIT SYSTEM語句,審計SQL。
AUDIT ANY:運行AUDIT和NOAUDIT語句,對任何方案的對象進行審計。
索引權限:
CREATE ANY INDEX:在任何方案中創建索引。
注意:沒有CREATE INDEX權限,CREATE TABLE權限包含了CREATE INDEX權限
ALTER ANY INDEX:在任何方案中更改索引。
DROP ANY INDEX:任何方案中刪除索引。
過程權限:
CREATE PROCEDURE:在自己的方案中創建、更改或刪除過程、函數和包。
CREATE ANY PROCEDURE:在任何方案中創建過程、函數和包。
ALTER ANY PROCEDURE:在任何方案中更改過程、函數和包。
DROP ANY PROCEDURE:在任何方案中刪除過程、函數或包。
EXECUTE ANY PROCEDURE:在任何方案中執行或者引用過程。
概要文件權限:
CREATE PROFILE:創建概要文件。
ALTER PROFILE:更改概要文件。
DROP PROFILE:刪除概要文件。
角色權限:
CREATE ROLE:創建角色。
ALTER ANY ROLE:更改任何角色。
DROP ANY ROLE:刪除任何角色。
GRANT ANY ROLE:向其他角色或用戶授予任何角色。
注意:沒有對應的REVOKE ANY ROLE權限。
回退段權限:
CREATE ROLLBACK SEGMENT:創建回退段。
注意:沒有對撤銷段的權限。
ALTER ROLLBACK SEGMENT:更改回退段。
DROP ROLLBACK SEGMENT:刪除回退段。
序列權限:
CREATE SEQLENCE:在自己的方案中創建、更改、刪除和選擇序列。
CREATE ANY SEQUENCE:在任何方案中創建序列。
ALTER ANY SEQUENCE:在任何方案中更改序列。
DROP ANY SEQUENCE:在任何方案中刪除序列。
SELECT ANY SEQUENCE:在任何方案中從任何序列中進行選擇。
會話權限:
CREATE SESSION:創建會話,登錄進入(連接到)數據庫。
ALTER SESSION:運行ALTER SESSION語句,更改會話的屬性。
ALTER RESOURCE COST:更改概要文件中的計算資源消耗的方式。
RESTRICTED SESSION:在數據庫處於受限會話模式下連接到數據。
同義詞權限:
CREATE SYNONYM:在自己的方案中創建、刪除同義詞。
CREATE ANY SYNONYM:在任何方案中創建專用同義詞。
CREATE PUBLIC SYNONYM:創建公共同義詞。
DROP ANY SYNONYM:在任何方案中刪除同義詞。
DROP PUBLIC SYNONYM:刪除公共同義詞。
表權限:
CREATE TABLE:在自己的方案中創建、更改和刪除表。
CREATE ANY TABLE:在任何方案中創建表。
ALTER ANY-TABLE:在任何方案中更改表。
DROP ANY TABLE:在任何方案中刪除表。
COMMENT ANY TABLE:在任何方案中為任何表、視圖或者列添加注釋。
SELECT ANY TABLE:在任何方案中選擇任何表中的記錄。
INSERT ANY TABLE:在任何方案中向任何表插入新記錄。
UPDATE ANY TABLE:在任何方案中更改任何表中的記錄。
DELETE ANY TABLE:在任何方案中刪除任何表中的記錄。
LOCK ANY TABLE:在任何方案中鎖定任何表。
FLASHBACK ANY TABLE:允許使用AS OF子句對任何方案中的表、視圖執行一個SQL語句的閃回查詢。
表空間權限:
CREATE TABLESPACE:創建表空間。
ALTER TABLESPACE:更改表空間。
DROP TABLESPACE:刪除表空間,包括表、索引和表空間的群集。
MANAGE TABLESPACE:管理表空間,使表空間處於ONLINE(聯機)、OFFLINE(脫機)、BEGIN BACKUP(開始備份)、END BACKUP(結束備份)狀態。
UNLIMITED TABLESPACE:不受配額限制地使用表空間。
注意:只能將UNLIMITED TABLESPACE授予賬戶而不能授予角色。
用戶權限:
CREATE USER:創建用戶。
ALTER USER:更改用戶。
BECOME USER:當執行完全裝入時,成為另一個用戶。
DROP USER:刪除用戶。
視圖權限:
CREATE VIEW:在自己的方案中創建、更改和刪除視圖。
CREATE ANY VIEW:在任何方案中創建視圖。
DROP ANY VIEW:在任何方案中刪除視圖。
COMMENT ANY TABLE:在任何方案中為任何表、視圖或者列添加注釋。
FLASHBACK ANY TABLE:允許使用AS OF子句對任何方案中的表、視圖執行一個SQL語句的閃回查詢。
觸發器權限:
CREATE TRIGGER:在自己的方案中創建、更改和刪除觸發器。
CREATE ANY TRIGGER:在任何方案中創建觸發器。
ALTER ANY TRIGGER:在任何方案中更改觸發器。
DROP ANY TRIGGER:在任何方案中刪除觸發器。
ADMINISTER DATABASE TRIGGER:允許創建ON DATABASE觸發器。在能夠創建ON DATABASE觸發器之前,還必須先擁有CREATE TRIGGER或CREATE ANY TRIGGER權限。
專用權限:
SYSOPER
(系統操作員權限)
STARTUP
SHUTDOWN
ALTER DATABASE MOUNT/OPEN
ALTER DATABASE BACKUP CONTROLFILE
ALTER DATABASE BEGIN/END BACKUP
ALTER DATABASE ARCHIVELOG
RECOVER DATABASE
RESTRICTED SESSION
CREATE SPFILE/PFILE
SYSDBA
(系統管理員權限)
SYSOPER的所有權限,並帶有WITH ADMIN OPTION子句
CREATE DATABASE
RECOVER DATABASE UNTIL
其他權限:
ANALYZE ANY:對任何方案中的任何表、群集或者索引執行ANALYZE語句。
GRANT ANY OBJECT PRIVILEGE:授予任何方案上的任何對象上的對象權限。
注意:沒有對應的REVOKE ANY OBJECT PRIVILEGE。
GRANT ANY PRIVILEGE:授予任何系統權限。
注意:沒有對應的REVOKE ANY PRIVILEGE。
SELECT ANY DICTIONARY:允許從sys用戶所擁有的數據字典表中進行選擇。
對象權限是指某種權限用戶對其它用戶的表或視圖的存取權限,權限作用於用戶下的表或視圖。
對象權限有以下幾種:
select:可以查詢表數據。
update:可以更新表數據。
insert:可以插入表數據。
delete:可以刪除表數據。
alter:可以修改表。
index:可以創建索引。
all:所有權限。
execute:可以執行存儲過程。
權限傳遞是指被賦予權限的用戶還可以賦予此權限給其他用戶,增加WITH ADMIN OPTION選項即可。
6.4.2 賦予系統權限
6.4.2.1 Sql*Plus
在SQL下輸入:grant 系統權限 to 用戶名;
允許傳遞權限:在SQL下輸入:grant 系統權限 to 用戶名 with admin option;
注意:多個權限之間用,逗號隔開。
6.4.3 收回系統權限
如果使用WITH ADMIN OPTION為某個用戶賦予可傳遞的系統權限,收回后將不能再使用權限傳遞,那么對於已經被這個用戶賦予相同權限的所有用戶來說,不會級聯收回這些用戶的相同權限。
系統權限無級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限不受影響;系統權限可以跨用戶回收,即A可以直接收回C用戶的權限。
6.4.3.1 Sql*Plus
在SQL下輸入:revoke 系統權限 from 用戶名;
注意:多個權限之間用,逗號隔開。
6.4.4 查看系統權限
6.4.4.1 Sql*Plus
查看當前用戶擁有哪些系統權限:
在SQL下輸入:select * from session_privs;
查看全部用戶擁有哪里權限:
SQL select * from dba_role_privs;
SQL select * from dba_sys_privs;
SQL select * from role_sys_privs;
6.4.5 賦予對象權限
6.4.5.1 Sql*Plus
在SQL下輸入:grant 對象權限 on 表或視圖名 to 用戶名;
注意:多個權限之間用,逗號隔開。
6.4.6 收回對象權限
如果使用WITH ADMIN OPTION為某個用戶賦予可傳遞的對象權限,收回后將不能再使用權限傳遞,那么對於已經被這個用戶賦予相同權限的所有用戶來說,同時還會級聯收回這些用戶的相同權限。
對象權限有級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限也會被收回;對象權限可以跨用戶回收,即A可以直接收回C用戶的權限。
6.4.6.1 Sql*Plus
在SQL下輸入:revoke 對象權限 on 表或視圖名 to 用戶名;
注意:多個權限之間用,逗號隔開。
6.4.7 查看對象權限
6.4.7.1 Sql*Plus
用戶可以查詢的表:
在SQL下輸入:select owner, table_name from all_tables;
用戶創建的表:
在SQL下輸入:select table_name from user_tables;
獲權可以存取的表(被賦予對象權限的):
在SQL下輸入:select grantor, table_schema, table_name, privilege from all_tab_privs;
授出權限的表(賦予對象權限):
在SQL下輸入:select grantee, owner, table_name, privilege from user_tab_privs;
6.5 鎖定數據庫用戶
在SQL下輸入:alter user 用戶名 account lock;
注意:只能是具有DBA權限的用戶才能執行此命令。
每一個數據庫用戶都可以被鎖定,鎖定后此用戶就無法登陸了,解鎖后又可以繼續登陸了。鎖定后,此用戶會被提示ORA-28000錯誤。
如果所有的DBA權限用戶都被鎖定了,就用sqlplus登陸本機數據庫后,執行解鎖命令。
6.5.1 查看數據庫用戶鎖定時間
在SQL下輸入:select username,lock_date from dba_users where username='用戶名大寫';
注意:可以查看Oracle服務器的此時段的listener.log日志,就可以知道是什么原因導致的鎖定。
6.6 解鎖數據庫用戶
在SQL下輸入:alter user 用戶名 account unlock;
注意:只能是具有DBA權限的用戶才能執行此命令。
6.7 用戶配置文件
6.7.1 操作用戶配置文件生效開關
查看:在SQL下輸入:show parameter resource;
NAME列為resource_limit行的對應VALUE列的值,TRUE表示開啟,FALSE表示關閉。
開啟:在SQL下輸入:alter system set resource_limit=true;
關閉:在SQL下輸入:alter system set resource_limit=false;
注意:修改用戶配置文件生效開關后,無需重啟數據庫,實時生效。
6.7.2 創建用戶配置文件
在SQL下輸入:create profile 用戶配置文件名 limit;
6.7.3 查看數據庫用戶對應的用戶配置文件名
在SQL下輸入:select username,profile from dba_users where username= '用戶名大寫';
PROFILE列對應此用戶的用戶配置文件名。
查看所有用戶對應的用戶配置文件名:
在SQL下輸入:select username,profile from dba_users;
6.7.4 修改數據庫用戶對應的用戶配置文件名
在SQL下輸入:alter user 用戶名 profile 用戶配置文件名;
6.7.5 查看用戶配置文件各項資源
在SQL下輸入:select * from dba_profiles where profile='用戶配置文件名大寫';
例如:select * from dba_profiles where profile='DEFAULT';表示查看DEFAULT用戶配置文件。
配置文件里各項資源說明: