天天看點

Oracle 使用者管理與權限配置設定 1.使用者與使用者模式的關系2.建立與管理使用者3.使用者權限管理4.角色管理5.資源配置profile本次實驗:

目錄

1.使用者與使用者模式的關系

2.建立與管理使用者

2.1身份驗證

2.2建立使用者

2.3修改使用者

2.4删除使用者

2.5查詢使用者

3.使用者權限管理

3.1權限簡介

3.2授權操作

3.3回收系統權限

3.4對象授權

3.5回收對象權限

3.6查詢使用者與權限

4.角色管理

4.1角色簡介

4.2預定義角色

4.3建立角色與授權

4.4管理角色

4.5角色與權限查詢

5.資源配置profile

5.2使用profile管理密碼

1.賬戶鎖定

2.密碼過期時間

3.密碼曆史

4.密碼複雜度

5.3使用profile管理資源

5.4維護profile檔案

1.修改profile檔案

2.删除profile檔案

5.5顯示profile資訊

1.顯示使用者的資源配置資訊

2.顯示指定profile檔案的資源配置資訊

本次實驗:

1.使用者與使用者模式的關系

1.這裡的使用者指的是oracle資料庫的賬戶,有使用者名和密碼

2.oracle不同使用者的權限不同,oracle提供了一些特權使用者,

    例如:sysdba或者sysoper

這類使用者主要用于執行資料庫的維護操作,如啟動資料庫、關閉資料庫、建立資料庫,以及備份和恢複等操作

3.sysdba和sysoper差別:sysdba不具有sysoper的所有權限,但還可以建立資料庫,執行不完全恢複。

4.模式:模式又稱方案,模式或者方案實際上是使用者所擁有的資料庫對象的集合。

     對象(表、視圖等)是使用者來組織的

     使用者與模式是一一對應的(是以雖然概念不同,實質上可以等價的)

  • 使用者可以直接通路其他模式對象,但是得擁有該對象的通路權限,例如:使用者scott可以直接檢視其模式中的emp表,但 如果使用者HR要檢視scott模式中的emp表時,則必須在emp表上具有select操作的權限
  • 當使用者要通路其他模式對象時,必須附加模式名作為字首。

2.建立與管理使用者

2.1身份驗證

  • 密碼驗證
  • 外部驗證
  • 全局驗證

主要使用密碼驗證,另外兩種驗證很少很少使用。初學不用深究(下面都是密碼驗證)

2.2建立使用者

create user 使用者名 identified by 密碼

[or identified externally]

[or identified globally as 'CN=user']

[default tablespace tablespace_default]

[temporary tablespace tablespace_temp]

[quota [integer k[m]] [unlimited] ] on tablespace_specify1

[,quota [integer k[m]] [unlimited] ] on tablespace_specify2

[,...]...on tablespace_specifyn

[profiles profile_name]

[account lock or account unlock];

  • identified externally:表示使用者名在作業系統下驗證,這種情況下要求該使用者必須與作業系統所定義的使用者名相同
  • identified globally as 'CN=user':表示該使用者名由oracle安全域中心伺服器驗證,CN名字表示使用者的外部名
  • [default tablespace tablespace_default]:表示該使用者在建立資料對象時使用的預設表空間
  • [temporary tablespace tablespace_temp]:表示該使用者所使用的臨時表空間
  • [quota[integer K[M]][unlimited]] on tablespace_specify1:表示使用者在指定表空間中允許占用的最大空間
  • [profiles profile_name]:資源檔案名稱
  • [account lock or account unlock]:使用者是否被加鎖,預設情況下是不加鎖的

執行個體

(1)建立使用者,并指定預設表空間和臨時表空間

eg:建立一個mr使用者,密碼為mrsoft,并設定預設表空間為users,臨時表空間為temp的使用者

--注意中間沒有','分隔

create user mr identified by mrsoft
default tablespace users
temporary tablespace temp;
           

(2)建立使用者,并配置其在指定表空間上的磁盤限額

eg:建立一個使用者east,密碼為mrsoft,預設表空間為users,臨時表空間為temp的使用者,并

指定該使用者在tbsp_1表空間上最多可使用的大小為10MB,代碼及運作結果如下。

create user east identified by mrsoft
default tablespace users
temporary tablespace temp
quota 10M on tbsp_1;
           

--檢視表空間:select * from v$tablespace;保證确實有tbsp_1

如果要禁用使用者使用某個表空間,則可以通過quota關鍵字設定該表空間的使用限額為0

(3)建立使用者,并配置其在指定表空間上不受限制

