oracle最高帳號sys的密碼認證模式

CONNECT USERNAME/PASSWORD@SERVERNAME AS SYSDBA
connect 是指鏈接到
username是指用戶名
password是指密碼
servername是指服務名
as sysdba是指已數據庫管理員的身份登陸
不知道能不能幫到你。linux

 

 

 

oracle提供的認證模式
 1. 操做系統驗證(匿名登陸 不檢驗用戶名和密碼)
  conn / as sysdba既是操做系統認證
  只能用在本地 由於數據庫軟件安裝在操做系統之上 用戶必須是dba組;
  能直接訪問操做系統了 oracle就不須要限制了.sql

  在類UNIX系統中 基於權限委派的緣由
  對於普通用戶
   添加到oinstall dba組中便可
   若是隻添加dba組也不能夠
   由於oracle安裝目錄基本都是750權限 即便改目錄權限 庫函數權限也沒法獲取 還須要改
  對於root用戶
   由於UNIX權限委派的第一步就是驗證UID是否等於0
   因此即便是添加到oinstall dba組也不能登陸shell

  記住,不要用oracle之外的用戶去操做oracle
  就比如 老闆不能去作前臺同樣 不要違背這些已規劃好的規則.
 2.密碼文件認證
  密碼文件存儲的位置 $ORACLE_HOME/dbs/orapw$ORACLE_SID數據庫

oracle中有兩類特殊的身份SYSDBA和sysoper,當DBA須要對數據庫進行維護管理操做的時候,
必須具備這兩類特殊身份之中的一種.
在數據庫沒有打開的時候,使用數據庫內建的帳號是沒法登錄數據庫的,
可是擁有SYSDBA或是SYSOPER權限的用戶是能夠登錄的。
認證用戶是否擁有兩類特殊權限的方法有兩種:OS認證和口令文件認證。 vim

 


Oracle數據庫究竟使用OS認證仍是口令文件認證來進行管理取決於下面三個因素:
 1.SQLNET.ORA參數文件中的參數SQLNET.AUTHENTICATION_SERVICES設置
 2.PFILE(SPFILE)參數文件中的參數REMOTE_LOGIN_PASSWORDFILE設置
 3.口令文件orapw$SID(Linux) | PWD$SID.ora(Windows) 是否存在windows

Oracle權限認證的基本順序是這樣的:
 先由SQLNET.AUTHENTICATION_SERVICES的設置值來決定是使用OS認證仍是口令文件認證,
 若是使用口令文件認證的話就要看後面兩個條件了:
  若是REMOTE_LOGIN_PASSWORDFILE參數設置爲非NONE,
  並且口令文件存在的話就能正常使用口令文件認證,不然將會失敗。服務器


SQLNET.AUTHENTICATION_SERVICES參數
在SQLNET.ORA(位於$ORACLE_HOME/network/admin目錄中)文件中,須要修改時直接用文本編輯器打開修改就好了,
對於不一樣的操做系統SQLNET.AUTHENTICATION_SERVICES的取值會有些不同,一般咱們會用到下面的一些設置值:
linux下 none  all nts 不設置或BEQ 四種狀況
 啓動監聽 lsnrctl start 用於網絡鏈接 走密碼文件
 使用外部命令將sys的密碼設置成a
  orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=a force=y
linux平臺測試
第一種默認狀況  沒設置或者設置成BEQ
 [oracle@dba admin]$ grep -v '#' sqlnet.ora網絡

  NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)session

 [oracle@dba admin]$
 $ sqlplus sys/a@db10 as sysdba
  能夠登陸
 $ sql / as sysdba
  能夠登陸
 結論: 沒設置或值爲BEQ時 密碼認證和OS認證都啓用oracle

第二種狀況 設置成none
[oracle@dba admin]$ grep -v '#' sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(none)

[oracle@dba admin]$
 
[oracle@dba admin]$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sat Apr 30 04:35:02 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> conn / as sysdba
ERROR:
ORA-01031: 權限不足


