Oracle用戶,權限,角色以及登錄管理 scoot 授權


 

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 plain copy 在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 plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. SQL> create user strong identified by strong;  
  2. 用戶已創建。  
  3. SQL> conn strong/strong@magick 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 plain copy 在CODE上查看代碼片 派生到我的代碼片
  1. sys@WENCHAOD> 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. sys@WENCHAOD>   
解釋:

 

dba是Oracle里的一種對象,Role 和User一樣,是實實在在存在在Oracle里的物理對象,而sysdba是指的一種概念上的操作對象,在Oracle數據里並不存在。 

所以說這兩個概念是完全不同的。dba是一種role對應的是對Oracle實例里對象的操作權限的集合,而sysdba是概念上的role是一種登錄認證時的身份標識而已。 

[html]  view plain copy 在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/sys@ip: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 plain copy 在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/password@orcl
    通過網絡連接,這是需要數據庫服務器的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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM