西西軟件園多重安全檢測下載網(wǎng)站、值得信賴的軟件下載站!
軟件
軟件
文章
搜索

首頁西西教程數(shù)據(jù)庫教程 → MS Sql Server 2005存儲過程與觸發(fā)器的安全隱患分析

MS Sql Server 2005存儲過程與觸發(fā)器的安全隱患分析

相關(guān)軟件相關(guān)文章發(fā)表評論 來源:西西整理時間:2012/6/8 16:44:30字體大。A-A+

作者:佚名點擊:20次評論:0次標(biāo)簽: SqlServer2005

  • 類型:數(shù)據(jù)庫類大。40.0M語言:中文 評分:5.9
  • 標(biāo)簽:
立即下載

存儲過程與觸發(fā)器是Sql Server進(jìn)行數(shù)據(jù)庫開發(fā)與管理經(jīng)常使用的兩個對象,但是如果對存儲過程與觸發(fā)器的權(quán)限設(shè)置不當(dāng),則會給數(shù)據(jù)庫帶來巨大的安全隱患,抑或是MS就是這么設(shè)計的,是本人杞人憂天。

本文測試環(huán)境:sql server2005。

首先,建立測試環(huán)境

建立測試數(shù)據(jù)庫 create database test

在測試數(shù)據(jù)庫中建立兩張表

create table t1(id int ,name varchar(10))

create table t2(id int ,name varchar(10))

向t2表中插入一行數(shù)據(jù)

insert into t2

select 1,'trieagle'

建立sql身份驗證的登陸賬號 trieagle ,同時test數(shù)據(jù)庫中建立用trieagle

       一、存儲過程

情景說明:如果某用戶擁有創(chuàng)建和執(zhí)行存儲過程的權(quán)限,則該用戶可以建立一個存儲過程,在該存儲過程操作其他表中的數(shù)據(jù)。那么即使該用戶對其他表沒有操作權(quán)限,則調(diào)用該存儲過程,可以對其他表中的數(shù)據(jù)進(jìn)行操作。

1、為trieagle用戶授予創(chuàng)建存儲過程的權(quán)限以及執(zhí)行存儲過程的權(quán)限

grant create proc to trieagle

注意:trieagle用戶要創(chuàng)建存儲過程的話,可能還需要修改schema的權(quán)限

grant alter on schema :: dbo to trieagle

2、trieagle建立存儲過程

Create proc p1

as

select * from t2   

3、向trieagle用戶賦予執(zhí)行p1存儲過程的權(quán)限

grant exec on p1 to trieagle

4、trieagle執(zhí)行p1存儲過程

   Exec P1

結(jié)果

Id    name

1     trieagle

成功的查看到t2表中的數(shù)據(jù)。

安全隱患在于:如果用戶能夠執(zhí)行、修改存儲過程的話,那么實際上你的數(shù)據(jù)庫中的數(shù)據(jù)是出于一種既不安全的狀態(tài)。

解決方法:如果該允許某個用戶創(chuàng)建存儲過程的話,讓該用戶在其自己的schema上來創(chuàng)建,這樣可以避免上述問題。即:

管理員:grant create schema to trieagle

用戶:create schema trieagle

Go

Create proc trieagle.p1

as

select * from t2

              go

Exec trieagle.P1

結(jié)果:

消息229,級別14,狀態(tài)5,過程p1,第3 行

拒絕了對對象't2' (數(shù)據(jù)庫'test',架構(gòu)'dbo')的SELECT 權(quán)限。

同樣的情況在oracle上也存在,oracle的解釋是:執(zhí)行者執(zhí)行存儲過程時,會使用存儲過程設(shè)計者所具有的權(quán)限,但是可以使用authid current_user指定用戶運行存儲過程時使用的權(quán)限。Sql server中有類似的語句是 在execute as ,但使用方法還未學(xué)習(xí),例如:

create proc p1

with execute as 'trieagle'

as

select * from t2 

二、觸發(fā)器

 情景說明:如果某用戶擁有修改表的權(quán)限以及向表中有(insert、update、delete)權(quán)限之一的話,則該用戶即可創(chuàng)建觸發(fā)器。那么該用戶在觸發(fā)器中可以查看其他表的數(shù)據(jù),甚至插入、修改、刪除其他表的數(shù)據(jù),即使該用戶對其他表沒有任何的操作權(quán)限。

一、建立測試環(huán)境

為trieagle用戶授予向t1插入數(shù)據(jù)的權(quán)限,以及修改t1的權(quán)限

    grant alter on t1 to trieagle

    grant insert on t1 to trieagle

    注意,在此并沒有為trieagle用戶賦予t2表的任何權(quán)限

二、trieagle用戶創(chuàng)建觸發(fā)器

create trigger t_query_t2

on t1

for insert

as

select * from t2

三、trieagle向t1表中插入數(shù)據(jù)

insert into t1 select 2,'wang'

觀察結(jié)果,你會發(fā)現(xiàn),會成功顯示t2表中的數(shù)據(jù)。結(jié)果:

Id    name

trieagle

