MS Sql Server中存儲過程與觸發器的安全隱患


 

MS Sql Server中存儲過程與觸發器的安全隱患

       存儲過程與觸發器是Sql Server進行數據庫開發與管理經常使用的兩個對象,但是如果對存儲過程與觸發器的權限設置不當,則會給數據庫帶來巨大的安全隱患,抑或是MS就是這么設計的,是本人杞人憂天。本文測試環境:sql server2005。鑒於本人水平有限,歡迎大家進行討論,如果不對之處,請大家手下留情,輕些拍磚。下面分別進行說明。

首先,建立測試環境

建立測試數據庫 create database test

在測試數據庫中建立兩張表

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

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

t2表中插入一行數據

insert into t2

select 1,'trieagle'

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

       一、存儲過程

情景說明:如果某用戶擁有創建和執行存儲過程的權限,則該用戶可以建立一個存儲過程,在該存儲過程操作其他表中的數據。那么即使該用戶對其他表沒有操作權限,則調用該存儲過程,可以對其他表中的數據進行操作。

1、為trieagle用戶授予創建存儲過程的權限以及執行存儲過程的權限

grant create proc to trieagle

注意:trieagle用戶要創建存儲過程的話,可能還需要修改schema的權限

grant alter on schema :: dbo to trieagle

2trieagle建立存儲過程

Create proc p1

as

select * from t2   

3、向trieagle用戶賦予執行p1存儲過程的權限

grant exec on p1 to trieagle

4trieagle執行p1存儲過程

   Exec P1

結果

Id    name

1     trieagle

成功的查看到t2表中的數據。

安全隱患在於:如果用戶能夠執行、修改存儲過程的話,那么實際上你的數據庫中的數據是出於一種既不安全的狀態。

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

管理員:grant create schema to trieagle

用戶:create schema trieagle

Go

Create proc trieagle.p1

as

select * from t2

              go

Exec trieagle.P1

結果:

消息229,級別14,狀態5,過程p1,第3

拒絕了對對象't2' (數據庫'test',架構'dbo')SELECT 權限。

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

create proc p1

with execute as 'trieagle'

as

select * from t2 

二、觸發器

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

一、建立測試環境

trieagle用戶授予向t1插入數據的權限,以及修改t1的權限

    grant alter on t1 to trieagle

    grant insert on t1 to trieagle

    注意,在此並沒有為trieagle用戶賦予t2表的任何權限

二、trieagle用戶創建觸發器

create trigger t_query_t2

on t1

for insert

as

select * from t2

三、trieaglet1表中插入數據

insert into t1 select 2,'wang'

觀察結果,你會發現,會成功顯示t2表中的數據。結果:

Id    name

trieagle

安全隱患在於:如果用戶能夠創建觸發器,並且在該表上有insertupdatedelete權限之一的話,則實際上你的數據庫中的數據是出於一種不安全的狀態。

           


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM