2008-11-17 48 views
1

我很好奇,有沒有辦法告訴SQL Server特定組只能從單個位置/應用程序訪問數據庫。我有一個SQL Server和一個Web服務器。我們的應用程序使用存儲過程,每個存儲過程的訪問都基於允許訪問它的角色。然後根據用戶組將執行的功能分配角色。作爲一個附加的安全層,我想指定這些用戶可以從中訪問數據庫的Web應用程序。將SQL Server鎖定到Web服務器上的特定應用程序

我想這是矯枉過正。存儲過程的名稱在任何時候都不會被用戶隱藏(所有的錯誤都被隱藏起來,通用的「抱歉,這不起作用」顯示給用戶)。用戶只能訪問允許執行的存儲過程。這只是一個很好的額外安全措施,所以如果一個表意外授予每個人完全訪問權限,數據庫將只允許從一個位置完全訪問。

回答

0

在連接字符串中,您可以設置Application Name=MyAppName - 這不是真正的安全,但你可以在你的SP(sysprocesses檢查了這 - 在program_name列中)和通過sp_who

沒有什麼可以做表格 - 這就是爲什麼我建議這是允許在所有(SELECTINSERTUPDATE,或DELETE)訪問表的任何作用。

您可以使用一些自動化的T-SQL定期進行審計,以確保沒有人做任何愚蠢的事情。

我沒有以任何方式提倡這個,但你可以做這樣的事情的看法(比較當前的流程和程序名的SPID):

CREATE VIEW YourViewNameHere 
AS 
SELECT * 
FROM YourTableNameHere 
WHERE EXISTS (
    SELECT spid, program_name 
    FROM sys.sysprocesses 
    WHERE program_name = 'YourProgramNameHere' 
     AND spid = @@SPID 
) 
+0

View有什麼用?這個問題源於使用Linq to Sql的想法,而不是爲每一級訪問實現視圖分別存儲過程,這些實現視圖強制訪問每個表並由Linq to SQL使用。 – user108418 2008-11-17 18:15:51

0

我建議運行應用程序/應用程序池作爲對過程具有權限的服務帳戶,但不要授予用戶自己的任何權限。這需要不執行在數據庫級用戶安全,而是在應用級..

+0

唯一的問題是不同的應用程序的訪問級別。許多應用程序都具有管理員級別和基本用戶級別。要有不同的級別,此方法需要X池和X應用程序的X級別。 – user108418 2008-11-17 18:13:24

0

最簡單的方法是隻將其鎖定在用戶級別上。您可以在具有所需權限配置的特定安全環境下運行您的win/web應用程序。

這提供了強制用戶運行應用程序與SQL進行交互的好處,並且不能僅僅打開企業管理器或其他任何東西。

相關問題