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

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

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

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

作者:佚名點(diǎn)擊:20次評(píng)論:0次標(biāo)簽: SqlServer2005

  • 類(lèi)型:數(shù)據(jù)庫(kù)類(lèi)大。40.0M語(yǔ)言:中文 評(píng)分:5.9
  • 標(biāo)簽:
立即下載

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

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

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

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

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

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身份驗(yàn)證的登陸賬號(hào) trieagle ,同時(shí)test數(shù)據(jù)庫(kù)中建立用trieagle

       一、存儲(chǔ)過(guò)程

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

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

grant create proc to trieagle

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

grant alter on schema :: dbo to trieagle

2、trieagle建立存儲(chǔ)過(guò)程

Create proc p1

as

select * from t2   

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

grant exec on p1 to trieagle

4、trieagle執(zhí)行p1存儲(chǔ)過(guò)程

   Exec P1

結(jié)果

Id    name

1     trieagle

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

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

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

管理員:grant create schema to trieagle

用戶:create schema trieagle

Go

Create proc trieagle.p1

as

select * from t2

              go

Exec trieagle.P1

結(jié)果:

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

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

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

create proc p1

with execute as 'trieagle'

as

select * from t2 

二、觸發(fā)器

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

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

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

    grant alter on t1 to trieagle

    grant insert on t1 to trieagle

    注意,在此并沒(méi)有為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é)果,你會(huì)發(fā)現(xiàn),會(huì)成功顯示t2表中的數(shù)據(jù)。結(jié)果:

Id    name

trieagle

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

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

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

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

      05-15 / 91.2M

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

      05-15 / 358.4M

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

      11-14 / 3.5M

      推薦理由:這是連接sql server2005所必須用到的驅(qū)動(dòng)包,找個(gè)能用的sqlserver2005 jdbc 驅(qū)動(dòng)真不容易啊,這是經(jīng)過(guò)我測(cè)試
    • 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) 是一個(gè)同時(shí)包含 SQL OLE DB 訪問(wèn)接口
    • SQL Server數(shù)據(jù)庫(kù)管理及開(kāi)發(fā)工具(N

      05-16 / 42.7M

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

    相關(guān)評(píng)論

    閱讀本文后您有什么感想? 已有人給出評(píng)價(jià)!

    • 8 喜歡喜歡
    • 3 頂
    • 1 難過(guò)難過(guò)
    • 5 囧
    • 3 圍觀圍觀
    • 2 無(wú)聊無(wú)聊

    熱門(mén)評(píng)論

    最新評(píng)論

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

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