国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

將 Oracle 內(nèi)置的安全特性用于 PHP

2024-08-29 13:32:41
字體:
供稿:網(wǎng)友

商業(yè)源碼熱門下載www.html.org.cn

當(dāng)今大多數(shù) web 應(yīng)用程序都需要至少采用某種基本的安全策略。例如,提供用口令保護的內(nèi)容的網(wǎng)站、僅具有管理員后端的網(wǎng)站、網(wǎng)志和個人雜志、電子商務(wù)網(wǎng)站、企業(yè)內(nèi)聯(lián)網(wǎng),等等。

構(gòu)建這些類型的 web 應(yīng)用程序最常用的設(shè)計方法是將安全策略整合到 web 應(yīng)用程序的業(yè)務(wù)邏輯中,即由應(yīng)用程序決定某個用戶是否有權(quán)訪問數(shù)據(jù)庫中的某個數(shù)據(jù)。在這種情形下,數(shù)據(jù)庫的角色僅為存儲數(shù)據(jù)和依請求提供數(shù)據(jù)。換句話說,如果 web 應(yīng)用程序命令數(shù)據(jù)庫提供特定信息,則數(shù)據(jù)庫會直接執(zhí)行該命令而不檢查用戶的權(quán)限。

在該文中,您將學(xué)習(xí)如何利用 oracle 內(nèi)置的安全特性在數(shù)據(jù)庫級執(zhí)行應(yīng)用程序安全規(guī)則,以提高應(yīng)用程序的整體安全性。作為附帶的好處,直接在數(shù)據(jù)庫中實現(xiàn)數(shù)據(jù)訪問安全不但有助于提高應(yīng)用程的安全性,而且有助于降低復(fù)雜性。

對數(shù)據(jù)庫端安全性的需求

從 web 應(yīng)用程序控制數(shù)據(jù)訪問會怎么樣?大多數(shù)情況下沒有問題;這是個不錯的解決方案,尤其是在涉及的數(shù)據(jù)為非任務(wù)關(guān)鍵或絕密的時候。許多書和在線資源中都用到了該方法。實際上,有本很受歡迎的 php/mysql 書明確反對每個應(yīng)用程序創(chuàng)建一個以上的數(shù)據(jù)庫用戶帳戶,這是因為“額外的用戶或復(fù)雜的權(quán)限會因某個操作在繼續(xù)前要檢查更多的信息而降低 mysql 的執(zhí)行速度”。確實如此;但是,在放棄將安全性整合到數(shù)據(jù)庫邏輯中的想法前可能要考慮幾件事情。我們來看以下示例。

假設(shè)創(chuàng)建一個內(nèi)容管理系統(tǒng) (cms)。其中使用數(shù)據(jù)庫來存儲網(wǎng)站上發(fā)布的內(nèi)容。大部分?jǐn)?shù)據(jù)是公開的,允許匿名 web 用戶讀取;但只允許編輯更改數(shù)據(jù)。使用單一數(shù)據(jù)庫帳戶訪問和修改數(shù)據(jù)庫中的記錄,并通過用口令保護僅管理員可以訪問的頁面的訪問權(quán)限用 php 代碼控制安全性。

如果 web 應(yīng)用程序的公共端遭受了一個諸如公共搜索表單(即編碼不夠嚴(yán)密的表單)上的 sql 注入的攻擊,則該入侵者可能能夠?qū)υ摴矌艨梢栽L問的數(shù)據(jù)庫對象執(zhí)行任意 sql 語句。當(dāng)然,就這里的情形而言,執(zhí)行 select 語句不會造成什么大問題,這是因為數(shù)據(jù)本來就是公共的。但由于公共權(quán)限和管理權(quán)限使用同一數(shù)據(jù)庫帳戶,因此入侵者還能執(zhí)行 update 和 delete 語句,甚至是從數(shù)據(jù)庫中刪除表。

怎么才能防止該情況的發(fā)生呢?最簡單的方法就是徹底限制公共數(shù)據(jù)庫帳戶修改數(shù)據(jù)的權(quán)限。我們來看看 oracle 是如何解決這個問題的。

oracle 安全性基本概述

oracle 數(shù)據(jù)庫為 web 開發(fā)人員提供了控制數(shù)據(jù)訪問的許多方法,從管理對特定數(shù)據(jù)庫對象(如表、視圖和過程)的訪問到控制個別行或列的數(shù)據(jù)的訪問。很顯然,對 oracle 每個安全特性或可用選項的討論超出了本文的范圍。在這里,我們將不涉及過多細(xì)節(jié),而僅介紹 oracle 數(shù)據(jù)訪問安全性的最基本方面: 驗證和用戶帳戶、權(quán)限、角色

驗證和用戶帳戶。 與其他數(shù)據(jù)庫一樣,請求訪問 oracle 的每個用戶(數(shù)據(jù)庫帳戶)必須通過驗證。驗證工作可以由數(shù)據(jù)庫、操作系統(tǒng)或網(wǎng)絡(luò)服務(wù)來做。除基本的驗證(口令驗證)外,oracle 還支持強驗證機制,如kerberos、cybersafe、radius,等等。

角色。 oracle 角色是一個權(quán)限的有名集。盡管可以直接授予用戶帳戶權(quán)限,但使用角色可以極大簡化用戶管理,尤其是需要管理大量用戶時。創(chuàng)建易管理的小角色,然后根據(jù)用戶的安全級別授予用戶一個或多個角色,這樣做的效率非常高。更不用說修改權(quán)限變得如何簡單了 — 只需修改角色關(guān)聯(lián)的角色即可,無需修改每個用戶帳戶。

為了簡化新用戶創(chuàng)建初期的工作,oracle 自帶了三個預(yù)定義的角色:

connect 角色 — 該角色使用戶可以連接數(shù)據(jù)庫以及執(zhí)行基本的操作,如創(chuàng)建自己的表。默認(rèn)情況下,該角色不能訪問其他用戶的表。

resource 角色 — resource 角色與 connect 角色相似,但它允許用戶擁有較多的系統(tǒng)權(quán)限,如創(chuàng)建觸發(fā)器或存儲過程。

dba 角色 — 允許用戶擁有所有系統(tǒng)權(quán)限。

使用中的授權(quán)和權(quán)限

在本部分中,我們將討論如何使用 oracle 的授權(quán)和權(quán)限來提高本文開頭部分討論的那個簡單 cms 示例的安全性。假定,提供給應(yīng)用程序用戶的內(nèi)容存儲在 web_content 表中。

首先,創(chuàng)建該表。啟動 oracle 數(shù)據(jù)庫特別版,以系統(tǒng)管理員身份登錄。如果還沒有釋放示例 hr 用戶,請將其釋放。按照特別版安裝附帶的入門指南中的指示操作。請注意,默認(rèn)情況下,hr 用戶被賦予 resource 角色。在這里,賦予該用戶 dba 角色,這樣就可以使用該帳戶管理 cms 應(yīng)用程序的數(shù)據(jù)庫方面了。當(dāng)然,不會使用 hr 用戶帳戶進行在線訪問,只用它管理數(shù)據(jù)庫。

現(xiàn)在,可以使用對象瀏覽器或通過執(zhí)行 sql commands 窗口創(chuàng)建新表。下面是創(chuàng)建該表的代碼:

create table web_content ( page_id number primary key, page_content varchar2(255) );

由于該表是使用 hr 用戶帳戶創(chuàng)建的,因此該表歸 hr 帳戶所有并位于 hr 模式中,并且在明確授予其他用戶訪問該表的權(quán)限前,其他用戶無法訪問該表。如果不信,可以創(chuàng)建一個新用戶,用該用戶訪問 web_content 表試試。

現(xiàn)在,創(chuàng)建兩個新用戶,cms_user 和 cms_editor。最終,將授予 cms_user 對 web_content 表的只讀權(quán)限,并將該用戶用作為匿名 web 用戶提供內(nèi)容的數(shù)據(jù)庫帳戶。cms_editor 帳戶將在該表上擁有更多權(quán)限,將被用作 cms 編輯的帳戶(該帳戶需要更改和維護該表中的數(shù)據(jù))。

可以使用 xe 的圖形界面或通過執(zhí)行以下命令創(chuàng)建新用戶:

create user cms_user identified by cms_user; create user cms_editor identified by cms_editor;

(出于簡化的目的,此處的口令與用戶名對應(yīng)。)

為了讓這兩個帳戶都登錄數(shù)據(jù)庫,我們需要賦予它們 connect 角色。為此,在 xe 圖形界面的 administration/database users 部分選中用戶信息下的 connect 復(fù)選框,或執(zhí)行以下命令:

grant connect to cms_user; grant connect to cms_editor;

現(xiàn)在,如果嘗試以 cms_user 或 cms_editor 用戶登錄并試圖從 web_content 表讀取數(shù)據(jù) (select * from hr.web_content;),將遇到以下錯誤:

ora-00942:table or view does not exist

為了訪問數(shù)據(jù)或僅是看到表,需要授予 cms_user 和 cms_editor 帳戶對 web_content 表的只讀權(quán)限:

grant select on hr.web_content to cms_user; grant select on hr.web_content to cms_editor;

以上代碼使這兩個帳戶可以對 web_content 表執(zhí)行 select 語句。如果嘗試執(zhí)行其他語句,則會遇到錯誤。例如,插入一行:

insert into hr.web_content (page_id,page_content) values (1,'hello world');

將產(chǎn)生錯誤消息:

ora-01031:insufficient privileges;

要允許 cms_editor 更改該表的內(nèi)容,需要授予以下權(quán)限:

grant insert,update,delete on hr.web_content to cms_editor;

從現(xiàn)在起,cms_editor 帳戶可以對 web_content 表執(zhí)行 insert、update 和 delete 語句。

您看,這有多簡單!可見通過角色管理權(quán)限是更有效的方法。如果使用的 oracle 數(shù)據(jù)庫不是 xe,可以執(zhí)行如下操作:

創(chuàng)建角色:

create role reader; create role writer;

授予角色權(quán)限:

grant select on web_content to reader; grant insert,update,delete on web_content to writer;

賦予用戶角色:

grant reader to cms_user; grant reader to cms_editor; (they need to read too) grant writer to cms_editor;

請注意,如果更改 reader 角色的定義,則這些更改會影響所有具有該角色的用戶帳戶。如果是直接將權(quán)限授予用戶的,則必須逐個更新每個用戶帳戶。

完成上述步驟后,可以配置 php 應(yīng)用程序,使之對由匿名 web 用戶請求的所有數(shù)據(jù)庫連接均使用 cms_user 帳戶,對由受口令保護的管理頁面引發(fā)的連接使用 cms_editor 帳戶。現(xiàn)在,即使公共 web 表單受到攻擊,該攻擊對數(shù)據(jù)庫的影響將微乎其微,這是因為 cms_user 帳戶僅具有只讀權(quán)限。

結(jié)論

在本文中,我們只是簡單介紹了 oracle 數(shù)據(jù)訪問安全性的一些最基本的特性。此外,oracle 還有許多其他特性,可把您的 web 應(yīng)用程序的安全性提高到一個新的等級 — 包括虛擬專用數(shù)據(jù)庫 (vpd) 和標(biāo)簽安全性。有關(guān)以 php 為背景的數(shù)據(jù)庫安全問題,請參閱我的 otn 文章,“為 php 應(yīng)用程序增加數(shù)據(jù)安全性”。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 九江市| 赣榆县| 哈密市| 张掖市| 商洛市| 花垣县| 汉沽区| 银川市| 杨浦区| 隆子县| 墨脱县| 莎车县| 乌恰县| 罗定市| 马尔康县| 马边| 梅河口市| 霍林郭勒市| 全州县| 旌德县| 精河县| 溧阳市| 大兴区| 茂名市| 儋州市| 卓尼县| 杭锦旗| 高唐县| 雅江县| 平江县| 剑川县| 开封市| 稷山县| 木兰县| 钦州市| 吴桥县| 邹城市| 馆陶县| 仙桃市| 河源市| 桃园市|