使用 quota unlimited on tablespace_specify 子句

eg:建立一個使用者df,密碼為mrsoft,臨時表空間為temp,預設表空間為tbsp_1,并且該

使用者使用tbsp_1表空間不受限制。

create user df identified by mrsoft
temporary tablespace temp
default tablespace tbsp_1
quota unlimited on tbsp_1;
           
建立完使用者後要注意一下幾點:
  • 建立使用者時不指定default tablespace 子句,oracle會将system表空間作為使用者預設表空間
  • 建立使用者時不指定temporary tablespace子句,oracle會将資料庫預設臨時表空間作為使用者的臨時表空間
  • 初始建立的使用者沒有任何權限,是以為了使使用者可以連接配接到資料庫,必須授權其create session權限,關于使用者的權限設定會在後面介紹
  • 建立使用者時沒有為表空間指定quota子句,那麼使用者在特定表空間上的配額為0,使用者将不能在相應的表空間上建立資料對象
  • 初始建立的使用者沒有任何權限,不能執行任何資料庫操作

2.3修改使用者

将建立時的create改成alter就是修改使用者的文法,則建立時能指定什麼參數,此處就能修改什麼參數了

(1)修改使用者的磁盤限額

eg:修改使用者east在表空間上的磁盤限額為20MB(原始為10MB,現在增加10MB)

alter user east quota 20m on tbsp_1;
           

(2)修改使用者密碼

eg:修改使用者east的新密碼為123456(原來為mrsoft)

alter user east identified by 123456;
           

(3)解鎖被鎖住的使用者

為了安全起見,很多使用者處于locked狀态,dba可以解鎖

--格式見建立的最後一個子句

alter user SH account unlock;
           

2.4删除使用者

删除使用者是通過drop user語句完成的。删除使用者後,oracle會從資料字典中删除使用者、方案及其所有對象方案

drop user user_name [cascade];

  • user_name:要删除的使用者名
  • cascade:級聯删除選項,如果使用者包含資料庫對象(表等),則必須加cascade選項,此時連同該使用者所擁有的對象一起删除

eg:使用drop user語句删除使用者df,并連同該使用者所擁有的對象一起删除。

--執行比較慢

drop user df cascade;
           

2.5查詢使用者

(1).檢視資料庫裡面所有使用者,前提是你是有dba權限的帳号,如sys,system
col external_name for a20;
set linesize 500;
select * from dba_users;
-- desc dba_users;
           
--查詢使用者名和密碼
select username,password from dba_users where username='EAST';
           

--根本看不到密碼,不錯,就算是管理者也看不到密碼明文,隻能修改密碼。這是oracle的安全之處!

(2)查詢目前可登陸的所有使用者

select distinct owner from all_objects;
           
(3)檢視你能管理的所有使用者!
select * from all_users;
-- desc all_users;
           
(4)檢視目前使用者資訊 !
select * from user_users;
-- desc user_users;
           
于是查詢目前登入使用者可以使用
select username from user_users;
           

3.使用者權限管理

新建立的使用者不能進行任何操作,此時必須讓具有dba角色的使用者對該使用者進行授權

3.1權限簡介

系統權限:在系統級對資料庫進行存取和使用的機制

        例如:使用者是否能連接配接到資料庫系統(session權限)

                執行系統級的ddl語句(如:create,alter,drop)等

對象權限:指的是某一個使用者對其他使用者的表、視圖、序列、存儲過程、函數、包等的操作權限。

不同類型的對象具有不同的對象權限,對于某些模式對象,例如:簇、索引、觸發器、資料庫連接配接

等沒有相應的實體權限,這些權限由系統權限進行管理。

3.2授權操作

eg1: 為使用者east授予連接配接和開發系統權限,并嘗試使用east連接配接資料庫
grant connect,resource to east;
connect east/[email protected];
           

授權

eg2:在建立使用者dongfang和xifang後,首先system将建立session和建立table的權限授權給dongfang,

然後dongfang再将這兩個權限傳遞給xifang,最後通過xifang這個使用者建立一個資料表

connect sys/[email protected] as sysdba;

建立兩個使用者

create user dongfang identified by mrsoft
default tablespace users
quota 10m on users;

create user xifang identified by mrsoft
default tablespace users
quota 10m on users;
           
查詢使用者
select * from all_users where username like '%FANG';
           
sys授權給dongfang
grant create session,create table to dongfang with admin option;
           
切換到dongfang dongfang授權給xifang
connect dongfang/[email protected];
grant create session,create table to xifang;
           
切換到xifang xifang使用權限建表
connect xifang/[email protected];
create table tb_xifang(
    id number,
    name varchar2(20)
);
           
檢視表結構
set linesize 50;
desc tb_xifang;
           

3.3回收系統權限

revoke sys_privi|role from user|role|public;

參數說明:

  • sys_privi:系統權限或角色
  • role:角色
  • user:具體的使用者名,或者是一系列的使用者名
  • public:保留字,代表oracle系統的所有使用者
eg1:撤銷east使用者的resource系統權限
connect sys/[email protected] as sysdba;    
revoke resource from east;
           

dba grant授權給使用者A時帶有with admin option,則使用者A有權将系統權限授予B。

此時dba使用revoke指令撤銷A使用者的系統權限,使用者B的系統權限仍然有效。

eg2:首先撤銷使用者dongfang的create table權限,然後嘗試是否還可以通過使用者xifang建立資料表

revoke create table from dongfang;
connect xifang/[email protected];

create table tb_xifang2(
    id number,
    name varchar2(10)
);
           
--仍然可以建表

3.4對象授權

系統權限講完了,下面讨論對象權限,和授予系統權限基本相同

授予對象權限給使用者也使用grant指令

grant obj_privi|all column 

    on schema.object

    to user|role|public 

    [with grant option]|[with hierarchy option];

參數說明:

  • obj_privi:表示對象的權限,可以是alter,execute,select,update和insert
  • role:角色名
  • user:被授予的使用者名
  • with grant option:表示被授權者可以再将權限授予另外的使用者
  • with hierarchy option:在對象的子對象(在視圖上再建立視圖)上授權給使用者
eg1:給使用者xifang授予select、insert、delete和update表scott.emp的權限
grant select,insert,delete,update
    on scott.emp
    to xifang;
           

3.5回收對象權限

要從使用者或者角色中撤銷對象權限,仍然要使用revoke指令
revoke obj_privi|all
    on schema.object
    from user|role|public 
    cascade constraints;
           
參數說明如下:
  • obj_privi:表示對象的權限
  • public:保留字,代表oracle系統的所有權限
  • cascade constraints:表示有關聯關系的權限也被撤銷

eg:從xifang使用者撤銷scott.emp表的update和delete權限

connect system/password;

revoke delete,update 
    on scott.emp 
    from xifang;
           

如果資料庫管理者grant指令給使用者A授予對象權限時帶有with grant option,則該使用者A有權将權限再次授予另外的使用者B.

在這種情況下,如果資料庫管理者用revoke指令撤銷A使用者的對象權限時,使用者B的對象權限也被撤銷。由此可見,在進行

系統權限回收和進行對象權限回收時,效果是不同的。

3.6查詢使用者與權限

使用者被授予的系統權限或對象權限都被記錄在oracle的資料字典裡。

資料字典

資料字典表 說明
dba_users 資料庫使用者基本資訊表
dba_sys_privs 已授予使用者或角色的系統權限
dba_tab_privs 資料庫對象上的所有權限
user_sys_privs 登入使用者可以檢視自己的系統權限
role_sys_privs 登入使用者檢視自己的角色
all_tables 登入使用者自己可以查詢的基表資訊
user_tab_privs 使用者自己将哪些基表權限授予哪些使用者
all_tab_privs 哪些使用者給自己授權

4.角色管理

oracle權限過多,很雜,管理資料庫權限帶來了很大麻煩,這是就需要角色來簡化權限管理。

4.1角色簡介

  • 角色是一個獨立的資料庫實體,它包括一組權限。也就是說,角色是包括一個或者多個權限的集合,它并不被哪個使用者所擁有。角色可以被授予任何使用者,也可以從使用者中将角色收回。
  • 使用角色可以簡化權限的管理,可以僅用一條語句就能從使用者那裡授予或回收權限,而不必對使用者一一授權。使用角色還可以實作權限的動态管理,例如,随着應用的變化可以增加或者減少角色權限,這樣通過改變角色的權限,就實作了改變多個使用者的權限
  • 角色、使用者及權限是一組關系密切的對象,既然角色是一組權限的集合,那麼,它隻有被授予某個使用者才能有意義。

4.2預定義角色

系統已經建立好的一些角色,可以直接拿來用

connect、resource、dba、exp_full_database、imp_full_database

角色connect,resource及dba主要用于資料庫管理,這3個角色之間可能有系統權限的重疊,但是互相之間沒有任何包含關系

一般而言資料庫管理者需要:connect、resource、dba

一般的資料庫開發人員需要:connect、resource

exp_full_database、imp_full_database:這兩個權限則用于資料庫的導入導出

Oracle 使用者管理與權限配置設定 1.使用者與使用者模式的關系2.建立與管理使用者3.使用者權限管理4.角色管理5.資源配置profile本次實驗:
eg:查詢dba_roles資料字典中的角色資訊。
set pagesize 50;
select * from dba_roles;
           
Oracle 使用者管理與權限配置設定 1.使用者與使用者模式的關系2.建立與管理使用者3.使用者權限管理4.角色管理5.資源配置profile本次實驗:
共55行

4.3建立角色與授權

格式:create role role_name [ not identified | identified by [password]| [exeternally] | [globally] ];

參數說明如下:

  • role_name:角色名
  • identified by password:角色密碼
  • identified by exeternally:表示角色名在作業系統下驗證
  • identified globally:表示使用者是由oracle安全域中心伺服器來驗證,此角色由全局使用者來使用。
eg:建立一個名為designer的角色,該角色的密碼為123456
connect sys/pass[email protected] as sysdba;
create role designer identified by 123456;
           

若管理者具有grant_any_prvilege權限,就可以對某個角色進行授權。(角色也需要權限)

eg:給designer角色授予create view和create table權限

grant create view,create table to designer;
           

在角色獲得了權限之後,就可以把這個有使用價值的角色授予給某個使用者了。把角色授予給某個使用者仍然使用grant...to語句

eg:把designer角色授權給使用者dongfang

grant designer to dongfang;
           

4.4管理角色

(1)檢視角色所包含的權限

使用 role_sys_privs 資料字典

select * from role_sys_privs where role=upper('designer');
           

(2)修改角色密碼

取消角色密碼和修改角色密碼。使用 alter role 語句

首先取消designer角色的密碼,然後再重新給該角色設定一個密碼

alter role designer not identified;
alter role designer identified by mrsoft;
           

(3)設定目前使用者要生效的角色

隻有角色生效了,角色内的權限才作用于使用者

最大可生效角色數由參數max_enabled_roles設定

設定角色生效可使用 set role 語句

eg:建立一個無需密碼驗證的角色 queryer ,然後設定該角色生效,接下來再設定帶有密碼的角色 designer 也生效。

create role queryer;
--設定角色生效
set role queryer;
set role designer identified by mrsoft;
           

(4)删除角色

drop role

eg:使用drop role語句删除角色queryer

drop role queryer;
           
删除角色後,原來擁有該角色的使用者将不再擁有該角色,相應的權限也将失去

4.5角色與權限查詢

存放使用者、角色、權限的資料字典

資料字典 說明
dba_col_pirvs 資料庫列上的所有權限
dba_role_privs 顯示已經授予使用者或其他角色的角色
dba_tab_privs 資料庫對象上的所有權限
dba_sys_privs 已授予使用者或角色的系統權限
eg1:查詢HR使用者被授予的系統角色
desc dba_role_privs;
select granted_role,default_role from dba_role_privs where grantee='HR';
           
eg2:在scott模式下,查詢目前使用者的所有有效角色
connect scott/[email protected];
select * from session_roles;
           

5.資源配置profile

profile檔案,即概要檔案,是密碼限制、資源限制的命名集合。profile檔案作為oracle安全政策的重要組成部分,利用它可以對資料庫使用者進行基本的資源限制,并且可以對使用者的密碼進行管理。

在安裝資料庫時,oracle會自動建立名為default的預設配置檔案。如果沒有為建立的使用者指定default檔案(沒有[profiles profile_name]子句),oracle将為他指定default配置檔案。

初始的default檔案沒有進行任何密碼和資源限制。

使用profile檔案時需要注意如下事項:

  • 建立使用者時,如果不指定profile選項,oracle會自動将default配置設定給相應的資料庫使用者。
  • 建立profile檔案時,如果隻設定了部分密碼和資源限制選項,其他選項會自動使用預設值,即使的default檔案中有相應選項的值。
  • 使用profile管理密碼時,密碼管理選項總是處于被激活狀态,但是如果使用profile管理資源,必須要激活資源限制。
  • 一個使用者隻能配置設定一個profile檔案。如果要同時管理使用者的密碼和資源,那麼在建立profile時應該同時指定密碼和資源選項

5.2使用profile管理密碼

為防止黑客暴力破解密碼,可以使用profile檔案管理密碼。profile檔案提供了一些密碼管理選項,他們提供了強大的密碼管理功能。必須先建立profile檔案,建立profile檔案使用create profile語句。一般由管理者建立profile檔案,其他使用者想建立概要檔案則多一步授權即可,grant create profile to scott;

