一、用戶的概念
用戶,即user,通俗的講就是訪問oracle數據庫的“人”。在oracle中,可以對用戶的各種安全參數進行控制,以維護數據庫的安全性,這些概念包括模式(schema)、權限、角色、存儲設置、空間限額、存取資源限制、數據庫審計等。每個用戶都有一個口令,使用正確的用戶/口令才能登錄到數據庫進行數據存取。二、用戶默認表空間
表空間是信息存儲的最大邏輯單位、當用戶連接到數據庫進行資料存儲時,若未指出數據的目標存儲表空間時,則數據存儲在用戶的默認表空間中。比如:create table mytable(id varchar2(20),name varchar2(100));這條語句創建了一個表mytable,並將其存儲在當前用戶的默認表空間中,若要指定表空間,則:create table mytable(id varchar2(20),name varchar2(100)) tablespace tbs1;。用戶的默認表空間可以在創建用戶時指定,也可以使用aler user命令進行指定,具體語法見後面的介紹。三、用戶臨時表空間
臨時表空間主要用於order by語句的排序以及其它一些中間操作。在oracle9i之前,可以指定用戶使用不同的臨時表空間,從9i開始,臨時表空間是通用的,所的用戶都使用temp作爲臨時表空間。四、用戶資源文件
用戶資源文件用來對用戶的資源存取進行限制,包括:cpu使用時間限制、內存邏輯讀個數限制、每個用戶同時可以連接的會話數據限制、一個會話的空間和時間限制、一個會話的持續時間限制、每次會話的專用sga空間限制。五、用戶表空間限額
表空間存儲限制是用戶在某一個表空間中可以使用的存儲空間總數。在創建或修改用戶時,可以由參數quota指出。若用戶在向表空間存儲數據時,超出了此限額,則會產生錯誤。錯誤信息如:'ora-01536:space quota exceeded for tablespace tablespacename..'。可以通過查詢字典dba_ts_quotas查看錶空間限額信息。六、創建用戶資源文件
創建用戶資源文件的語法如下:create profile filename limit
session_per_user: 用戶可以同時連接的會話數量限額;
cpu_per_session:用戶在一次數據庫會期間可佔用的cpu時間總量限額,單位爲百分之一秒;
user_per_call:用戶一次sql調用可用的cpu時間總量限額,單位爲百分之一秒;
logical_reads_per_session:在一次數據庫會話期間能夠讀取的數據庫塊的個數限額;
logical_reads_per_call:一次sql調用可以讀取的數據庫塊數限額;
idle_time:用戶連接到數據庫後的可空閒時間限額,單位爲分鐘,若空閒時間超過此值,則連接被斷開;
connect_time:一次連接的時間總量限額,單位爲分鐘,連接時間超過此值時,連接被斷開;
private_sga:用戶麼有的sga區的大小,單位爲數據庫塊,默認值爲unlimited;
composite_limit:這是一項由上述限制參數構成的組合資源項。舉例來說,假設資源設置如下:
idle_time 20
connect_time 120
cpu_per_call 750
composite_limt 800
那麼,當會話空間超過20分鐘,或者連接時間超過120分鐘,又或者執行一個sql耗費超過7.5秒,再或者這幾個資源限制加起來的總數超過800,則系統自動終止會話。
failed_login_attempts:用戶登錄時,允許用戶名/密碼校驗失敗致使用登錄失敗的次數限額,超過該次數,帳戶被鎖定;
password_life_time:口令有效時間,單位爲天數,超過這一時間,拒絕登錄,須重新設置口令,默認值爲unlimited;
password_reuse_time:一個失效口令經過多少天后纔可重新利用,默認爲unlimited;
password_reuse_max:一個口令可重複使用的次數;
password_lock_time:當登錄失敗達到failed_login_attemps時,帳戶被鎖定,該參數用於設定被鎖定的天數;
下面舉例如下:
1)創建一個用戶資源文件
create profile tax_users limit
session_per_user 3
cpu_per_session unlimited
connect_time 30
logical_reads_per_session default
logical_reads_per_call 1000
private_sga 15k
composite_limit 500000
password_life_time 90
2)查詢用戶資源文件信息
sql>select *from dba_profile where profile = 'tax_users'
3)指定用戶資源文件給用戶
sql>alter user us1 profile tax_users
七、創建、修改、刪除用戶
1.創建用戶創建用戶的詳細語法請查詢oracle的官方參數文檔,這裏介紹典型的語法。語法如下:
create user username
identified by password
default tablespace tablespace
temporary tablespace tablespace
profile profile
quota integer|unlimited on tablespace
各選項含義如下:
identified by password:用戶口令;
default tablespace tablespace:默認表空間;
temporary tablespace tablespace:臨時表空間;
profile profile|default:用戶資源文件;
quota integer[k|m]|unlimited on tablespace:用戶在表空間上的空間使用限額,可以指定多個表空間的限額。
舉例:
create user us1 identitied by abc123
default tablespace user01
temporary tablespace temp
profile default
quota 1000m on user01;
2.修改用戶
修改用戶的語法是與創建用戶的語法類似的,主要是create user 變成 alter user,具體請參考oracle文檔。
3.刪除用戶
刪除用戶,是將用戶及用戶所創建的schema對象從數據庫刪除。如下:
sql>drop user us1;
若用戶us1含有schema對象,則無上述語句將執行失敗,須加入關鍵字cascade才能刪除,意思是連並其對象一起刪除,如下:
sql>drop user us1 cascade;
---------------------------------------
一、權限分類:
系統權限:系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)。實體權限:某種權限用戶對其它用戶的表或視圖的存取權限。(是針對表或視圖而言的)。
二、系統權限管理:
1、系統權限分類:
DBA: 擁有全部特權,是系統最高權限,只有DBA纔可以創建數據庫結構。
RESOURCE:擁有Resource權限的用戶只可以創建實體,不可以創建數據庫結構。
CONNECT:擁有Connect權限的用戶只可以登錄Oracle,不可以創建實體,不可以創建數據庫結構。
對於普通用戶:授予connect, resource權限。
對於DBA管理用戶:授予connect,resource, dba權限。
2、系統權限授權命令:
[系統權限只能由DBA用戶授出:sys, system(最開始只能是這兩個用戶)]
授權命令:SQL> grant connect, resource, dba to 用戶名1 [,用戶名2]...;
[普通用戶通過授權可以具有與system相同的用戶權限,但永遠不能達到與sys用戶相同的權限,system用戶的權限也可以被回收。]
例:
SQL> connect system/manager
SQL> Create user user50 identified by user50;
SQL> grant connect, resource to user50;
查詢用戶擁有哪裏權限:
SQL> select * from dba_role_privs;
SQL> select * from dba_sys_privs;
SQL> select * from role_sys_privs;
刪除用戶:SQL> drop user 用戶名 cascade; //加上cascade則將用戶連同其創建的東西全部刪除
3、系統權限傳遞:
系統權限:WITH ADMIN OPTION
對象權限:WITH GRANT OPTION
SQL> grant connect, resorce to user50 with admin option; //可以傳遞所獲權限。
4、系統權限回收:系統權限只能由DBA用戶回收
命令:SQL> Revoke connect, resource from user50;
系統權限無級聯,即A授予B權限,B授予C權限,如果A收回B的權限,C的權限不受影響;系統權限可以跨用戶回收,即A可以直接收回C用戶的權限。
三、實體權限管理
1、實體權限分類:select, update, insert, alter, index, delete, all //all包括所有權限execute //執行存儲過程權限
user01:
SQL> grant select, update, insert on product to user02;
SQL> grant all on product to user02;
user02:
SQL> select * from user01.product;
// 此時user02查user_tables,不包括user01.product這個表,但如果查all_tables則可以查到,因爲他可以訪問。
3. 將表的操作權限授予全體用戶:
SQL> grant all on product to public; // public表示是所有的用戶,這裏的all權限不包括drop。
[實體權限數據字典]:
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; // 授出權限的表(授出的權限)
4. DBA用戶可以操作全體用戶的任意基表(無需授權,包括刪除):
DBA用戶:
SQL> Create table stud02.product(
id number(10),
name varchar2(20));
SQL> drop table stud02.emp;
SQL> create table stud02.employee
as
select * from scott.emp;
5. 實體權限傳遞(with grant option):
user01:
SQL> grant select, update on product to user02 with grant option; // user02得到權限,並可以傳遞。
6. 實體權限回收:
user01:
SQL>Revoke select, update on product from user02; //傳遞的權限將全部丟失。
一、創建用戶的Profile文件
SQL> create profile student limit // student爲資源文件名FAILED_LOGIN_ATTEMPTS 3 //指定鎖定用戶的登錄失敗次數
PASSWORD_LOCK_TIME 5 //指定用戶被鎖定天數
PASSWORD_LIFE_TIME 30 //指定口令可用天數
二、創建用戶
SQL> Create User usernameIdentified by password
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;
例:
SQL> Create user acc01
identified by acc01 // 如果密碼是數字,請用雙引號括起來
default tablespace account
temporary tablespace temp
profile default
quota 50m on account;
SQL> grant connect, resource to acc01;
[*] 查詢用戶缺省表空間、臨時表空間
SQL> select username, default_tablespace, temporary_tablespace from dba_users;
[*] 查詢系統資源文件名:
SQL> select * from dba_profiles;
資源文件類似表,一旦創建就會保存在數據庫中。
SQL> select username, profile, default_tablespace, temporary_tablespace from dba_users;
SQL> create profile common limit
failed_login_attempts 5
idle_time 5;
SQL> Alter user acc01 profile common;
三、修改用戶:
SQL> Alter User 用戶名Identified 口令
Default Tablespace tablespace
Temporary Tablespace tablespace
Profile profile
Quota integer/unlimited on tablespace;
1、修改口令字:
SQL>Alter user acc01 identified by "12345";
2、修改用戶缺省表空間:
SQL> Alter user acc01 default tablespace users;
3、修改用戶臨時表空間
SQL> Alter user acc01 temporary tablespace temp_data;
4、強制用戶修改口令字:
SQL> Alter user acc01 password expire;
5、將用戶加鎖
SQL> Alter user acc01 account lock; // 加鎖
SQL> Alter user acc01 account unlock; // 解鎖
四、刪除用戶
SQL>drop user 用戶名; //用戶沒有建任何實體SQL> drop user 用戶名 CASCADE; // 將用戶及其所建實體全部刪除
*1. 當前正連接的用戶不得刪除。
五、監視用戶:
1、查詢用戶會話信息:SQL> select username, sid, serial#, machine from v$session;
2、刪除用戶會話信息:
SQL> Alter system kill session 'sid, serial#';
3、查詢用戶SQL語句:
SQL> select user_name, sql_text from v$open_cursor;
SQL> ALTER SESSION SET
NLS_LANGUAGE= 'SIMPLIFIED CHINESE'
NLS_TERRITORY= 'CHINA'
NLS_CURRENCY= 'RMB'
NLS_ISO_CURRENCY= 'CHINA'
NLS_NUMERIC_CHARACTERS= '.,'
NLS_CALENDAR= 'GREGORIAN'
NLS_DATE_FORMAT= 'yyyy-mm-dd dy'
NLS_DATE_LANGUAGE= 'SIMPLIFIED CHINESE'
NLS_SORT= 'BINARY'
TIME_ZONE= '+08:00'
NLS_DUAL_CURRENCY = 'RMB'
NLS_TIME_FORMAT = 'HH.MI.SSXFF AM'
NLS_TIMESTAMP_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM'
NLS_TIME_TZ_FORMAT = 'HH.MI.SSXFF AM TZH:TZM'
NLS_TIMESTAMP_TZ_FORMAT = 'DD-MON-RR HH.MI.SSXFF AM TZH:TZM'
一、Oracle 權限管理
SQL> grant connect, resource, dba to acc01;SQL> revoke connect, resource from acc01;
二、Oracle 角色管理
SQL> Create Role <role_name>
Identified by password/ Not Identified;
SQL> Alter Role <role_name> ...
SQL> Grant <privs> to <role_name>;
SQL> Grant <role_name> to <user_name>
SQL> Set Role <role_name>
All Except <role_name2> / None
三、Oracle角色詳解
角色:
角色就是一些權限的集合:
爲了方便管理,我們把某些常用的權限組織成一個集合。賦予角色。然後把角色賦予用戶。提高管理的效率。例如創建一個數據庫某個模式,某幾個用戶下的的只讀用戶,可讀可插入用戶,等等。在實質生產中還是有很大的意義。
1.創建角色,不指定密碼:
create role testrole;
2.創建角色,指定密碼:
create role testrole identified by tanfufa;
3.修改角色:
alter role testrole identified by luqiaoling;
給角色授予權限。
Grant select on t1 to testrole;
Grant select on t2 to testrole;
Grant select on t3 to testrole;
把角色賦予用戶:(特別說明,授予角色不是實時的。如下:)
grant testrole to testdb;
起用角色:給用戶賦予角色,角色並不會立即起作用。
1.角色不能立即起作用。必須下次斷開此次連接,下次連接才能起作用。
2.或者執行命令:有密碼的角色set role testrole identified by tanfufa 立即生效;
3.無密碼的角色:set role testrole;或set role all except rolename_withpassword.
把角色賦予角色,角色嵌套。
create role testrole1;
grant select on t1 to testrole1;
create role testrole2;
grant testrole1 to testrole2;
grant r2 to testdb;
角色管理:
與角色有關係的視圖:
所有角色:
select * from dba_roles;
當前用戶scott有哪些角色:
select * from session_roles;
建立角色模板:只舉一個例子。大家去觸類旁通。
只讀用戶角色的建立的腳本:
1.授予某模式下對象讀權限給角色。
SET PAGESIZE 0
SET FEEDBACK OFF
SET VERIFY OFF
SPOOL s.sql
SELECT 'GRANT SELECT ON "' || u.object_name || '" TO &1;'
FROM user_objects u
WHERE u.object_type IN ('TABLE','VIEW','SEQUENCE')
AND NOT EXISTS (SELECT '1'
FROM all_tab_privs a
WHERE a.grantee = UPPER('&1')
AND a.privilege = 'SELECT'
AND a.table_name = u.object_name);
SPOOL OFF
-- Comment out following line to prevent immediate run @s.sql
SET PAGESIZE 14
SET FEEDBACK ON
SET VERIFY ON
2.爲模式權限對象創建同意詞。
SET PAGESIZE 0
SET FEEDBACK OFF
SET VERIFY OFF
SPOOL temp.sql
SELECT 'CREATE SYNONYM "' || a.table_name || '" FOR "' || a.owner || '"."' || a.table_name || '";'
FROM all_tables a
WHERE NOT EXISTS (SELECT '1'
FROM user_synonyms u
WHERE u.synonym_name = a.table_name
AND u.table_owner = UPPER('&1'))
AND a.owner = UPPER('&1');
SPOOL OFF
-- Comment out following line to prevent immediate run
@temp.sql
SET PAGESIZE 14
SET FEEDBACK ON
SET VERIFY ON
參考資料:
Oracle 用戶管理:
http://www.cnblogs.com/rootq/archive/2009/09/03/1559576.html
Orcle角色:
http://www.itpub.net/forum.php?mod=viewthread&tid=995181