安全隱患在于:如果用戶能夠創(chuàng)建觸發(fā)器,并且在該表上有insert、update、delete權(quán)限之一的話,則實際上你的數(shù)據(jù)庫中的數(shù)據(jù)是出于一種不安全的狀態(tài)。

跟樓主的觀點相反。我認(rèn)為存儲過程恰恰是DBA控制數(shù)據(jù)權(quán)限的最最強(qiáng)大的工具。用存儲過程來控制權(quán)限,那表達(dá)能力可遠(yuǎn)超過什么select update delete之類的授權(quán)。
例如用戶UserA下建立一個工資表Salar。對于用戶UserB可以給員工漲工資,但他的官可能比較下,每次只能給用戶甲一百元。對于用戶UserC是的大領(lǐng)導(dǎo),他可以給大家的工資加個0.這情況下在數(shù)據(jù)庫層面上,用授權(quán)語句顯然不能結(jié)果問題,存儲過程就排上用場了。
首先,授權(quán)用戶UserB和UserC對UserA.Salar有select權(quán)限,但禁止其update,delete。
在UserA下建立存儲過程ProAdd100 為salar表中的工資加100;
授予UserB執(zhí)行Proadd100的權(quán)利;
在UserA下建立存儲過程ProMulti10 為salar表工資乘10;
授予UserC執(zhí)行Promulti10的權(quán)限。
這樣不就可以隨心所欲的控制數(shù)據(jù)的權(quán)限了。多強(qiáng)大。

DBA殺手........
在mssql中,存儲過程中引用了其它的存儲過程可以不存在,這也是一個小隱患
這有什么隱患呢。如果是程序直接訪問數(shù)據(jù)庫,還可能訪問不存在的表呢。這也是隱患嗎。條條大路通羅馬。關(guān)鍵不在走哪條路,關(guān)鍵在于質(zhì)量。異常處理是必須的。

    sql server
    (11)sql server
    西西軟件園提供免費的下載,是很多小型企業(yè)公司使用到的數(shù)據(jù)庫軟件,是一個功能強(qiáng)大且可靠的數(shù)據(jù)管理系統(tǒng),它功能豐富,能保護(hù)數(shù)據(jù),并且可改善嵌入式應(yīng)用程序客戶端輕型應(yīng)用程序以及本地數(shù)據(jù)存儲區(qū)的性能。具有易于部署以及可以快速設(shè)計原型的特點,您可以無償獲取并可以隨應(yīng)用程序免費再分發(fā)。它設(shè)計成可與其他服務(wù)器基礎(chǔ)結(jié)構(gòu)資產(chǎn)無縫集成。...更多>>
    • SQL Server 2008 SP2精簡版免費版

      05-15 / 91.2M

      推薦理由:SQL Server 2008 Express 是 SQL Server 的免費版本,是學(xué)習(xí)和構(gòu)建桌面及小型服務(wù)器應(yīng)用程序的理想選擇,且
    • Microsoft SQL Server 2000 Enterp

      05-15 / 358.4M

      推薦理由:SQL Server 是一個關(guān)系數(shù)據(jù)庫管理系統(tǒng)它最初是由Microsoft Sybase 和Ashton-Tate三家公司共同開發(fā)的于1988
    • sqlserver2005驅(qū)動包

      11-14 / 3.5M

      推薦理由:這是連接sql server2005所必須用到的驅(qū)動包,找個能用的sqlserver2005 jdbc 驅(qū)動真不容易啊,這是經(jīng)過我測試
    • Microsoft SQL Server 2005 Expres

      06-02 / 40.0M

      推薦理由:SQL Server Express 是一種強(qiáng)大而可靠的數(shù)據(jù)管理產(chǎn)品,可以為嵌入的應(yīng)用程序客戶端、輕型 Web 應(yīng)用程序以及
    • Microsoft SQL Server 2008 Native

      09-30 / 10.5M

      推薦理由:Microsoft SQL Server 2008 Native Client (SQL Server Native Client) 是一個同時包含 SQL OLE DB 訪問接口
    • SQL Server數(shù)據(jù)庫管理及開發(fā)工具(N

      05-16 / 42.7M

      推薦理由:Navicat for SQL Server 是一套專為 Microsoft SQL Server設(shè)計的強(qiáng)大數(shù)據(jù)庫管理及開發(fā)工具。它可以用于 SQL
    數(shù)據(jù)庫
    (13)數(shù)據(jù)庫
    西西軟件園提供常用的數(shù)據(jù)軟件下載,數(shù)據(jù)庫軟件有很多,不過常用的就是,,,。數(shù)據(jù)庫是一個長期存儲在計算機(jī)內(nèi)的有組織的有共享的統(tǒng)一管理的數(shù)據(jù)集合。它是一個按數(shù)據(jù)結(jié)構(gòu)來存儲和管理數(shù)據(jù)的計算機(jī)軟件系統(tǒng)。...更多>>

    相關(guān)評論

    閱讀本文后您有什么感想? 已有人給出評價!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過難過
    • 5 囧
    • 3 圍觀圍觀
    • 2 無聊無聊

    熱門評論

    最新評論

    發(fā)表評論 查看所有評論(0)

    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字?jǐn)?shù): 0/500 (您的評論需要經(jīng)過審核才能顯示)