2010-05-19 48 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

相关问题