1. 程式人生 > >Oracle使用者,許可權,角色以及登入管理

Oracle使用者,許可權,角色以及登入管理

 

Oracle使用者,許可權,角色以及登入管理

 

1. sys和system使用者的區別

system使用者只能用normal身份登陸em。除非你對它授予了sysdba的系統許可權或者syspoer系統許可權。

sys使用者具有“SYSDBA”或者“SYSOPER”許可權,登陸em也只能用這兩個身份,不能用normal。

--

 

最重要的區別,儲存的資料的重要性不同

sys所有oracle的資料字典的基表和檢視都存放在sys使用者中,這些基表和檢視對於oracle的執行是至關重要的,由資料庫自己維護,任何使用者都不能手動更改。sys使用者擁有dba,sysdba,sysoper等角色或許可權,是oracle許可權最高的使用者。

system使用者用於存放次一級的內部資料,如oracle的一些特性或工具的管理資訊。system使用者擁有普通dba角色許可權。

 

“SYSOPER”許可權,即資料庫操作員許可權,許可權包括:
  開啟資料庫伺服器   關閉資料庫伺服器
  備份資料庫       恢復資料庫
  日誌歸檔         會話限制
“SYSDBA”許可權,即資料庫管理員許可權,許可權包括:
  開啟資料庫伺服器   關閉資料庫伺服器
  備份資料庫       恢復資料庫
  日誌歸檔       會話限制
  管理功能       建立資料庫

 

 

 2.normal 、sysdba、 sysoper區別

normal 是普通使用者,只有通過被sys授權之後才可以對資料庫進行操作
sysdba擁有最高的系統許可權
sysoper主要用來啟動、關閉資料庫,sysoper 登陸後用戶是 public
sysdba登陸後是sys,而且只能是SYS登入sysdba.

[html] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

  1. SQL> conn / as sysdba  
  2. 已連線。  
  3. SQL> grant sysoper to test;  
  4. 授權成功。  
  5. SQL> conn test/test as sysoper;  
  6. 已連線。  
  7. SQL> show user  
  8. USER 為"PUBLIC"  
  9. SQL> conn test/test as sysdba  
  10. 已連線。  
  11. SQL> show user  
  12. USER 為"SYS"  
  13. SQL>  


 

系統許可權

sysdba

sysoper

區別

Startup(啟動資料庫)

startup

Shutdown(關閉資料庫)

shutdown

alter database open/mount/backup

alter database open/mount/backup

改變字符集

none

create database(建立資料庫)

None不能建立資料庫

drop database(刪除資料庫)

none

create spfile

create spfile

alter database archivelog(歸檔日誌)

alter database archivelog

alter database recover(恢復資料庫)

只能完全恢復,不能執行不完全恢復

擁有restricted session(會話限制)許可權

擁有restricted session許可權

可以讓使用者作為sys使用者連線

可以進行一些基本的操作,但不能檢視使用者資料

登入之後使用者是sys

登入之後使用者是public

 

 

 

 

system如果正常登入,它其實就是一個普通的dba使用者,但是如果以as sysdba登入,其結果實際上它是作為sys使用者登入的,這一點類似Linux裡面的sudo的感覺,從登入資訊裡面我們可以看出來。因此在as sysdba連線資料庫後,建立的物件實際上都是生成在sys中的。其他使用者也是一樣,如果 as sysdba登入,也是作為sys使用者登入的,看以下實驗:

[html] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

  1. SQL> create user strong identified by strong;  
  2. 使用者已建立。  
  3. SQL> conn strong/[email protected] as sysdba;  
  4. 已連線。  
  5. SQL> show user;  
  6. USER 為 "SYS"  
  7. SQL> create table test(a int);  
  8. 表已建立。  
  9. SQL> select owner from dba_tables where table_name='test';  
  10. 未選定行 //因為建立表時oracle自動轉為大寫,所以用小寫查的時候是不存在的;  
  11. SQL> select owner from dba_tables where table_name='TEST';  
  12. OWNER  
  13. ------------------------------  
  14. SYS  


 

3.dba和sysdba的區別

dba、sysdba這兩個系統角色有什麼區別呢 
在說明這一點之前我需要說一下oracle服務的建立過程
·建立例項
·啟動例項
·建立資料庫(system表空間是必須的)
啟動過程
·例項啟動
·裝載資料庫
·開啟資料庫

sysdba,是管理oracle例項的,它的存在不依賴於整個資料庫完全啟動,
只要例項啟動了,它就已經存在,以sysdba身份登陸,裝載資料庫、開啟資料庫
只有資料庫打開了,或者說整個資料庫完全啟動後,dba角色才有了存在的基礎,dba只是個角色而已.

 

4.在查詢使用者角色表的時候,沒有看到sysdba等角色,為什麼?

[html] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

  1. [email protected]> select role from dba_roles order by role    
  2.   2  ;  
  3.   
  4. ROLE  
  5. ------------------------------  
  6. ADM_PARALLEL_EXECUTE_TASK  
  7. APEX_ADMINISTRATOR_ROLE  
  8. AQ_ADMINISTRATOR_ROLE  
  9. AQ_USER_ROLE  
  10. AUTHENTICATEDUSER  
  11. CONNECT  
  12. CSW_USR_ROLE  
  13. CTXAPP  
  14. CWM_USER  
  15. DATAPUMP_EXP_FULL_DATABASE  
  16. DATAPUMP_IMP_FULL_DATABASE  
  17. DBA  
  18. DBFS_ROLE  
  19. DELETE_CATALOG_ROLE  
  20. EJBCLIENT  
  21. EXECUTE_CATALOG_ROLE  
  22. EXP_FULL_DATABASE  
  23. GATHER_SYSTEM_STATISTICS  
  24. GLOBAL_AQ_USER_ROLE  
  25. HS_ADMIN_EXECUTE_ROLE  
  26. HS_ADMIN_ROLE  
  27. HS_ADMIN_SELECT_ROLE  
  28. IMP_FULL_DATABASE  
  29. JAVADEBUGPRIV  
  30. JAVAIDPRIV  
  31. JAVASYSPRIV  
  32. JAVAUSERPRIV  
  33. JAVA_ADMIN  
  34. JAVA_DEPLOY  
  35. JMXSERVER  
  36. LOGSTDBY_ADMINISTRATOR  
  37. MGMT_USER  
  38. OEM_ADVISOR  
  39. OEM_MONITOR  
  40. OLAPI_TRACE_USER  
  41. OLAP_DBA  
  42. OLAP_USER  
  43. OLAP_XS_ADMIN  
  44. ORDADMIN  
  45. OWB$CLIENT  
  46. OWB_DESIGNCENTER_VIEW  
  47. OWB_USER  
  48. RECOVERY_CATALOG_OWNER  
  49. RESOURCE  
  50. SCHEDULER_ADMIN  
  51. SELECT_CATALOG_ROLE  
  52. SPATIAL_CSW_ADMIN  
  53. SPATIAL_WFS_ADMIN  
  54. WFS_USR_ROLE  
  55. WM_ADMIN_ROLE  
  56. XDBADMIN  
  57. XDB_SET_INVOKER  
  58. XDB_WEBSERVICES  
  59. XDB_WEBSERVICES_OVER_HTTP  
  60. XDB_WEBSERVICES_WITH_PUBLIC  
  61.   
  62. 55 rows selected.  
  63.   
  64. [email protected]>   

解釋:

 

dba是Oracle裡的一種物件,Role 和User一樣,是實實在在存在在Oracle裡的物理物件,而sysdba是指的一種概念上的操作物件,在Oracle資料裡並不存在。 

所以說這兩個概念是完全不同的。dba是一種role對應的是對Oracle例項裡物件的操作許可權的集合,而sysdba是概念上的role是一種登入認證時的身份標識而已。 

[html] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

  1. --grant dba 和grant sysdba的差別   
  2. --dba是正真的role,所以grant後在dba_role_privs裡有記錄,而revoke後就沒有了   
  3.   
  4. SQL>  grant dba to testuser;   
  5. SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;   
  6. GRANTEE                        GRANTED_ROLE                  ADM DEF   
  7. —————————— —————————— — —   
  8. TESTUSER                      RESOURCE                      NO  YES   
  9. TESTUSER                      CONNECT                        NO  YES   
  10. TESTUSER                      DBA                            NO  YES   
  11. SQL>  revoke dba from testuser;   
  12. SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;   
  13. GRANTEE                        GRANTED_ROLE                  ADM DEF   
  14. —————————— —————————— — —   
  15. TESTUSER                      RESOURCE                      NO  YES   
  16. TESTUSER                      CONNECT                        NO  YES   
  17.   
  18. --對於sysdba是不會出現這個情況的,因為他不是正真的role   
  19. SQL> grant sysdba to testuser;   
  20. SQL> select * from dba_role_privs where grantee = ‘TESTUSER’;   
  21. GRANTEE                        GRANTED_ROLE                  ADM DEF   
  22. —————————— —————————— — —   
  23. TESTUSER                      RESOURCE                      NO  YES   
  24. TESTUSER                      CONNECT                        NO  YES   

 

那麼這個是sysdba是這麼記錄的叻, 
我在一個文章和帖子裡對對sysdba的登入有過詳細的敘述 
對了,sysdba是登入時候需要的他是和remote_login_passwordfile關聯的 
我們可以查詢v$pwfile_users; 
如下: 
SQL> select * from v$pwfile_users; 
USERNAME                      SYSDB SYSOP 
—————————— —– —– 
SYS                            TRUE  TRUE 
SYSTEM                        TRUE  FALSE 
TESTUSER                      TRUE  FALSE 
當你grant sysdba後,在這裡就多了一條 
下面我們revoke一下,再來看 
SQL> revoke sysdba from testuser; 
SQL> select * from v$pwfile_users; 
USERNAME                      SYSDB SYSOP 
—————————— —– —– 
SYS                            TRUE  TRUE 
SYSTEM                        TRUE  FALSE 

沒有叻。 

所以在這裡dba和sysdba是根本不同概念了。 

有關sysdba登入的解釋可以檢視帖子 

http://topic.csdn.net/u/20090429/12/6d495d87-9f04-4828-ab2a-cb186ba8c5de.html

 

5.Oracle資料庫登入一些命令及解釋

 

1、啟動oracle資料庫: 

從root切換到oracle使用者進入:

su - oracle

進入sqlplus環境,nolog引數表示不登入:
sqlplus /nolog

以管理員模式登入:
sqlplus / as sysdba

啟動資料庫
startup;
停止資料庫
shutdown immediate
遠端連線資料庫
sqlplus /nolog
conn sys/[email protected]:1521/orainstance as sysdba
也可以直接執行:
dbstart
#啟動資料庫的指令碼
dbshut
#停止資料庫的指令碼

 

 

2、資料庫監聽:
啟動監聽服務:
lsnrctl start
停止監聽服務:
lsnrctl stop
檢視監聽狀態:
lsnrctl status
3、使用者許可權管理:

注:以下命令都需要DBA許可權。
建立使用者:
create user ittbank identified by 123456 ;
賦予使用者的表空間許可權:
alter user ittbank default tablespace ittbank;;
或者兩條命令合併為:
create user ittbank identified by 123456 default tablespace ittbank;

注:剛剛建立完的新使用者是沒有任何許可權的,甚至連登入資料庫的許可權都沒有。這時使用conn 使用者名稱/密碼 會提示沒有許可權。在新建一個使用者之後還要對這個使用者進行授權操作。當然是要使用有能力授權的使用者,如sys、system。角色是指由系統許可權集合。通常給某個使用者授予許可權時如果沒有角色存在的話,那麼需要一條一條的操作,角色的存在就是使得授權變得很方便。通常一個角色由多個系統許可權組成。常用的角色有三個connect(7種許可權)、dba、resource(在任何表空間建表)。

授予使用者管理許可權:
grant connect,resource,dba to ittbank ;

刪除使用者
drop user“name”cascade;
注:cascade引數是級聯刪除該使用者所有物件,經常遇到如使用者有物件而未加此引數則使用者刪不了的問題,所以習慣性的加此引數。“name”的引號有無都是一樣的。

修改使用者密碼
password ittbank( 在使用者已經連線的情況下 )或者
alter user ittbank identified by newpassword
注意:在給其他使用者修改密碼時,需要具有DBA的許可權或擁有alter user的系統許可權。

檢視當前使用者的角色
select * from user_role_privs;
select * from session_privs;
檢視當前使用者的系統許可權和表級許可權
select * from user_sys_privs;
select * from user_tab_privs;
查詢使用者表
select name from dba_users;
修改使用者口令
alter user "name" identified by "password";
顯示當前使用者
show user;

 

 

6.ORACLE使用者許可權管理筆記整理

 

select username from dba_users;  查詢系統所有使用者

select * from dba_users where username = 'XXXX';查詢使用者相關資訊

select * from dba_roles;    查詢系統所有角色

 

DBA_ROLE_PRIVS        查詢某個使用者具有的角色或者某個角色下的有哪些使用者