使用profile檔案可以實作如下四種密碼管理:賬戶鎖定、密碼的過期時間、密碼曆史和密碼的複雜度。

1.賬戶鎖定

連續輸入多少次錯誤密碼後,oracle會自動鎖定使用者的賬戶,并且可以規定賬戶的鎖定時間。

鎖定賬戶兩個參數:

    failed_login_attempts:使用者在登入到oracle資料庫時允許失敗的次數。

    password_lock_time:賬戶被鎖定的天數

eg:建立profile檔案,要求設定連續失敗次數為5,超過該次數後,賬戶将被鎖定7天,然後使用alter user語句将profile檔案

(即lock_account)配置設定給使用者dongfang

create profile lock_account limit
    failed_login_attempts 5
    password_lock_time 7;
           
alter user dongfang profile lock_account;
           
此時若登入dongfang使用者連續失敗5次,賬戶會自動鎖定7天,此時即使使用正确密碼也無法登入。
Oracle 使用者管理與權限配置設定 1.使用者與使用者模式的關系2.建立與管理使用者3.使用者權限管理4.角色管理5.資源配置profile本次實驗:
此時也可以dba手動解鎖使用者: (别漏了account關鍵字)
alter user dongfang account unlock;
           
若不主動解鎖改使用者,則必須等7天後,oracle自動解鎖該使用者了。注意:若建立profile檔案時沒有提供password_lock_time參數,則将自動使用預設值unlimited,此時就必須dba來手動解鎖使用者賬戶了。

2.密碼過期時間

密碼過期時間是強制使用者定期修改自己的密碼,當密碼過期後,oracle會随時提醒使用者修改密碼。密碼寬限期是指密碼到期之後的寬限使用時間。

同樣設定密碼過期時間也有兩個參數:

password_life_time:密碼有效時間,機關天

password_grace_time:密碼寬限時間,使得失效時間到達後,密碼還可以使用一段時間。(最好兩者同時設定)

eg:下面建立一個profile檔案(即password_lift_time),并設定使用者的密碼有效期為30天,密碼寬限期為3天,

然後使用alter user 語句将profile檔案配置設定給使用者dongfang

create profile password_lift_time limit
    password_life_time 30
    password_grace_time 3;
           
alter user dongfang profile password_lift_time;
           

--則東方使用者30天内沒有修改密碼,Oracle會顯示警告資訊,密碼将在3天後到期(expire)。若33天内都沒有更改密碼,

--那麼當第34天連接配接時,oracle會強制使用者修改密碼,否則不允許連接配接到資料庫。

3.密碼曆史

密碼曆史是用于控制賬戶密碼的可重複使用次數或可重用時間。使用密碼曆史參數後,oracle會将密碼修改資訊存放到

資料字典中。這樣,當修改密碼時,oracle會對新、舊密碼進行比較,以確定使用者不會重用過去已經用過的密碼。

password_reuse_time:指定密碼的可重用時間,機關為天

password_reuse_max:密碼在能夠被重複使用之前,必須改變的次數

注:使用密碼曆史選項時,兩個參數隻能使用其中一個,并将另一個設定為unlimited.

4.密碼複雜度

通過指定函數來強制使用者的密碼必須具有一定的複雜度。例如:強制使用者的密碼不能與使用者名相同使用校驗函數驗證使用者密碼的複雜度時,隻需要将這個函數名稱指定給profile檔案中的password_verify_function參數

oracle 11g,系統目錄下有一個新的密碼驗證檔案utlpwdmg.sql,和先前指定的驗證函數一起對密碼進行檢查

5.3使用profile管理資源

profile檔案不僅可以管理密碼,還可以管理資源(根據使用者所承擔任務的不同為其配置設定合理的資源),管理資源時必須将resource_limit參數設定為true,以激活資源限制。

eg:首先使用show指令檢視 resource_limit 參數的值,然後使用 alter system 指令修改該參數的值為true,進而激活資源限制

show parameter resource_limit;
alter system set resource_limit=true;
           
利用profile配置檔案可以對以下系統資源進行限制
  • cpu時間:防止無休止使用cpu,限制使用者每次調用時使用的cpu時間以及在一次會話期間所使用的cpu時間
  • 邏輯讀:為了防止過多使用系統的I/O操作,限制每次調用即會話時讀取的邏輯資料塊數目
  • 使用者的并發會話數
  • 會話空閑的限制:當一個會話空閑的時間達到了限制值時,目前事務被復原,會話被終止并且所占用的資源被釋放
  • 會話可持續時間:如果一個會話的總計連接配接時間達到了該限制值,目前事務被復原,會話被終止并釋放所占用的資源
  • 會話所使用的SGA空間的限制。

