知道了這些普遍的“毛病”,我們怎么做呢?下面是我的一些建議:
(1)ORACLE DBA (數據庫管理員)的規范
·SUN Solaris操作系統下ORACLE用戶密碼應嚴格保密,絕不該把密碼設成
ORACLE;并指定專門的數據庫管理員定期修改。
·ORACLE初始化建立的SYS和SYSTEM系統管理員用戶密碼應由原來MANAGER改成別的不易被記憶的字符串。
·ORACLE WEB SERVER的管理端口具備DBA瀏覽數據庫的能力,因此其管理者
ADMIN的密碼也應保密,不該把密碼設成MANAGER;并指定專門的數據庫管理員定
期修改。
·ORACLE DBA最好在SUN SPARC服務器控制臺上用窗口式界面實現管理。前提
是ORACLE用戶啟動服務器,然后在窗口式命令行下輸入SVRMGRM,即啟動了ORACLE SERVER MANAGER菜單式管理;用SYSDBA身份登錄后,就可做數據庫系統維護工作了
(2)SQL*PLUS編程用戶的規范
·存儲結構的規范
考慮到用SQL*PLUS編程可實現各行各業、各公司、各部門多種多樣的應用需求,我們的SQL*PLUS編程用戶也應該朝這個方向規范:不同種類的應用必須有不同的用戶;不同種類的應用必須有不同的存儲位置,包括物理文件、缺省表空間、臨時表空間的創建和規劃:當準備編寫某一較大規模(從ORACLE數據量和面向用戶量考慮)應用程序時,首先應該創建一個邏輯的存儲位置-表空間,同時定義物理文件的存放路徑和所占硬盤的大小。
、、物理文件缺省的存放路徑在/oracle_home/dbs下,在命令行下用UNIX指令df -k 可查看硬盤資源分區的使用情況。如果oracle_home使用率達90‰以上,而且有一個或多個較為空閑的硬盤資源分區可以利用,我們最好把物理文件缺省的存放路徑改到較為空閑的硬盤資源分區路徑下。在此路徑下我們可以這樣規劃資源物理文件的存儲:
xxx表空間
xxx行業/ xxx公司/ xxx 部門/ xxx 服務.dbf
DEMO表空間
default_datafile_home1/col /elec/sys4/demo1.dbf
default_datafile_home1/col /elec/sys4/demo2.dbf
公司系統四部摹擬演示系統物理文件
HUMAN表空間
default_datafile_home1/col/elec/human/human.dbf
公司人事部人事管理系統物理文件
BOOK表空間
default_datafile_home1/col/elec/book/book.dbf
公司資料室圖書管理系統物理文件
QUESTION表空間
default_datafile_home1/col/elec/client/question.dbf
公司客戶服務部問題庫系統物理文件
PC表空間
default_datafile_home1/col/chaoxun/client/pc.dbf
公司PC機售后服務系統物理文件
……表空間
default_datafile_home2/……………………………
等等
說明:其中default_datafile_home1指oracle_home/dbs;
default_datafile_home2指較為空閑的硬盤資源分區路徑。
、、物理文件的大小根據應用系統的數據量、數據對象、程序包的多少來定。一般用于摹擬演示的小系統,表空間初始的物理文件為2M即能滿足要求,如果信息量滿,還可以增加物理文件,擴充表空間(每次擴充大小也可暫定為2M);一般實際運行的應用系統可適當增加表空間初始的物理文件大小,但也不要一次分配太大(因為不易回收空間,卻易擴充空間),這也需要根據具體情況具體分析:信息量大、需長時間保存的應用在條件允許情況下,表空間可以大到幾百M甚至上G;信息量小、短期經常刷新的應用,表空間可以控制在2M以下。
、、表空間的名稱應該采用同系統應用相似的英文字符或字符縮寫,表空間所對應的一個或多個物理文件名也應有相關性。不同用戶所處的缺省表空間不同,存儲的信息就不能互相訪問。這比把所有用戶信息都儲存在系統表空間,安全性大大提高了。如果用ORACLE WEB SERVER管理端口創建的用戶,其缺省和臨時表空間一定是系統表空間,DBA切記要改變用戶的缺省表空間。臨時表空間存放臨時數據段,處理一些排序、合并等中間操作,根據實際應用的需求可以把它們放在專門創建的表空間里;如果系統表空間大,也可以把它們放在系統表空間。用戶創建的數據索引最好和數據文件分開存放在不同表空間,以減少數據爭用和提高響應速度。
·密碼和用戶名的規范
有相當數量的ORACLE用戶名和密碼一致,這是個很不安全的因素。我們建議ORACLE用戶名和密碼一定不要一樣,密碼最好在五,六位字符以上。不同用戶間不應該使用相同的密碼。用戶名的定義可根據實際應用的英文名來設,而依據編程人員的姓名定義的用戶名實際上不規范,可在日后的工作中結合上述有關存儲結構規范的說明逐步改進。
(3)特殊要求用戶的規范
在ORACLE數據庫使用過程中,還會遇到一些有特殊要求的用戶:非編程人員需要對某個表有查詢、增加、刪除、修改的權利。DBA應創建一個這樣的用戶,先確定用戶名和密碼,再規定相關應用所在缺省表空間(包含某個表)和臨時表空間,最后TABLE屬主給其授權:賦予CONNECT角色SELECT、INSERT、DELETE、UPDATE ON THE TABLE的對象級權限,這可根據實際需求自由取舍。
舉例:●給新用戶授于對象級權限(命令行方式):
假設新用戶NEW2需要有查詢、刪除、修改DCD用戶的表EMP。
%svrmgrl
SVRMGR>connect internal; 以系統管理員登錄
SVRMGR>create user new2 identified by new2345 default tablespace app;
SVRMGR>connect dcd/dcdpwd; 以dcd用戶登錄
SVRMGR>grant connect to new2;
SVRMGR>grant select on emp to new2;
SVRMGR>grant delete on emp to new2;
SVRMGR>grant update on emp to new2;
說了這么多關于用戶的問題,那么接下來我們就詳細得說一下關于密碼文件的使用以及維護--在Oracle數據庫系統中,用戶如果要以特權用戶身份(INTERNAL/SYSDBA/SYSOPER)登錄Oracle數據庫可以有兩種身份驗證的方法:即使用與操作系統集成的身份驗證或使用Oracle數據庫的密碼文件進行身份驗證。因此,管理好密碼文件,對于控制授權用戶從遠端或本機登錄Oracle數據庫系統,執行數據庫管理工作,具有重要的意義。
Oracle數據庫的密碼文件存放有超級用戶INTERNAL/SYS的口令及其他特權用戶的用戶名/口令,它一般存放在ORACLE_HOME\DATABASE目錄下。
·密碼文件的創建:
在使用Oracle Instance Manager創建一數據庫實例的時侯,在ORACLE_HOME\DATABASE目錄下還自動創建了一個與之對應的密碼文件,文件名為PWDSID.ORA,其中SID代表相應的Oracle數據庫系統標識符。此密碼文件是進行初始數據庫管理工作的基礎。在此之后,管理員也可以根據需要,使用工具ORAPWD.EXE手工創建密碼文件,命令格式如下:
C:\ >ORAPWD FILE=< FILENAME > PASSWORD =< PASSWORD > ENTRIES=< MAX_USERS >
各命令參數的含義為:
FILENAME:密碼文件名;
PASSWORD:設置INTERNAL/SYS帳號的口令;
MAX_USERS:密碼文件中可以存放的最大用戶數,對應于允許以SYSDBA/SYSOPER權限登錄數據庫的最大用戶數。由于在以后的維護中,若用戶數超出了此限制,則需要重建密碼文件,所以此參數可以根據需要設置得大一些。
有了密碼文件之后,需要設置初始化參數REMOTE_LOGIN_PASSWORDFILE來控制密碼文件的使用狀態。
·設置初始化參數REMOTE_LOGIN_PASSWORDFILE:
在Oracle數據庫實例的初始化參數文件中,此參數控制著密碼文件的使用及其狀態。它可以有以下幾個選項:
NONE:指示Oracle系統不使用密碼文件,特權用戶的登錄通過操作系統進行身份驗證;
EXCLUSIVE:指示只有一個數據庫實例可以使用此密碼文件。只有在此設置下的密碼文件可以包含有除INTERNAL/SYS以外的用戶信息,即允許將系統權限SYSOPER/SYSDBA授予除INTERNAL/SYS以外的其他用戶。
SHARED:指示可有多個數據庫實例可以使用此密碼文件。在此設置下只有INTERNAL/SYS帳號能被密碼文件識別,即使文件中存有其他用戶的信息,也不允許他們以SYSOPER/SYSDBA的權限登錄。此設置為缺省值。
在REMOTE_LOGIN_PASSWORDFILE參數設置為EXCLUSIVE、SHARED情況下,Oracle系統搜索密碼文件的次序為:在系統注冊庫中查找ORA_SID_PWFILE參數值(它為密碼文件的全路徑名);若未找到,則查找ORA_PWFILE參數值;若仍未找到,則使用缺省值ORACLE_HOME\DATABASE\PWDSID.ORA;其中的SID代表相應的Oracle數據庫系統標識符。
·向密碼文件中增加、刪除用戶:
當初始化參數REMOTE_LOGIN_PASSWORDFILE設置為EXCLUSIVE時,系統允許除INTERNAL/SYS以外的其他用戶以管理員身份從遠端或本機登錄到Oracle數據庫系統,執行數據庫管理工作;這些用戶名必須存在于密碼文件中,系統才能識別他們。由于不管是在創建數據庫實例時自動創建的密碼文件,還是使用工具ORAPWD.EXE手工創建的密碼文件,都只包含INTERNAL/SYS用戶的信息;為此,在實際操作中,可能需要向密碼文件添加或刪除其他用戶帳號。
由于僅被授予SYSOPER/SYSDBA系統權限的用戶才存在于密碼文件中,所以當向某一用戶授予或收回SYSOPER/SYSDBA系統權限時,他們的帳號也將相應地被加入到密碼文件或從密碼文件中刪除。由此,向密碼文件中增加或刪除某一用戶,實際上也就是對某一用戶授予或收回SYSOPER/SYSDBA系統權限。
要進行此項授權操作,需使用SYSDBA權限(或INTERNAL帳號)連入數據庫,且初始化參數REMOTE_LOGIN_PASSWORDFILE的設置必須為EXCLUSIVE。具體操作步驟如下:
創建相應的密碼文件;
設置初始化參數REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE;
使用SYSDBA權限登錄: CONNECT SYS/internal_user_passsword AS SYSDBA;
啟動數據庫實例并打開數據庫;
創建相應用戶帳號,對其授權(包括SYSOPER和SYSDBA): 授予權限:GRANT SYSDBA TO user_name;
收回權限:REVOKE SYSDBA FROM user_name;
現在這些用戶可以以管理員身份登錄數據庫系統了;
·使用密碼文件登錄:
有了密碼文件后,用戶就可以使用密碼文件以SYSOPER/SYSDBA權限登錄Oracle數據庫實例了,注意初始化參數REMOTE_LOGIN_PASSWORDFILE應設置為EXCLUSIVE或SHARED。任何用戶以SYSOPER/SYSDBA的權限登錄后,將位于SYS用戶的Schema之下,以下為兩個登錄的例子:
1. 以管理員身份登錄:
假設用戶scott已被授予SYSDBA權限,則他可以使用以下命令登錄:
CONNECT scott/tiger AS SYSDBA
2. 以INTERNAL身份登錄:
CONNECT INTERNAL/INTERNAL_PASSWORD
·密碼文件的維護:
1. 查看密碼文件中的成員:
可以通過查詢視圖V$PWFILE_USERS來獲取擁有SYSOPER/SYSDBA系統權限的用戶的信息,表中SYSOPER/SYSDBA列的取值TRUE/FALSE表示此用戶是否擁有相應的權限。這些用戶也就是相應地存在于密碼文件中的成員。
2. 擴展密碼文件的用戶數量:
當向密碼文件添加的帳號數目超過創建密碼文件時所定的限制(即ORAPWD.EXE工具的MAX_USERS參數)時,為擴展密碼文件的用戶數限制,需重建密碼文件,具體步驟如下:
a) 查詢視圖V$PWFILE_USERS,記錄下擁有SYSOPER/SYSDBA系統權限的用戶信息;
關閉數據庫;
c) 刪除密碼文件;
d) 用ORAPWD.EXE新建一密碼文件;
e) 將步驟a中獲取的用戶添加到密碼文件中。
3. 修改密碼文件的狀態:
密碼文件的狀態信息存放于此文件中,當它被創建時,它的缺省狀態為SHARED?梢酝ㄟ^改變初始化參數REMOTE_LOGIN_PASSWORDFILE的設置改變密碼文件的狀態。當啟動數據庫事例時,Oracle系統從初始化參數文件中讀取REMOTE_LOGIN_PASSWORDFILE參數的設置;當加載數據庫時,系統將此參數與口令文件的狀態進行比較,如果不同,則更新密碼文件的狀態。若計劃允許從多臺客戶機上啟動數據庫實例,由于各客戶機上必須有初始化參數文件,所以應確保各客戶機上的初始化參數文件的一致性,以避免意外地改變了密碼文件的狀態,造成數據庫登陸的失敗。
4. 修改密碼文件的存儲位置:
密碼文件的存放位置可以根據需要進行移動,但作此修改后,應相應修改系統注冊庫有關指向密碼文件存放位置的參數或環境變量的設置。
5. 刪除密碼文件:
在刪除密碼文件前,應確保當前運行的各數據庫實例的初始化參數REMOTE_LOGIN_PASSWORDFILE皆設置為NONE。在刪除密碼文件后,若想要以管理員身份連入數據庫的話,則必須使用操作系統驗證的方法進行登錄。
但是管理員都覺得乏味,因為在管理員中流行一種很簡單的加密辦法--就是經常,很頻繁地修改自己的密碼?墒,每次修改都跟打一次仗似的--因為更新程序并不是每個人都愿意做的事情。
那么有沒有什么簡單點的辦法呢?請往下看:
模型:Oracle7.3;開發工具:Develope2000。收費系統(在數據庫中的名稱是SFYY),其Client端分散在市區的數個營業點,通過城域網與主機(小型 機)相連。
過程:
·在收費小型機Oracle系統的system用戶(DBA)下,創建新用戶test;
create user test
identified by carton
default tablespace dataspace1
quota 100K
·對test用戶授以權限;
grant create session to test;
grant resource to test;
·在test用戶下建立一個存儲函數mmtranslate,它其實是一個加密程序。下面是一個簡 單的例子。
function mmtranslate(m varchar2)
return varchar2
as
i number(2);
kk varchar2(10);
begin
kk:=′′;
i:=1;
loop
if i<=length(m) then
if instr(′1234567890′,substr(m,i,1),1,1)>0 then
kk:=kk||chr(100+to_number(substr(m,i,1)));
elseif instr(‘wxyz‘,substr(m,i,1),1,1)>0 then
kk:=kk||chr(-8+ascii(substr(m,i,1)));
else
kk:=kk||chr(4+ascii(substr(m,i,1)));
end if;
else
exit;
end if;
i:=i+1;
end loop;
return kk;
exception
when others then
return ′-1′;
end;
·在test用戶下建表mmtest并插入記錄:
create table mmtest
(usnamevarchar2(6),------用戶名稱
mimavarchar2(6)------加密前的密碼);
insert into mmtest values( ‘sfyy‘,‘eds2‘);
commit;
·執行以下語句
SQL>select mmtranslate(‘eds2‘) from dual;
MMTRANSLATE(‘EDS2‘)
----------------------------------------
ihwf
利用DBA權限更改sfyy的密碼為上面語句的執行結果:
alter user sffy
identified by ihwf; ;
·修改應用程序,對于開發環境是Develope2000的程序來說,主要是修改主程序的on-lo gon觸發器:
declare
mm varchar2(6);
begin
logon(‘test‘,‘carton‘);
select mima into mm from mmtest where usname=‘sfyy‘;
mm:=mmtranslate(mm);
logout;
logon(‘sfyy‘,mm);
end;
然后再利用觸發器WHEN-NEW-FROM-INSTANCE執行Callfrom或Newform等 命令,進入業務處理程序。這個主程序應當僅僅由管理員來掌握,編譯之后將執行文件下發 到各收費點的Clien端。
文章來源于領測軟件測試網 http://www.kjueaiud.com/