select * from dba_role_privs wheregrantee ='SYS';

select * fromdba_role_privs where granted_role ='RESOURCE';

 

DBA_SYS_PRIVS   查詢某個使用者具有的系統許可權

select grantee,privilege from dba_sys_privs where grantee='XXXX';

 

ROLE_SYS_PRIVS顯示授予角色的系統許可權

select* from role_sys_privs where role = 'RESOURCE';查詢RESOURCE角色相關的許可權

ROLE_TAB_PRIVS顯示授予角色的表許可權

管理使用者、角色和許可權的DBA檢視:
DBA_USERS         提供使用者的資訊
DBA_ROLES         顯示資料庫中所有角色
DBA_COL_PRIVS     顯示列級物件授權
DBA_ROLE_PRIVS    顯示使用者及其角色
DBA_SYS_PRIVS     顯示被授予系統許可權的使用者
DBA_TAB_PRIVS     顯示使用者及他們在表上的許可權
ROLE_ROLE_PRIVS   顯示授予角色的角色
ROLE_SYS_PRIVS    顯示授予角色的系統許可權
ROLE_TAB_PRIVS    顯示授予角色的表許可權
SESSION_PRIVS     顯示允許使用者使用的許可權
SESSION_ROLES     顯示當前允許使用者使用的角色

 

select * from session_privs;查詢使用者本身擁有的許可權

select * from user_role_privs;查詢使用者本身擁有的角色

select * from dba_sys_privs where grantee='CONNECT'; 查詢角色所擁有的許可權

select * from role_sys_privs where role='CONNECT';查詢角色所擁有的許可權

 

7.許可權講解

 
(
首先我應該分清許可權和角色,大致講講
許可權oracle提供兩種許可權(系統許可權sys privileges和物件(實體)許可權object privileges) 
角色:是具有名稱的一組系統許可權和物件許可權的集合
)

 

一、許可權分類:

系統許可權:系統規定使用者使用資料庫的許可權。(系統許可權是對使用者而言)。

實體許可權:某種許可權使用者對其它使用者的表或檢視的存取許可權。(是針對表或檢視而言的)。

 

二、系統許可權管理:
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選項,則得到的許可權可以傳遞。

SQL> grant connect, resorce to qwith admin option;  //可以傳遞所獲許可權。

 

4、系統許可權回收:系統許可權只能由DBA使用者回收
命令:SQL> Revoke connect, resource from user50;

 

說明:

1)如果使用WITH ADMIN OPTION為某個使用者授予系統許可權,那麼對於被這個使用者授予相同許可權的所有使用者來說,取消該使用者的系統許可權並不會級聯取消這些使用者的相同許可權。

2)系統許可權無級聯,即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則可以查到,因為他可以訪問。


2. 將表的操作許可權授予全體使用者:
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;   // 授出許可權的表(授出的許可權)

 

3. 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;
 
4. 實體許可權傳遞(with grant option):
user01:

SQL> grant select, update on product to user02 with grant option; // user02得到許可權,並可以傳遞。

 

5. 實體許可權回收:
user01:
SQL>Revoke select, update on product from user02;  //傳遞的許可權將全部丟失。

 

說明

1)如果取消某個使用者的物件許可權,那麼對於這個使用者使用WITH GRANT OPTION授予許可權的使用者來說,同樣還會取消這些使用者的相同許可權,也就是說取消授權時級聯的。

總結:

 

--檢視使用者系統許可權

  select * from dba_sys_privs; 
  select * from session_privs; 
  select * from user_sys_privs; 

--檢視使用者物件許可權

  select * from dba_tab_privs; 
  select * from all_tab_privs; 
  select * from user_tab_privs; 

8.Oracle 使用者管理

 

一、建立使用者的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;

 

1.授權 

grant <privilege1,privilege2,....> to <user_name> [with admin|grant option];  

如果需要讓user_name同時擁有分配這些許可權的許可權可以新增:

With admin option: 可以分配系統許可權

With grant option: 可以分配物件許可權

2.授權撤銷  

revoke <privilege1,privilege2,...>  from <user_name>; 

 

 

9.Oracle 角色管理

一、何為角色
  角色。角色是一組許可權的集合,將角色賦給一個使用者,這個使用者就擁有了這個角色中的所有許可權。

二、系統預定義角色
  預定義角色是在資料庫安裝後,系統自動建立的一些常用的角色。下介簡單的介紹一下這些預定角色。角色所包含的許可權可以用以下語句查詢:
sql>select * from role_sys_privs where role='角色名';

1.CONNECT, RESOURCE, DBA
這些預定義角色主要是為了向後相容。其主要是用於資料庫管理。oracle建議使用者自己設計資料庫管理和安全的許可權規劃,而不要簡單的使用這些預定角色。將來的版本中這些角色可能不會作為預定義角色。

2.DELETE_CATALOG_ROLE, EXECUTE_CATALOG_ROLE, SELECT_CATALOG_ROLE
這些角色主要用於訪問資料字典檢視和包。

3.EXP_FULL_DATABASE, IMP_FULL_DATABASE
這兩個角色用於資料匯入匯出工具的使用。 

4.AQ_USER_ROLE, AQ_ADMINISTRATOR_ROLE
AQ:Advanced Query。這兩個角色用於oracle高階查詢功能。

5. SNMPAGENT
用於oracle enterprise manager和Intelligent Agent

6.RECOVERY_CATALOG_OWNER
用於建立擁有恢復庫的使用者。關於恢復庫的資訊,參考oracle文件《Oracle9i User-Managed Backup and Recovery Guide》 

7.HS_ADMIN_ROLE
A DBA using Oracle's heterogeneous services feature needs this role to access appropriate tables in the data dictionary.

 

三、管理角色
1.建一個角色
sql>create role role1;

2.授權給角色
sql>grant create any table,create procedure to role1;

3.授予角色給使用者
sql>grant role1 to user1;

4.檢視角色所包含的許可權
sql>select * from role_sys_privs;

5.建立帶有口令以角色(在生效帶有口令的角色時必須提供口令)
sql>create role role1 identified by password1;

6.修改角色:是否需要口令
sql>alter role role1 not identified;
sql>alter role role1 identified by password1;

7.設定當前使用者要生效的角色
(注:角色的生效是一個什麼概念呢?假設使用者a有b1,b2,b3三個角色,那麼如果b1未生效,則b1所包含的許可權對於a來講是不擁有的,只有角色生效了,角色內的許可權才作用於使用者,最大可生效角色數由引數MAX_ENABLED_ROLES設定;在使用者登入後,oracle將所有直接賦給使用者的許可權和使用者預設角色中的許可權賦給使用者。)
sql>set role role1;//使role1生效
sql>set role role,role2;//使role1,role2生效
sql>set role role1 identified by password1;//使用帶有口令的role1生效
sql>set role all;//使用該使用者的所有角色生效
sql>set role none;//設定所有角色失效
sql>set role all except role1;//除role1外的該使用者的所有其它角色生效。
sql>select * from SESSION_ROLES;//檢視當前使用者的生效的角色。

8.修改指定使用者,設定其預設角色
sql>alter user user1 default role role1;
sql>alter user user1 default role all except role1;
詳見oracle參考文件

9.刪除角色
sql>drop role role1;
角色刪除後,原來擁用該角色的使用者就不再擁有該角色了,相應的許可權也就沒有了。

說明:

1)無法使用WITH GRANT OPTION為角色授予物件許可權

2)可以使用WITH ADMIN OPTION 為角色授予系統許可權,取消時不是級聯

 

10.sqlplus / as sysdba方式登入

 

以sqlplus / as sysdba方式登入時,採用的是作業系統驗證的方式,所以使用者名稱/密碼輸與不輸入是一樣的?真的是這樣的嗎?

 

Oracle的使用者資訊一般來說是儲存在資料字典裡的,所以常規使用者在Oracle資料庫沒有啟動的時候是無法登陸的。但有兩類使用者例外,這就是具有sysdba或者sysoper許可權的使用者。Oracle sysdba或者sysoper使用者的登陸有兩種方式:一是通過OS認證,二是通過密碼檔案驗證。

究竟使用哪一種驗證方式以及能否成功登陸取決於三個方面的因素:

1. sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES的設定

2. 引數檔案中REMOTE_LOGIN_PASSWORDFILE的設定

3. 密碼檔案 PWD%sid%.ora

 

Oracle進行許可權驗證的大致順序如下:

1. 根據SQLNET.AUTHENTICATION_SERVICES的值決定是進行os驗證還是密碼檔案驗證。

2. 如果是os驗證,根據當前使用者的使用者組判斷是否具有sysdba許可權。如果os驗證失敗,則進行密碼檔案驗證。