當一個sql語句占用的資源超過profile檔案中的限制時,oracle将終止并回退目前的事務,然後向使用者傳回錯誤資訊,如果受到

的限制是會話級别的,在送出或回退事務後,使用者會話将被終止;而受到調用級限制時,使用者會話還能夠繼續進行,隻是目前執行

的sql語句将被終止。

profile檔案中對各種資源限制的參數:

  • sessions_per_user:使用者可以同時連接配接的會話數量。
  • cpu_per_session:限制使用者在一次資料庫會話期間可以使用的cpu時間,機關為百分之一秒。
  • cpu_per_call:限制使用者每條sql語句所能使用的cpu時間,參數值是一個整數,機關是百分之一秒
  • logical_reads_per_session:限制每個會話所能讀取的資料塊數量,包括從記憶體中讀取的資料塊和從磁盤中讀取的資料塊
  • connect_time:限制每個使用者連接配接到資料庫的最長時間,機關為分鐘。逾時終止
  • idle_time:該參數限制每個使用者會話連接配接到資料庫的最長空閑時間。超過該空閑時間的會話,系統會終止該會話。

5.4維護profile檔案

在oracle資料庫中,profile檔案也是一種資料資源。dba也可以使用相應的語句對其進行管理,包括修改配置檔案、删除配置檔案、激活或禁用配置檔案。

1.修改profile檔案

在建立profile檔案之後,還可以使用alter profile語句修改其中的資源參數和密碼參數

eg:對password_lift_time檔案(即profile檔案)的資源限制參數進行修改

alter profile password_lift_time limit
cpu_per_session 20000
sessions_per_user 10
cpu_per_call 500
password_life_time 180
failed_login_attempts 10;
           
對配置檔案所做的修改隻有在使用者開始新的會話時才會生效

2.删除profile檔案

使用drop profile語句删除profile檔案,若該檔案已經被指定給了使用者,則必須在drop profile語句中使用cascade

eg:删除被配置設定給dongfang這個使用者的password_lift_time配置檔案

drop profile password_lift_time cascade;
           

5.5顯示profile資訊

當profile檔案被建立後,其資訊被存儲在資料字典中。通過查詢這些資料字典,可以了解profile檔案的資訊。

1.顯示使用者的資源配置資訊

建立或修改使用者時,可以為使用者配置設定profile檔案,如果沒有為使用者配置設定profile檔案,oracle會自動将default配置設定給使用者。通過查詢資料字典dba_users,可以顯示使用者使用的profile檔案。

eg:顯示使用者dongfang所使用的profile檔案

select profile from dba_users where username=upper('dongfang');
           
desc dba_users;

2.顯示指定profile檔案的資源配置資訊

建立或者修改profile檔案時,oracle将會把profile參數存放在資料字典中。通過查詢dba_profiles,可以顯示profile的妙妙限制、資源限制資訊。

eg:顯示resource_limit檔案的密碼和資源限制資訊。

column limit for a20;
set linesize 500;
set pagesize 50;
select resource_name,resource_type,limit from dba_profiles where profile=upper('lock_account');
           
Oracle 使用者管理與權限配置設定 1.使用者與使用者模式的關系2.建立與管理使用者3.使用者權限管理4.角色管理5.資源配置profile本次實驗:

本次實驗:

--1.	建立概要檔案
/*①	利用企業管理器建立概要檔案”ygbx+學号_pro”,要求在此概要檔案中CPU/會話為1000,讀取數/會話為2000,
	登入失敗次數為3,鎖定天數為10.*/
--伺服器->安全性->概要檔案
--ygbx3160704339_pro

connect sys/[email protected] as sysdba;
--②	利用SQL*PLUS,建立概要檔案“ygbx+學号_pro_sql”,其結構與”ygbx+學号_pro”一緻。
create profile ygbx3160704339_pro_sql limit
	cpu_per_session 1000
	logical_reads_per_session 2000
	failed_login_attempts 3
	password_lock_time 10;

--2.檢視概要檔案
--①	利用企業管理器檢視概要檔案”ygbx+學号_pro”的資訊。
--ygbx3160704339_pro


--②	利用SQL*PLUS,從DBA_PROFILES資料字典中檢視“ygbx+學号_pro_sql”概要檔案的資源名稱和資源值等資訊。
column limit for a20;
set linesize 500;
set pagesize 50;
select resource_name,profile,limit from dba_profiles where profile=upper('ygbx3160704339_pro_sql');

