2010-05-19 68 views
4

目前我們的一個數據庫(SQL Server 2008)可以通過多種不同的機制訪問:.Net SqlClient Data Provider; SQL Server Management Studio;各種.Net應用程序和2007 Microsoft Office系統(基本上是Excel)。是否可以拒絕從特定程序訪問SQL Server?

我看到,在sys.dm_exec_sessions DMV中,可以看到程序訪問當前會話的數據庫的名稱。我的問題是:是否有可能拒絕某個特定程序的訪問?如果可以爲任何已命名的程序完成這項工作,將獲得一等獎,但是如果能夠拒絕從所有Microsoft Office應用程序(特別是Excel)訪問此特定數據庫,我們將從中獲得巨大收益。

+0

您使用AD身份驗證嗎? – Pierreten 2010-05-19 15:48:26

+4

只是個頭,但程序名稱不能保證準確,例如如果你使用OLEDB連接,你可以用'; Application Name = xxxxx'來製作任何你喜歡的東西,這同樣適用於ODBC。 – 2010-05-19 15:50:51

+0

混合模式身份驗證 - 更新的東西使用Windows身份驗證連接,但存在大量的應用程序等......使用SQL Server身份驗證連接 – 2010-05-19 16:14:12

回答

10

這是不是可能和所有相反的主張是蛇油。

雖然是事實,你可以檢查應用程序的名稱,並創建否認基於此屬性登錄登錄觸發器,應用程序名稱是不是安全性,可以由任何人容易被僞造。依靠它爲安全(即登錄拒絕)是#fail。

所以只要你降低你的酒吧,並刪除條款「拒絕訪問」從你的問題,它可以提供一個Logon Trigger是檢查會話的program_namesys.dm_exec_sessions

CREATE TRIGGER application_limit_trigger 
ON ALL SERVER WITH EXECUTE AS '...' 
FOR LOGON 
AS 
BEGIN 
IF EXISTS (SELECT * 
    FROM sys.dm_exec_sessions 
    WHERE session_id = @@SPID 
    AND program_name IN (N'Bad Program', N'Worse Program', N'Unmentionable') 
    ROLLBACK; 
END; 

的程序名設置通過一些應用程序,我不知道Office套件是否將此屬性設置爲有用或使其保持默認。而且您必須明白,只需更改連接字符串中的ApplicationName屬性即可繞過任何人

+0

感謝這個答案 - 這將完全符合我們的需求目前這是爲拒絕來自現有Excel電子表格的訪問提供臨時機制,並幫助我們記錄訪問來自哪裏,以便我們可以識別這些現有的電子表格,然後創建更好的方式訪問此特定數據庫(基本上創建.net應用程序以取代舊功能)。 – 2010-05-19 22:01:38

+2

我讀過你的其他帖子,這似乎很好用,跟蹤舊版應用程序和文件,並在彈出時消除它們。爲了確保在兩個月內沒有人回來,我選擇了我的(相當具有磨蝕性的)verbage,並且看到這個答案並且說'嘿,我可以用它來保護我的應用程序! – 2010-05-19 22:04:13

3

只是好奇......爲什麼你不發出不同的用戶名和密碼到每個應用程序和這種方式來限制訪問?我知道這並不能完全回答你的問題,但我認爲這是首選的方法。

+0

但是,如果用戶使用某個已批准的程序和Excel,會發生什麼情況?你怎麼只做一件作品 – Mark 2010-05-19 15:47:40

+0

@Mark:你不知道。服務器不關心應用程序訪問它。它只關心用戶是什麼,他們的訪問權限是什麼。爲什麼你想停止Excel? – NotMe 2010-05-19 15:49:21

+0

因爲這是OP的問題。我已經看到來自Excel的ODBC訪問鎖定了其他應用程序 – Mark 2010-05-19 15:50:19

4

通常情況下,你會採取相反的行動。創建一組具有特定訪問權限的登錄名,然後在相關應用程序中使用這些登錄名。

如果您只有一個共享的登錄信息,那麼這不是一個非常安全的環境,並且最終每個人都可以訪問並執行他們想要的任何操作。

6

您可以使用的機制是「應用程序角色」。從應用程序進行連接時,您承擔特定角色並且該角色被授予特權。因此,所有應用程序都通過此機制連接,並且不會泄露任何未經授權使用的SQL或NT登錄名。

http://technet.microsoft.com/en-us/library/ms190998.aspx

-Krip

+0

謝謝。我同意,作爲一個更長期的解決方案,這可能是我們應該引入的方向。目前我們面臨的問題是我們有一組未知的excel插件,它們使用未知的證書集訪問特定的數據庫。我們無法禁用憑據,因爲這些其他應用程序有效地使用它們進行連接。我們希望轉向「不擅長數據庫」這一模式,作爲減少企業對excel的依賴的更廣泛舉措的一部分 – 2010-05-19 16:09:01

0

如果你想通過限制應用的用戶訪問,使用SSPI。

如果您只想限制應用程序,請使用SQL Server模擬併爲此應用程序創建一個帳戶。

這樣一來,一旦你不再希望這個應用程序能夠訪問你的服務器,你只要從角色中刪除。

假設您創建特定應用程序的作用,等等。

0

你爲什麼要這樣做可能是有益的確切地知道。我假設這不是出於安全原因,因爲任何此類計劃都很容易規避。

您是否擔心Excel和其他應用程序佔用過多的服務器資源?如果是這樣,請查看SQL Server 2008中添加的Resource Governor功能。其基本思想是創建一個功能,將新會話分爲多個組,然後將這些組與資源池關聯,其中內存或CPU使用率(或兩者都可以)在爭用時被扼殺。

+0

這是減少對整個組織的Excel使用率的依賴以及滿足某些合規條例已經生效。我們面臨的主要問題是,我們無法清楚地說明訪問數據庫的當前電子表格集(大型組織,許多網站等)。 – 2010-05-19 16:11:35