SQL> conn sys/a as sysdba
Connected.
SQL>
SQL> conn sys/a@db10 as sysdba
Connected.
SQL>
 結論: (none) OS認證被屏蔽 必須走密碼文件認證

第三種狀況 設置成all
SQL> conn / as sysdba
Connected.

SQL> conn sys/a@db10 as sysdba
ERROR:
ORA-12641: Authentication service failed to initialize


Warning: You are no longer connected to ORACLE.
SQL>

 結論: all 密碼文件認證被屏蔽 只能OS認證
 
第四種狀況 設置nts
[oracle@dba admin]$ grep -v '#' sqlnet.ora

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
SQLNET.AUTHENTICATION_SERVICES=(nts)

[oracle@dba admin]$

SQL> conn / as sysdba
ERROR:
ORA-01031: 權限不足


SQL> conn sys/a as sysdba
Connected.
SQL> conn sys/a@db10 as sysdba
Connected.
SQL>

 結論: nts只能密碼文件認證
 
windows平臺測試

第一種 默認狀況 設置nts
 
SQL> conn / as sysdba
已鏈接。
SQL> alter user sys identified by a;

用戶已更改。

SQL> conn / as sysdba
已鏈接。
SQL> conn sys/a as sysdba
已鏈接。
SQL> conn sys/a@orawin as sysdba
已鏈接。
SQL>
 結論: 設置nts(和linux不一致) 密碼和OS認證都啓用

第二種 設置成none

SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges


SQL> conn sys/a as sysdba
已鏈接。
SQL> conn sys/a@orawin as sysdba
已鏈接。
SQL>
 結論: 設置成none(和linux一致) 只能密碼認證 OS認證被屏蔽

第三種 設置成 all

SQL> conn / as sysdba
ERROR:
ORA-12641: 驗證服務沒法初始化


SQL> conn sys/a as sysdba
ERROR:
ORA-12641: 驗證服務沒法初始化


SQL> conn sys/a@orawin as sysdba
ERROR:
ORA-12641: 驗證服務沒法初始化

 結論: 此參數在windows下 OS和密碼認證都屏蔽了

第四種 不設置

SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges


SQL> conn sys/a as sysdba
已鏈接。
SQL> conn sys/a@orawin as sysdba
已鏈接。
SQL>
 結論:只容許密碼認證 OS認證被屏蔽


第五種 設置成beq
SQL> conn / as sysdba
ERROR:
ORA-01031: insufficient privileges


警告: 您再也不鏈接到 ORACLE。
SQL> conn sys/a as sysdba
已鏈接。
SQL> conn sys/a@orawin as sysdba
已鏈接。
SQL>
 結論:只能使用密碼認證 OS認證被屏蔽

REMOTE_LOGIN_PASSWORDFILE參數
 此係統參數的設置制定了數據庫使用口令文件的方法,此參數能夠設置的值有三個:

 REMOTE_LOGIN_PASSWORDFILE = NONE
  不使用口令文件

 REMOTE_LOGIN_PASSWORDFILE = EXCLUSIVE
  使用口令文件,但只有一個數據庫實例可用使用

 REMOTE_LOGIN_PASSWORDFILE = SHARED
  多個數據庫實例共用一個口令文件,這種設置下是不能增長其餘數據庫用戶做爲特殊權限用戶到口令文件中的。
  
 alter system set  REMOTE_LOGIN_PASSWORDFILE = NONE  scope = spfile;
 
 grant sysdba to scott; 
 
 select * from v$pwfile_users;
 
密碼文件
 存儲sysdba sysoper身份驗證的密碼,固然也能夠將普通用戶提高到這個身份
 sysdba  超級管理員 conn / as sysdba
 sysoper 操做員     conn / as sysoper
 兩個身份的區別
  sysdba 不授權限控制
  sysoper 和sysdba比sysdba缺乏的權限:
    1.不能建庫
    2.不能啓動數據庫到受限會話模式
    3.不能進行熱備份
    4.不能進行數據庫的不徹底恢復
    5.不能查詢dba_數據字典
  其實咱們一般都用sysdba而不用sysoper
 SYS@ora10g> conn / as sysdba
 Connected.
 SYS@ora10g> show user
 USER is "SYS"
 SYS@ora10g
 只要使用 as sysdba登陸 show user永遠是sys
  
 SYS@ora10g> conn / as sysoper
 Connected.
 PUBLIC@ora10g> show user
 USER is "PUBLIC"
 PUBLIC@ora10g>
 只要使用 as sysoper登陸 show user永遠是public
  

