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

來源:互聯網
上載者:User

標籤:

CONNECT USERNAME/[email protected] AS SYSDBA
connect 是指串連到
username是指使用者名稱
password是指密碼
servername是指服務名
as sysdba是指已資料庫管理員的身份登入
不知道能不能幫到你。

 

 

 

oracle提供的認證模式
 1. 作業系統驗證(匿名登入 不檢驗使用者名稱和密碼)
  conn / as sysdba既是作業系統認證
  只能用在本地 因為資料庫軟體安裝在作業系統之上 使用者必須是dba組;
  能直接存取作業系統了 oracle就不需要限制了.

  在類UNIX系統中 基於許可權委派的原因
  對於普通使用者
   添加到oinstall dba組中即可
   如果只添加dba組也不可以
   因為oracle安裝目錄基本都是750許可權 即使改目錄許可權 庫函數許可權也無法擷取 還需要改
  對於root使用者
   因為UNIX許可權委派的第一步就是驗證UID是否等於0
   所以即使是添加到oinstall dba組也不能登入

  記住,不要用oracle以外的使用者去操作oracle
  就好比 老闆不能去做前台一樣 不要違背這些已規劃好的規則.
 2.密碼檔案認證
  密碼檔案儲存體的位置 $ORACLE_HOME/dbs/orapw$ORACLE_SID

oracle中有兩類特殊的身份SYSDBA和sysoper,當DBA需要對資料庫進行維護管理操作的時候,
必須具有這兩類特殊身份之中的一種.
在資料庫沒有開啟的時候,使用資料庫內建的帳號是無法登陸資料庫的,
但是擁有SYSDBA或是SYSOPER許可權的使用者是可以登陸的。
認證使用者是否擁有兩類特殊許可權的方法有兩種:OS認證和口令檔案認證。 

 


Oracle資料庫究竟使用OS認證還是口令檔案認證來進行管理取決於下面三個因素:
 1.SQLNET.ORA參數檔案中的參數SQLNET.AUTHENTICATION_SERVICES設定
 2.PFILE(SPFILE)參數檔案中的參數REMOTE_LOGIN_PASSWORDFILE設定
 3.口令檔案orapw$SID(Linux) | PWD$SID.ora(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
 [[email protected] admin]$ grep -v ‘#‘ sqlnet.ora

  NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

 [[email protected] admin]$
 $ sqlplus sys/[email protected] as sysdba
  可以登入
 $ sql / as sysdba
  可以登入
 結論: 沒設定或值為BEQ時 密碼認證和OS認證都啟用

第二種情況 設定成none
[[email protected] admin]$ grep -v ‘#‘ sqlnet.ora

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

[[email protected] admin]$
 
[[email protected] 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/[email protected] as sysdba
Connected.
SQL>
 結論: (none) OS認證被屏蔽 必須走密碼檔案認證

第三種情況 設定成all
SQL> conn / as sysdba
Connected.

SQL> conn sys/[email protected] as sysdba
ERROR:
ORA-12641: Authentication service failed to initialize


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

 結論: all 密碼檔案認證被屏蔽 只能OS認證
 
第四種情況 設定nts
[[email protected] admin]$ grep -v ‘#‘ sqlnet.ora

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

[[email protected] admin]$

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


SQL> conn sys/a as sysdba
Connected.
SQL> conn sys/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] 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/[email protected] as sysdba
已串連。
SQL>
 結論:只允許密碼認證 OS認證被屏蔽


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


警告: 您不再串連到 ORACLE。
SQL> conn sys/a as sysdba
已串連。
SQL> conn sys/[email protected] 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
 [email protected]> conn / as sysdba
 Connected.
 [email protected]> show user
 USER is "SYS"
 [email protected]> 
 只要使用 as sysdba登入 show user永遠是sys
  
 [email protected]> conn / as sysoper
 Connected.
 [email protected]> show user
 USER is "PUBLIC"
 [email protected]>
 只要使用 as sysoper登入 show user永遠是public
  

修改超級使用者的口令
   1.使用管理員(sys system)使用者登入 在資料庫內部去修改
 [email protected]> show user
 USER is "SYS"
 [email protected]> alter user sys identified by sys;

 User altered.

 [email protected]> 這樣就把sys的密碼改成了sys
   2.直接修改口令檔案 但口令檔案是二進位的 只能用orapwd命令去重新建立
 [email protected]> !orapwd
 Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
 [email protected]> ! orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=oracle entries=1 force=y

 [email protected]> 這樣就把sys密碼設定成了oracle
 授權
 [email protected]> grant sysdba to u1;
 
 entries=<users> 預設的數值是4 也就是能容納多少個使用者
 設定規律
  0-4 可以容納5個
  5-8 可以容納9個
  9-12 可以容納13個
  依此類推...
 
[[email protected] 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/[email protected]:port/service_names;---走密碼檔案
sqlplus sys/[email protected]: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

[email protected]> 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)

[email protected]> 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/[email protected]:port/service_name as sysdba:允許登入

none:
sqlplus / as sysdba;拒絕
sqlplus sys/[email protected]:port/service_name as sysdba;允許登入

all:
sqlplus / as sysdba;允許登入
sqlplus sys/[email protected]:port/service_name as sysdba;拒絕

nts:
sqlplus / as sysdba;允許登入
sqlplus sys/[email protected]:port/service_name as sysdba;拒絕


[email protected]> 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

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.