目錄
----------------------------------------------分割線---------------------------------------------------------
1.用戶的創建
在Oracle中默認有3個用戶:SYS,SYSTEM,SCOTT
其中數據庫所有的數據字典表和視圖都存儲在SYS模式中,相當於Linux下的root用戶。模式和用戶可以認爲是同一個概念。
SYSTEM是默認的系統管理員,可以管理表和視圖、用戶、權限等
SCOOT是默認的普通用戶,以Oracle公司的第一個普通員工命名的,默認密碼是tiger,剛開始這個用戶是被鎖住的,無法用該用戶登錄。
剛開始都是以SYS或者SYSTEM登錄。來創建普通用戶:
drop user voapd;
create user voapd identified by voapd;
--create user [用戶名] identified by [密碼] Default tablespace [默認表空間名] Temporary tablespace [臨時表空間名]
創建完後可嘗試登錄新創建的用戶:
發現剛創建的用戶沒有創建會話的權限,需要被授予相應的權限。授予voapd創建會話權限和解除scott鎖定:
revoke CREATE SESSION from voapd;
grant CREATE SESSION to voapd with admin option;
--GRANT [權限] TO [用戶] [WITH ADMIN OPTION]
alter user scott account unlock;
之後就可以登錄voapd用戶 和scott用戶了,第一次登錄scott用戶,會叫你重置密碼。with admin option 表示被授予系統權限的用戶,可以繼續有權利授予其他用戶相應的權限。
2.用 Profile(概要文件) 管理用戶:
Profile文件裏包含了16個用於管理用戶的規則和值,包含了"登錄幾次失敗就會把用戶給鎖定","鎖定的天數爲多少天",像這樣的參數信息。每個用戶都會關聯一個Profile文件,然後用戶就會遵循Profile裏的規則。當沒有指定的Profile或者指定的Profile文件被刪除時,用戶關聯的默認概要文件就爲DEFAULT。
select * from dba_profiles 可以查看profile信息。 dba_users可以查看用戶信息,裏面可以找到用戶關聯的Profile文件。(UNLIMITED指無窮大)
PROFILE參數解釋如下:
COMPOSITE_LIMIT | 指定一個會話的總的資源消耗,以service units單位表示。Oracle數據庫以有利的方式計算 |
PASSWORD_LOCK_TIME | 指定登陸嘗試失敗次數到達後帳戶的鎖定時間,以天爲單位。 |
PASSWORD_VERIFY_FUNCTION | 密碼驗證腳本. |
PASSWORD_REUSE_MAX | 允許使用歷史密碼作爲新密碼的間隔次數 |
PASSWORD_REUSE_TIME | 允許使用歷史密碼作爲新密碼的間隔天數 |
PASSWORD_LIFE_TIME | 指定同一密碼所允許使用的天數 |
FAILED_LOGIN_ATTEMPTS | 密碼登錄失敗次數,超過則鎖定用戶 |
PRIVATE_SGA | SGA共享池可以給會話分配的最大字節 |
CONNECT_TIME | 會話的總連接時間(分鐘) |
IDLE_TIME | 會話的連續不活動的時間。 |
LOGICAL_READS_PER_CALL | 指定一次執行SQL(解析、執行和提取)調用所允許讀的數據塊的最大數目。 |
LOGICAL_READS_PER_SESSION | 指定一個會話允許讀的數據塊的數目,包括從內存和磁盤讀的所有數據塊。 |
CPU_PER_CALL | 指定一次調用(解析、執行和提取)的CPU時間限制,單位爲百分之一秒 |
CPU_PER_SESSION | 指定會話的CPU時間限制,單位爲百分之一秒 |
SESSIONS_PER_USER | 指定限制用戶的併發會話的數目。 |
PASSWORD_GRACE_TIME | 密碼失效的寬限天數 |
創建Profile ,關聯profile 的示例: 讓用戶登錄3次失敗就永久鎖定,用戶的密碼有效期只有30天,寬限時間爲3天。
--drop profile testProfile CASCADE;
create profile testProfile limit
failed_login_attempts 3
password_lock_time unlimited;
alter profile testProfile limit
PASSWORD_LIFE_TIME 30
PASSWORD_GRACE_TIME 3;
alter user voapd Profile testProfile;
然後登錄voapd,連續試錯3次密碼就真的永久鎖定了。登錄SYSTEM用戶,用alter user [用戶名] account unlock;解除鎖定。此外,必須沒有用戶關聯到這個profile時才能直接刪除,否則要加級聯CASCADE。級聯刪除prifile會把原來關聯到此profile用戶 關聯回默認的概要文件DEFAULT.
3.系統權限
GRANT [權限] TO [用戶] [WITH ADMIN OPTION] ;
revoke[權限] from [用戶];
DBA: 擁有全部特權,是系統最高權限,只有DBA纔可以創建數據庫結構。
RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。
CONNECT:擁有Connect權限的用戶只可以登錄Oracle,不可以創建實體,不可以創建數據庫結構。
對於普通用戶:授予connect, resource權限。
對於DBA管理用戶:授予connect,resource, dba權限。
另外還有 當權限名帶有 any時,表示該權限可以操作任意對象。例如 create table 是創建表的權限,create any table 則是擁有創建任意對象的表權限,假如A被授予了這個權限,那麼A也可以創建B中表的權限。
系統權限指允許用戶對數據庫進行哪些操作,可以 select * from system_privilege_map; 查詢系統權限有哪些。這裏抄這位仁兄的表格了https://blog.csdn.net/weixin_30847939/article/details/95212667?ops_request_misc=%7B%22request_id%22%3A%22158229177819195239837236%22%2C%22scm%22%3A%2220140713.130056874..%22%7D&request_id=158229177819195239837236&biz_id=0&utm_source=distribute.pc_search_result.none-task
類型/系統權限 |
說明 |
羣集權限 |
|
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用戶所擁有的數據字典表中進行選擇 |
在Oracle9i以後,系統權限不會被級聯刪除。即用戶A把某權限用with admin option方式賦給了B,而B把此權限又賦給了用戶C,如果用戶A把用戶B的權限刪除,則C的權限依然存在。
4.對象權限
GRANT [權限] ON [對象] TO [用戶] [WITH GRANT OPTION] ; revoke[權限] on [對象] from [用戶];
對象權限和系統權限不一樣會被級聯刪除。指允許用戶可以對數據庫對象進行操作的權利(表、視圖、序列)。
(這張表又是抄的。)
對象權限 | 表 | 視圖 | 序列 | 過程 |
修改(alter) | √ | √ | ||
刪除(delete) | √ | √ | ||
執行(execute) | √ | |||
索引(index) | √ | |||
插入(insert) | √ | √ | ||
關聯(references) | √ | √ | ||
選擇(select) | √ | √ | √ | |
更新(update) | √ | √ |
grant ALL on [對象] to [用戶A]; A則擁有上表打勾的對應一列的所有對象權限。
5.角色管理
角色是權限的集合,可以把權限加入到角色中,再把角色和用戶關聯起來,那麼用戶就可以擁有角色中的權限。
DROP ROLE PROGRAMMER; --PROGRAMMER 和 programmer 是同一個東西
CREATE ROLE programmer;
GRANT ALTER any table to programmer;
GRANT ALL ON salary_tbl TO programmer;
Grant programmer to voapd;
select * from dba_sys_privs where grantee ='PROGRAMMER'; ---系統權限表
select * from dba_tab_privs where grantee ='PROGRAMMER'; ---對象權限表
注意:創建數據到系統表裏會自動轉換成大寫。