標籤:
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的密碼認證模式