--③	利用SQL*PLUS,從dba_profiles中檢視“ygbx+學号_pro_sql”概要檔案中鎖定天數的值
select limit from dba_profiles 
	where profile=upper('ygbx3160704339_pro_sql') and resource_name=upper('password_lock_time');
--輸出10

--3.修改概要檔案。
--①	利用企業管理器,修改”ygbx+學号_pro”概要檔案,将CPU/會話改為4000,連接配接時間為60
--

--②	利用SQL*PLUS,修改“ygbx+學号_pro_sql”概要檔案,将并行會話設為20,讀取數/會話設為DEFAULT
alter profile ygbx3160704339_pro_sql limit
	sessions_per_user 20
	logical_reads_per_session default;


--4.建立使用者
--①	利用企業管理器,建立“ygbxuser+學号”使用者,密碼為“user+學号”,預設表空間為“ygbx_tbs”
--需要先建立表空間
create tablespace ygbx_tbs
	datafile 'E:/APP/ADMINISTRATOR/ORADATA/ORCL/Ygbx_TbsDataFile01.dbf'
	size 50m;
--檢視表空間
select * from v$tablespace;

-- ygbxuser3160704339
-- user3160704339
-- ygbx_tbs


--②	利用sqlplus建立“ygbxuser+學号_sql”使用者,密碼為“user+學号+sql”,該使用者處于鎖狀态
create user ygbxuser3160704339_sql identified by user3160704339sql
	account lock;


--③	利用sqlplus,将“ygbx+學号_pro”概要檔案賦予“ygbxuser+學号”使用者。
alter user ygbx3160704339
grant ygbx3160704339_pro 


--④	利用sql*plus,将“ygbx+學号_pro_sql”概要檔案賦予“ygbxuser+學号_sql”使用者。
alter user ygbxuser3160704339_sql profile ygbx3160704339_pro_sql;
--顯示使用者的profile
select profile from dba_users where username=upper('ygbxuser3160704339_sql');
--輸出:YGBX3160704339_PRO_SQL

--5.檢視使用者
--①	利用企業管理器,檢視“ygbxuser+學号”使用者的資訊
-- ygbx3160704339

--②	利用sqlplus,檢視“ygbxuser+學号_sql”使用者的資訊,并檢視該使用者驗證的方式
-- ygbxuser3160704339_sql
col external_name for a20;
set linesize 500;
select * from dba_users where username=upper('ygbxuser3160704339_sql');
--單獨拎出來認證方式
select authentication_type from dba_users where username=upper('ygbxuser3160704339_sql');
--輸出:PASSWORD

--③	利用sql*plus,從dba_users資料字典中檢視“ygbxuser+學号_sql”使用者的預設表空間和臨時表空間的資訊。
select default_tablespace,temporary_tablespace from dba_users 
	where username=upper('ygbxuser3160704339_sql');
--users 和 temp


--6.修改使用者
--①	利用企業管理器,修改“ygbxuser+學号”使用者,驗證方式為外部
-- ygbx3160704339  
-- 前面使用者名建立成了 ygbx3160704339 現在一直用下去吧

--②	利用sql*plus,修改“ygbxuser+學号_sql”使用者,将該使用者解鎖,并将密碼改為“sql+學号+user”
alter user ygbxuser3160704339_sql 
	identified by sql3160704339user
	account unlock;
--檢視修改
select * from dba_users where username=upper('ygbxuser3160704339_sql');

--7.權限管理
--①	利用企業管理器,授予“ygbxuser+學号”使用者“create any table”、“create any index”,
--	“alter any table”,”alter any index”,“drop any table”和“drop any index”系統權限
-- ygbx3160704339
--使用者-> ygbx3160704339->編輯->系統權限->編輯清單


--②	利用sqlplus授予“ygbxuser+學号_sql”使用者“sysoper”系統權限
grant sysoper to ygbxuser3160704339_sql;
--檢視系統權限
--select * from dba_sys_privs where grantee=upper('ygbxuser3160704339_sql');


--③	利用企業管理器,将“ygbxuser+學号”使用者添加到“system”方案中,對“help”表的檢視、修改、删除等對象權限
--先建立表help
create table help(
	id int,
	name varchar2(20)
);

-- ygbx3160704339
-- 查找到使用者->編輯->使用組權限->編輯清單->添加sys_group
-- ->切換到對象權限->選擇對象類型->表->添加->選擇 表 對象 内輸入sys.help(如圖)->右移動select、update、delete->确定
grant delete,select,update
	on sys.help
	to ygbx3160704339;