修改超級用戶的口令
   1.使用管理員(sys system)用戶登陸 在數據庫內部去修改
 SYS@ora10g> show user
 USER is "SYS"
 SYS@ora10g> alter user sys identified by sys;

 User altered.

 SYS@ora10g> 這樣就把sys的密碼改爲了sys
   2.直接修改口令文件 但口令文件是二進制的 只能用orapwd命令去從新建立
 SYS@ora10g> !orapwd
 Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
 SYS@ora10g> ! orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=1 force=y

 SYS@ora10g> 這樣就把sys密碼設置成了oracle
 受權
 SYS@ora10g> grant sysdba to u1;
 
 entries=<users> 默認的數值是4 也就是能容納多少個用戶
 設置規律
  0-4 能夠容納5個
  5-8 能夠容納9個
  9-12 能夠容納13個
  依此類推...
 
[oracle@shell dbs]$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=1 force=y

 

O7_DICTIONARY_ACCESSIBILITY 參數的做用

 sys是數據庫庫內部的超級用戶 默認鏈接必須使用as sysdba身份
 而這個參數能夠無需使用as sysdba身份而直接使用sys鏈接 意義不大
SQL> conn / as sysdba
Connected.
SQL>
SQL> show parameter o7

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY      boolean  FALSE
SQL>
SQL> alter user sys identified by a;

User altered.

SQL> conn sys/a
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER


Warning: You are no longer connected to ORACLE.
SQL> conn / as sysdba
Connected.
SQL> show parameter o7

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY      boolean  FALSE

SQL> alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;

System altered.

SQL> startup force
ORACLE instance started.

Total System Global Area  285212672 bytes
Fixed Size      1218992 bytes
Variable Size     75499088 bytes
Database Buffers   205520896 bytes
Redo Buffers      2973696 bytes
Database mounted.
Database opened.
SQL> show parameter o7

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY      boolean  TRUE
SQL> conn sys/a
Connected.
SQL> select count(*) from session_roles;

  COUNT(*)
----------
 32

SQL> select count(*) from session_privs;

  COUNT(*)
----------
       161

SQL> conn / as sysdba
Connected.
SQL> select count(*) from session_roles;

  COUNT(*)
----------
  0

SQL> select count(*) from session_privs;

  COUNT(*)
----------
       166

SQL>


各版本之間sys的權限分派

oracle805
svrmgrl
 server manager line 縮寫
 管理底層數據庫的啓動中止
connect internal

sys數據庫的全部者
system 管理者

sqlplus只能作查詢

 

oracle8I

svrmgrl
 server manager line 縮寫
 管理底層數據庫的啓動中止
connect internal

as sysdba 新增 但尚未徹底取代 svrmgrl connect internal
sqlplus 提高到能夠啓庫停庫


oracle9I

as sysdba 徹底取代了 svrmgrl和connect internnal
   存在於數據庫以外 因此沒角色(role)
 
sys/a     數據庫內部的管理員
   有角色
 
 

 

 

***************************************************************************

oinstall和dba組中的用戶,登陸服務器本機,直接經過OS的認證,直接登陸數據庫 
oracle用戶是用來安裝oracle數據庫軟件,哪一個用戶裝的,用哪一個用戶操做

sqlplus user/pass@IP:port/service_names;---走密碼文件
sqlplus sys/pass@IP:port/service_names  as sysdba
sys用戶經過as sysdba登陸,直接找密碼文件中的密碼,判斷跟輸入的密碼是否一致
as sysoper 直接找密碼文件中的密碼,判斷跟輸入的密碼是否一致
普通用戶登陸,拿着密碼到數據字典中獲取密碼,只有數據庫打開的狀況下才能執行

as sysdba|sysoper(描述符) 數據庫尚未啓動,若是想要啓動數據庫,須要驗證身份
若是把as sysdba的密碼也放在數據字典裏,那麼數據庫關閉的時候,不能訪問
數據字典,致使沒人可以啓動數據庫


as sysdba:超級管理員身份的切換,切換到內部sys
as sysoper:操做員,切換到內部public

as sysdba鏈接數據庫,顯示的用戶都是sys,sys用戶是不能直接登陸的,必須是以as sysdba登陸
as sysdba的鏈接符進行切換,顯示的用戶是public

as sysoper鏈接數據庫,顯示的用戶都是public


密碼文件
$ORACLE_HOME/dba/orapw$ORACLE_SID

SYS@ora10g> desc dba_users;
 Name             Null? Type
 ----------------------------------------------------- -------- ------------------------------------
 USERNAME            NOT NULL VARCHAR2(30)
 USER_ID            NOT NULL NUMBER
 PASSWORD       VARCHAR2(30)
 ACCOUNT_STATUS            NOT NULL VARCHAR2(32)
 LOCK_DATE       DATE
 EXPIRY_DATE       DATE
 DEFAULT_TABLESPACE           NOT NULL VARCHAR2(30)
 TEMPORARY_TABLESPACE           NOT NULL VARCHAR2(30)
 CREATED            NOT NULL DATE
 PROFILE            NOT NULL VARCHAR2(30)
 INITIAL_RSRC_CONSUMER_GROUP     VARCHAR2(30)
 EXTERNAL_NAME       VARCHAR2(4000)

SYS@ora10g> select username,password from dba_users where username='SCOTT';

USERNAME         PASSWORD
------------------------------ ------------------------------
SCOTT          4DD35D67F0372586

conn sys/pass 默認關閉,不讓鏈接

sqlplus / as sysdba;禁用
vim $ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=(beq);一個值能夠不加(),通常寫大寫

beq none  all nts
因平臺的不一樣,效果也不一樣

beq:默認
sqlplus / as sysdba:容許登陸
sqlplus sys/oracle@IP:port/service_name as sysdba:容許登陸

none:
sqlplus / as sysdba;拒絕
sqlplus sys/oracle@IP:port/service_name as sysdba;容許登陸

all:
sqlplus / as sysdba;容許登陸
sqlplus sys/oracle@IP:port/service_name as sysdba;拒絕

nts:
sqlplus / as sysdba;容許登陸
sqlplus sys/oracle@IP:port/service_name as sysdba;拒絕


SYS@ora10g> show parameter remote_login_passwordfile

NAME         TYPE  VALUE
------------------------------------ ----------- ------------------------------
remote_login_passwordfile      string  EXCLUSIVE


$ORACLE_HOME/dba/orapw$ORACLE_SID密碼文件不存在了:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=abc force=y
密碼文件的改變不影響數據字典中的密碼,alter修改用戶的密碼,密碼文件中的密碼也改變

實驗一:
第一步:
sqlplus /nolog
conn / as sysdba
seleect username,password from dba_users where username='SYS';

第二步:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=abc force=y;--修改密碼文件中的密碼

第三步:
sqlplus /nolog
conn / as sysdba
seleect username,password from dba_users where username='SYS';

結果:第一步和第三步的結果集同樣,改變密碼文件中的密碼,數據字典中的密碼不改變


實驗二:
第一步:
strings  $ORACLE_HOME/dbs/orapw$ORACLE_SID

第二步:
sqlplus /nolog
conn / as sysdba
seleect username,password from dba_users where username='SYS';
alter user sys identified by sys123;--修改數據字典中的密碼
seleect username,password from dba_users where username='SYS';

第三步:
strings  $ORACLE_HOME/dbs/orapw$ORACLE_SID

結果:第一步和第三步的結果集不同,改數據字典中的密碼,密碼文件中的密碼也隨之改變

摘自:http://blog.csdn.net/lsz_qh/article/details/7349110

相關文章
相關標籤/搜索