當創建一個新數據庫實例時,Oracle會創建sys、system和scott數據庫用戶。sys和system是管理員用戶,它們的密碼在創建數據庫時指定。scott是示范用戶(用於學習),里面包括了一些測試數據(DEPT、EMP、BONUS和SALGRADE表),scott用戶缺省是鎖定狀態。
一、數據庫管理員
數據庫管理員(Database Administrator,簡稱DBA),是從事管理和維護數據庫管理系統的相關工作人員的統稱,屬於運維工程師的一個分支,主要負責數據庫的設計、部署、運維和管理,側重於運維管理。
DBA的核心目標是保證數據庫系統的穩定性、安全性、完整性和高性能,保證數據庫服務7*24小時的穩定高效運轉。
數據庫實例創建后,在數據庫服務器上,用 sqlplus / as sysdba
可以以DBA身份登錄數據庫,如下:
二、用戶管理
1、創建用戶
創建用戶的命令是 create user
,它的選項非常多,在這里我介紹一些常用的選項。
語法:
create user 用戶名 identified by 密碼
[default tablespace 表空間名]
[temporary tablespace 表空間名]
[quota 大小 on 表空間名]
[profile 用戶配置文件];
參數說明:
create user 用戶名 identified by 密碼
:指定登錄數據庫的用戶名和密碼。
[default tablespace 表空間名]
:指定用戶的永久表空間,該用戶全部的數據庫對象(表、索引)將存放在該表空間中。
[temporary tablespace 表空間名]
:指定用戶的臨時表空間,臨時表空間主要用於排序、運算、管理索引、存放臨時數據等,當任務完成之后系統會自動清理。
[quota 大小 on 表空間名]
:表空間配額,用戶使用表空間的大小,單位有[K|M|G|T|P|E],缺省是unlimited,無限制。
[profile 用戶配置文件]
:用戶的配置文件,它是密碼限制,資源限制的命名集合,利用profile
可以對數據庫用戶進行基本的資源管理,密碼管理,缺省是default profile,無限制。
示例:
create user girl
identified by girlpwd
default tablespace users
temporary tablespace temp
quota 20M on users;
創建一個用戶名為girl的新用戶,密碼是pwdgirl,缺省表空間是users(可使用20M的空間),臨時表空間是temp。
注意,創建用戶時,如果不指定default tablespace/ temporary tablespace選項,則使用系統缺省的永久/臨時表空間,用以下SQL可以查看系統缺省的永久/臨時表空間。
select property_value from DATABASE_PROPERTIES where
property_name in ('DEFAULT_PERMANENT_TABLESPACE','DEFAULT_TEMP_TABLESPACE');
2、修改用戶的密碼
alter user 用戶名 identified by 新密碼;
普通用戶只能修改自已的密碼,DBA可以修改其它用戶的密碼。
3、鎖定/解鎖用戶
alter user 用戶名 account lock;
alter user 用戶名 account unlock;
鎖定/解鎖用戶需要DBA權限。
4、修改用戶表空間配額
alter user 用戶名 quota 大小 on 表空間;
修改用戶表空間配額需要DBA權限。
5、刪除用戶
drop user 用戶名 [cascade];
drop user 只有在用戶下沒有任何數據庫對象的時候才能刪除用戶,否則會提示錯誤。
采用cascade選項刪除用戶以及用戶下全部的數據庫對象,包括表、視圖、函數、同義詞、過程等。
刪除用戶需要DBA權限。
三、權限管理
權限是指用戶執行特定命令或操作數據庫對象的權利。Oracle的用戶權限分系統權限和對象權限。
1、系統權限
系統權限針對的是系統安全性,執行數據庫操作,如登錄、創建表、創建函數等,通過查詢SYSTEM_PRIVILEGE_MAP數據字典可以看到Oracle的兩百多種系統權限。
select * from SYSTEM_PRIVILEGE_MAP;
以下是幾種常用的系統權限:
create session 創建會話。
create/drop user 創建/刪除用戶。
create/drop sequence 創建/刪除序列。
create/drop synonym 創建/刪除同名對象。
create/drop table 創建/刪除表。
create/drop view 創建/刪除視圖。
2、對象權限
對象權限針對的是數據安全性,對某一特定對象(如表,視圖、序列、存儲過程等)執行的特定操作,對象的權限分類如下:。
1)select權限
對表而言,允許對表執行select語句;對序列而言,允許對序列獲取下一個值(nextval)和當前值(currnvl)。
2)insert權限
允許向表和視圖中插入記錄。
3)update權限
允許在表或視圖中執行update語句,update權限必須隨同select權限授予,否則被授權用戶不能夠選擇行。
4)delete權限
允許在表或視圖中執行delete語句,delete權限必須隨同select權限授予,否則被授權用戶不能夠選擇行。
5)alter權限
對表而言,允許對表執行alter table語句;對序列而言,允許對序列alter sequence語句。
6)execute權限
執行存儲過程、函數和包的權限。
7)index權限
允許在表上創建索引。
8)reference權限
允許在表上創建完整性約束,如外鍵。
9)all
對象的全部權限(上面列出的全部權限)。
以下是Oracle數據庫對象與權限的對照表。
對象權限 | 表 | 視圖 | 序列 | 過程(函數和包) | 備注 |
---|---|---|---|---|---|
select | 是 | 是 | 是 | 常用。 | |
insert | 是 | 是 | 常用。 | ||
update | 是 | 是 | 常用。 | ||
delete | 是 | 是 | 常用。 | ||
alter | 是 | 是 | 不常用。 | ||
execute | 是 | 不常用。 | |||
index | 是 | 不常用。 | |||
references | 是 | 不常用。 |
3、角色
由於Oracle提供的權限非常之多,日常操作時我們不可能將所需權限一一賦予用戶,此時引進角色概念。角色是一組相關權限的命名集合,使用角色最主要的目的是簡化權限管理。將一組權限打包到角色中,將角色賦予用戶就是把角色下得全部權限都賦給了用戶,簡化了賦權操作。
Oracle提供三種標准的三種角色:
1)connect角色
connect是最基本的用戶權限,擁有connect權限的用戶只可以登錄Oracle(僅具有創建SESSION的權限),不可以創建實體,不可以創建數據庫結構。
2)resource角色
擁有resource權限的用戶可以創建數據庫對象,和對本用戶的數據庫對象擁有全部的操作權限。
3)DBA角色
DBA角色,擁有全部特權,是系統最高權限。
4、授於/收回權限
Oracle采用grant命令授於權限,revoke命令收回權限。
grant命令非常復雜,在實際應用中遠遠沒有那么復雜,所以本文只介紹grant的常用方法。
1)將對象權限授於用戶和角色,revoke收回。
grant 對象權限列表 on 對象名 to { public | 角色名 | 用戶名 },……;
revoke對象權限列表 on 對象名 from { public | 角色名 | 用戶名 },……;
將scott.T_GIRL表的select和insert權限授於girl和scott用戶。
grant select,insert on scott.T_GIRL to girl,scott;
revoke select,insert on scott.T_GIRL from girl,scott;
將scott.T_GIRL表的全部權限授於girl和scott用戶。
grant all on scott.T_GIRL to girl,scott;
revoke all on scott.T_GIRL from girl,scott;
將scott.T_GIRL表的全部權限授於全部用戶。
grant all on scott.T_GIRL to public;
將scott.T_GIRL表的全部權限授於resource角色。
grant all on scott.T_GIRL to resource;
2)將系統權限和角色權限授於用戶,revoke收回。
grant { 系統權限 | 角色 }, …… to { public | 角色名 | 用戶名 },……;
revoke { 系統權限 | 角色 }, …… from { public | 角色名 | 用戶名 },……;
一般情況下,在新建數據庫用戶后,都會習慣性的給用戶授權connect角色和resource角色。
grant connect,resource to 用戶名;
將select any table權限授於全部用戶。
grant select any table to public;
revoke select any table from public;
將select any table權限授於connect角色。
grant select any table to connect;
將select any table和insert any table權限授於girl和scott用戶。
grant select any table,insert any table to girl,scott;
revoke select any table,insert any table from girl,scott;
將connect、resource權限授於girl用戶。
grant connect,resource to girl;
5、查詢權限
從數據字典中可以查詢當前用戶擁有的權限和角色。
1)查詢當前用戶擁有的角色:
select * from USER_ROLE_PRIVS;
2)查詢當前用戶擁有的系統權限:
select * from USER_SYS_PRIVS;
3)查詢當前用戶擁有的對象權限:
select * from USER_TAB_PRIVS;
6、注意事項
在Oracle中沒有其他數據庫系統中的數據庫的概念,對象都是創建在用戶下。當前用戶具有當前用戶下全部對象的全部權限無論該對象是否是當前用戶所創建。舉個簡單例子,創建了girl用戶並授予connect和resource權限,然后管理員在girl用戶下創建一張表,girl用戶可以刪除管理員在girl用戶下創建的表。
四、版權聲明
C語言技術網原創文章,轉載請說明文章的來源、作者和原文的鏈接。
來源:C語言技術網(www.freecplus.net)
作者:碼農有道
如果文章有錯別字,或者內容有錯誤,或其他的建議和意見,請您留言指正,非常感謝!!!