--④	利用sql*plus,收回“ygbxuser+學号”使用者在“system”方案中對“help”表的檢視、修改、删除等對象權限
revoke delete,select,update
	on sys.help
	from ygbx3160704339;


--⑤	利用sql*plus,收回“ygbxuser+學号_sql”使用者的“sysoper”系統權限
revoke sysoper from ygbxuser3160704339_sql;


--8.建立角色
--①	利用企業管理器,建立“ygbxrole+學号”角色,賦予該角色能對表、索引、存儲過程、序列、同義詞進行基本操作的權限
-- ybgxrole3160704339


--②	利用sql*plus,建立“ygbxrole+學号_sql”角色,該角色具有“sysdba”系統權限,并将該角色賦予“ygbxuser+學号_sql”使用者
create role ygbxrole3160704339_sql identified by 123456;
-- grant sysdba to ygbxrole3160704339_sql;
--ORA-01931: 無法将 SYSDBA 授予角色
-- grant create table to ygbxrole3160704339_sql;
--将dba角色賦予角色 也相當于有了系統權限了
grant dba to ygbxrole3160704339_sql;
grant ygbxrole3160704339_sql to ygbxuser3160704339_sql;


--	9.檢視角色
--①	利用企業管理器,檢視“ygbxrole+學号_sql”角色所具有的所有權限
-- ygbxrole3160704339_sql

--②	利用sqlplus,檢視“ygbxrole+學号_sql”角色所具有的所有權限
--  ygbxrole3160704339_sql
select * from dba_sys_privs where grantee=upper('ygbxrole3160704339_sql');


--10.修改角色
--①	利用企業管理器,修改“ygbxrole+學号”角色,增加對角色的基本操作,并收回存儲過程和序列的操作權限。
-- ygbxrole3160704339


--②	利用sqlplus,修改“ygbxrole+學号_sql”角色,收回“sysdba”系統,而授予“select any table”系統權限
revoke dba from ygbxrole3160704339_sql;
grant select any table to ygbxrole3160704339_sql;


--11.删除角色
--①	利用企業管理器,删除“ygbxrole+學号”角色
--查找到 ygbxrole3160704339 然後直接删除


--②	利用sqlplus,删除“ygbxrole+學号_sql”角色
drop role ygbxrole3160704339_sql;


--12.删除概要檔案。
--①	利用企業管理器,删除“ygbx+學号_pro”概要檔案,檢視“ygbxuser+學号”使用者的概要檔案
-- ygbx3160704339_pro


--②	利用sqlplus,删除“ygbx+學号_pro_sql”概要檔案,檢視“ygbxuser+學号_sql”使用者的概要檔案
drop profile ygbx3160704339_pro_sql cascade;

--13.删除使用者
--①	利用企業管理器,删除“ygbxuser+學号”使用者
-- ygbx3160704339


--②	利用sqlplus,删除“ygbxuser+學号_sql”使用者
drop user ygbxuser3160704339_sql;



--思考題:
--1.	分别建立dog,cat,pig使用者,并分别用密碼,作業系統和外部認證方式認證
create user dog identified by 123;
-- 書上的關鍵字似乎寫錯了 多了一個e  沒錯,加了個e就不是外部的意思了。。
create user cat identified externally;
create user pig identified globally as 'CN=user';

-- 2.	用dog身份登入,并在dog使用者下建立cpy_emp表,該表為scott使用者的emp表的拷貝表
grant create session,create table,resource to dog;
grant select on scott.emp to dog;
connect dog/[email protected];
create table cpy_emp as select * from scott.emp;
select * from cpy_emp;


--3.	收回dog的所有權限
-- revoke all privileges from dog;
revoke create session,create table,resource from dog;
revoke select on scott.emp from dog;

--4.	建立角色animal,并對角色賦予如上所需權限,然後為dog,cat,pig賦予角色
create role animal;
grant create session,create table,resource to animal;
grant animal to dog;
grant animal to cat;
grant animal to pig;


-- 5.	建立概要檔案pro1,要求密碼錯誤嘗試3次,鎖定30天,并将該檔案指定給dog
create profile pro1 limit
	failed_login_attempts 3
	password_lock_time 30;

alter user dog profile pro1;


--6.	連接配接dog使用者,并連續輸入3次錯誤密碼,然後再把密碼解鎖。
conn dog/[email protected];
conn dog/[email protected];
conn dog/[email protected];
alter user dog account unlock;