2. 如果是密碼檔案驗證,REMOTE_LOGIN_PASSWORDFILE的值以及密碼檔案是否存在決定了驗證是否成功。

sqlnet.ora

 windows中sqlnet.ora檔案為空時採用Oracle密碼檔案驗證,Linux相反!
 SQLNET.AUTHENTICATION_SERVICES= (NTS)     基於作業系統驗證;
 SQLNET.AUTHENTICATION_SERVICES= (NONE)  基於Oracle密碼檔案驗證
 SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)  二者並存,注意是半形,否則不識別(windows)

 

 預設情況下Unix/Linux下的sqlnet.ora檔案是沒有SQLNET.AUTHENTICATION_SERVICES引數的,

此時是作業系統驗證和Oracle密碼驗證並存,加上SQLNET.AUTHENTICATION_SERVICES這個參
數後,不管SQLNET.AUTHENTICATION_SERVICES設定為NONE還是NTS還是(NONE,NTS),都是
基於Oracle密碼驗證。

 

設定sqlnet.authentication_services:
none:作用是不允許通過os系統使用者登入資料庫,需要提供使用者名稱及密碼;
all:作用是允許所有的登入方式;
nts:作用是windows的本地作業系統使用者認證;
注:需要說明的是據試驗該使用者名稱和密碼是指具有sysdba許可權的使用者;在linux上若用系統使用者oracle登入資料庫需要設定為all或是登出該欄位;
注:linux上預設是沒有該檔案的,可以手動建立,參考$ORACLE_HOME/network/admin/samples/sqlnet.ora內容,並將之設定在$ORACLE_HOME/network/admin/目錄下。

 

 

如果是密碼檔案驗證的話,需要確認密碼檔案是否存在!即:

$ORACLE_HOME/dbs/下有沒有orapw$ORACLE_SID的檔案

密碼檔案是可以通過引數REMOTE_LOGIN_PASSWORDFILE開啟(EXCLUSIVE或者SHARED)或者是禁用(none)的

show parameter xxxxxxxxx--檢視

 alter system set remote_login_passwordfile  = none scope=spfile;--修改

 

--檢視具有sysdba或者sysoper許可權的使用者

select * from v$pwfile_users;

 

每次使用grant sysdba/sysoper授予新使用者特殊許可權或是alter user命令修改擁有sysdba/sysoper許可權的使用者密碼的時候,Oracle都會自動的同步密碼檔案,這樣保證在資料庫沒有開啟的情況擁有特殊許可權的使用者能正常的登陸資料庫以進行管理操作。

 

[html] view plaincopy在CODE上檢視程式碼片派生到我的程式碼片

  1. SQL> show parameters remote_login_passwordfile;  
  2.   
  3. NAME                                 TYPE        VALUE  
  4. ------------------------------------ ----------- ------------------------------  
  5. remote_login_passwordfile            string      EXCLUSIVE  
  6. SQL> select * from v$pwfile_users;    
  7.   
  8. USERNAME                       SYSDB SYSOP SYSAS  
  9. ------------------------------ ----- ----- -----  
  10. SYS                            TRUE  TRUE  FALSE  
  11.   
  12. SQL> grant sysdba to hr    
  13.   2  ;  
  14.   
  15. Grant succeeded.  
  16.   
  17. SQL> select * from v$pwfile_users;    
  18.   
  19. USERNAME                       SYSDB SYSOP SYSAS  
  20. ------------------------------ ----- ----- -----  
  21. SYS                            TRUE  TRUE  FALSE  
  22. HR                             TRUE  FALSE FALSE  
  23.   
  24. SQL>  


密碼檔案的重建

其中檔名和密碼是必需的。entries設定了密碼檔案可包含的dba使用者的最大數目。force定義了是否覆蓋當前檔案。重建密碼檔案會清除系統內除了sys使用者以外所有sysdba使用者的密碼。必須使用grant sysdba同步密碼檔案。

命令orapwd

 

windows環境下的

oracle的作業系統認證(connect as sysdba)登入方式

有一種oracle的登入方式是作業系統驗證登入方式,即常說的OS驗證登入方式,在SQL server中也有這種方式。

有些朋友經常使用connect / as sysdba登入,但不知道為什麼沒有提供使用者名稱和密碼就得到了sysdba的許可權。還認為這樣是不是不安全呢?

