1、區分dba,sysdba ,sysoper三者差別:
dba:隻是一個角色。這個角色有個各種權限。
sysdba:這個難于了解,但是我可以把它了解成 擁有特定權限的一個身份。
當我們執行這樣一句話:conn scott/liu123 as sysdba.這時,scott使用者以sysdba的身份登入資料庫。非常值得注意的是,這時的使用者是SYS。 我們可以執行 show user 來驗證。其輸出結果為 user is "SYS"。
sysoper:這也是一個擁有特定權限的一個身份,scott使用者以sysoper的身份登入資料這時,使用者是PUBLIC。 我們可以執行 show user 來驗證。其輸出結果為 user is "PUBLIC"。
總結:
sysdba擁有最高的系統權限,登陸後是 sys
sysoper主要用來啟動、關閉資料庫,但是不能查詢資料字典表。(關于集體測試參照:http://blog.csdn.net/changyanmanman/article/details/7354353)
sysoper 登陸後使用者是 public,
sysdba和sysoper屬于system privilege,也稱為administrative privilege,擁有例如資料庫開啟關閉之類一些系統管理級别的權限sysdba和sysoper具體的權限可以看下表:
系統權限
sysdba
sysoper
差別
Startup(啟動資料庫)
startup
Shutdown(關閉資料庫)
shutdown
alter database open/mount/backup
改變字元集
none
create database(建立資料庫)
None不能建立資料庫
drop database(删除資料庫)
create spfile
alter database archivelog(歸檔日志)
alter database archivelog
alter database recover(恢複資料庫)
隻能完全恢複,不能執行不完全恢複
擁有restricted session(會話限制)權限
擁有restricted session權限
可以讓使用者作為sys使用者連接配接
可以進行一些基本的操作,但不能檢視使用者資料
登入之後使用者是sys
登入之後使用者是public
SYSDBA和SYSOPER系統權限允許我們在資料庫打開之前以這兩種身份去通路執行個體。
DBA 角色并未包含SYSDBA,SYSOPER這兩個系統權限。他們是一類特殊的系統管理權限,允許管理者以這兩種身份對資料庫進行特殊的管理工作。
還有就是,不要輕易将SYSDBA,SYSOPER這兩種系統權限授權給資料庫的普通使用者。也不要輕易将DBA角色賦給普通使用者。在對資料庫進行普通操作的時候,也不要以SYSDBA,SYSOPER登入。
2、使用者與身份的關系:
下面舉個例子:在scott使用者下面建立一個測試表:
執行語句:create table admin_test(name varchar2(10)); 此時的使用者方案是SCOTT。
再執行conn scott/liu123 as sysdba. —— 此時的方案是SYS
select * from admin_test;
這時會報錯:ORA-00942: table or view does not exist.
這就說明,同一個使用者在兩個不同的方案中建立的對象,是不一樣的,也不能再同個這個使用者在别的方案中通路他。
3、設定REMOTE_LOGIN_PASSWORDFILE參數:
除了設定password fiel之外,給這個remote_login_passwordfile參數也是必須的,這個參數有如下值:
NONE:若給這個參數設定了這個值,那就像是password file檔案不存在一樣,這樣沒有連接配接特權的使用者也可以進行不安全的連接配接。
EXCLUSIVE: 預設就是這個值,這種排他式的password 檔案在一個資料庫中隻能允許一個執行個體,用這個模式時,可以運作使用者添加,修改,删除一個使用者。甚至你可以修改SYS使用者的密碼:ALTER USER SYS SET ....。
SHARED:這樣的一個password file可以允許一個系統上有多個資料庫,也可以允許一個資料庫對應多個執行個體(rac)。這種模式的密碼檔案(password file )不能被修改,這就意味着你不能添加删除任何使用者,即使你擁有sysdba權限也不行,如果你想添加删除使用者,隻能是先把這個參數的模式改為EXCLUSIVE,然後修改後再改為SHARED.然後再共享這個檔案。
最後,如果這個參數被丢失了,那就和等于NONE是一樣的。
如何設建立password file?
可以用平orapwd 指令建立此檔案:
C:/>orapwd
Usage: orapwd file=<fname> password=<password> entries=<users> force=<y/n>
where
file - name of password file (mand),
password - password for SYS (mand),
entries - maximum number of distinct DBA and force - whether to overwrit
OPERs (opt),
There are no spaces around the equal-to (=) character.
C:/>
File參數:密碼檔案名稱
Password參數:sys使用者的密碼
Entries參數:為其他特許的Oracle使用者帳戶保留的條目數量
remote_login_passwordfile參數在資料庫的哪裡呢?怎麼設定它呢?來,咱們慢慢來:
首先這個remote_login_passwordfile參數在init.ora初始化檔案中,其具體目錄為$ORACLE_HOME/dbs/init.ora. 用vi編輯器加上remote_login_passwordfile=EXCLUSIVE這句。
行了,可以在sqlplus中檢視了:
SQL> show parameter remote_login_passwordfile
NAME TYPE VALUE
------------------------------------ ----------- -----------
remote_login_passwordfile string EXCLUSIVE
SQL>
EXCLUSIVE值:該參數說明隻有一個資料庫可以使用這個密碼檔案。在這種模式下,密碼檔案可以包含用于多個特許的Oracle賬戶的密碼。這是推薦的操作模式,特别是在運作RMAN時。如果希望将RMAN與來自于遠端用戶端的資料庫連接配接,則必須使用該參數設定。
需要注意的是:這個參數不是動态參數。需要在資料庫加載到MOUNT狀态下修改,另外改變以後需要重新啟動資料庫,參數的設定才能夠生效。
如何添加使用者到password file中:
當你給一個使用者賦予了SYSDBA或SYSOPER權限之後,這個使用者的名字和權力的資訊就被加入到了password file中,注意此時的模式必須是EXCLUSIVE的,如果是别的就會報錯。
當一個使用者的SYSDBA或SYSOPER權限被收回了,那就把相應的資訊從password file中删除。
這兩種權限是不能授權給某個角色的,因為角色必須是資料庫啟動後才能用,但是這兩權限應該是作業系統角色可用的。資料庫未啟動之前就可以授權給某個使用者。
下面是練習者自己加一個使用者:
create user liu identified by liu555; ——成功建立一個新的使用者。
給liu使用者賦權sysdba: grant sysdba to liu 。
好了出問題了:ORA-01994: GRANT failed: password file missing or disabled.
ymptoms of The Error:
-------------------------
In unix system whenever you tried to grant sysdba privilege to a user it returns with error.
ORA-01994: GRANT failed: password file missing or disabled.
Cause of The Problem:
------------------------
The oracle software owner is not the owner of the passwordfile.
Solutions of The Problem:
----------------------------
1)Log on to Unix box as the same user who owns the file $ORACLE_HOME and create the password file as follows.
$orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=password entries=4 force=y
(注意檔案名:應該為orapw$ORACLE_SID,否則無法識别。我就犯了這個錯誤)
2)Now grant sysdba privilege to the users that you need. Check V$PWFILE_USERS about the entry.
SQL>GRANT SYSDBA to SYSTEM; ——這是原來的。
我的是:grant sysdba to liu。 ——授權成功。
Check V$PWFILE_USERS about the entry:
用 select * from v$PWFILE_USERS.檢視。
3)Check the owner of $ORACLE_HOME/dbs/orapw$ORACLE_SID
This would typically,
SQL> !ls -l $ORACLE_HOME/dbs/orapw$ORACLE_SID
-rw-r----- 1 oracle oinstall 1536 Apr 23 16:31 /oracle/app/oracle/product/10.2.0/db_1/dbs/orapwdata1
4)If it is not to dba then change the ownership by
$chown oracle:dba $ORACLE_HOME/dbs/orapw$ORACLE_SID
Also change permission by,
$chmod 4640 $ORACLE_HOME/dbs/orapw$ORACLE_SID
Related Documents: