Oracle用戶管理

一、用戶的概念

  用戶,即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 username
 Identified 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

 

發佈了72 篇原創文章 · 獲贊 19 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章