Oracle在常見的多使用者作業系統上都可以進行OS認證方式來登入。例如solaris,windows等等。
下面以常見的windows作業系統來說明看一下這個作業系統認證方式登入的原理。如果你的機器可以使用connect / as sysdba獲取sysdba的許可權,那麼下面的每一個過程你的機器上都會得到驗證,如果不能,按照下面的操作更改後,你也能以這種方式登入。

  1. 在命令列下敲入compmgmt.msc 進入計算機管理
  2. 選擇本地使用者和組—>組
  3. 看是不是有一個組的名字叫做ORA_DBA
  4. 雙擊改組可以看到裡面是不是有administrator使用者
  5. 想一想你是不是以administrator使用者登入的呢?
  6. 再進入Oracle安裝目錄(即$ORACLE_HOME 一般是D:"oracle)"ora92"network"admin 找到sqlnet.ora檔案看看裡面的是不是有SQLNET.AUTHENTICATION_SERVICES= (NTS)
  7. 如果這些都對的話,你就能已作業系統認證的方式(connect / as sysdba)來登入Oracle

接下來的問題是,如果你的資料很重要,出於安全考慮,希望禁止這種作業系統認證的方式。那麼該怎麼做呢?
很簡單,找到在剛才的第6步驟中的sqlnet.ora檔案,將SQLNET.AUTHENTICATION_SERVICES= (NTS)改為SQLNET.AUTHENTICATION_SERVICES=none即可。你再試一下看看會不會得到到如下結果:
ERROR:
ORA-01031: insufficient privileges
警告: 您不再連線到 ORACLE。

如果你的機器不能以系統認證的方式登入,檢查以上幾個步驟,你總可以找到原因的。

 

詳細瞭解再看蝦米吶的連結或者http://www.itpub.net/thread-1037871-1-1.html

 

11:sqlplus連線時的三種方式

SQLPlus 在連線時通常有三種方式

1. sqlplus / as sysdba
    作業系統認證,不需要資料庫伺服器啟動listener,也不需要資料庫伺服器處於可用狀態。比如我們想要啟動資料庫就可以用這種方式進入
    sqlplus,然後通過startup命令來啟動。
2. sqlplus username/password
    連線本機資料庫,不需要資料庫伺服器的listener程序,但是由於需要使用者名稱密碼的認證,因此需要資料庫伺服器處於可用狀態才行。
3. sqlplus usernaem/[email protected]
    通過網路連線,這是需要資料庫伺服器的listener處於監聽狀態。此時建立一個連線的大致步驟如下 
  a. 查詢sqlnet.ora,看看名稱的解析方式,預設是TNSNAME  
  b. 查詢tnsnames.ora檔案,從裡邊找orcl的記錄,並且找到資料庫伺服器的主機名或者IP,埠和service_name  
  c. 如果伺服器listener程序沒有問題的話,建立與listener程序的連線。  
  d. 根據不同的伺服器模式如專用伺服器模式或者共享伺服器模式,listener採取接下去的動作。預設是專用伺服器模式,沒有問題的話客戶端
            就連線上了資料庫的server process。
  e. 這時連線已經建立,可以操作資料庫了。

 

 

 

整理自:

http://blog.csdn.net/wanghai__/article/details/4791879

 

http://blog.csdn.net/inthirties/article/details/4159489

http://www.ha97.com/4981.html

http://blog.csdn.net/junmail/article/details/4381287

http://slbszq.iteye.com/blog/2003234

http://hi.baidu.com/zyaijava/item/91b17adc58744c8e6dce3fb9

 

http://gaozhifei.blog.51cto.com/4108324/1144483

http://www.cnblogs.com/sky100/articles/1606164.html
http://logicgate.iteye.com/blog/335179

系統許可權

sysdba

sysoper

區別

Startup(啟動資料庫)

startup

Shutdown(關閉資料庫)

shutdown

alter database open/mount/backup

alter database open/mount/backup

改變字符集

none

create database(建立資料庫)

None不能建立資料庫

drop database(刪除資料庫)

none

create spfile

create spfile

alter database archivelog(歸檔日誌)

alter database archivelog

alter database recover(恢復資料庫)

只能完全恢復,不能執行不完全恢復

擁有restricted session(會話限制)許可權

擁有restricted session許可權

可以讓使用者作為sys使用者連線

可以進行一些基本的操作,但不能檢視使用者資料

登入之後使用者是sys

登入之後使用者是public

https://blog.csdn.net/haiross/article/details/25777335