是否可以拒绝特定程序对SQL Server的访问?

是否可以拒绝特定程序对SQL Server的访问?,sql,sql-server-2008,Sql,Sql Server 2008,目前,我们的一个数据库(SQL Server 2008)通过多种不同的机制进行访问:.Net SqlClient数据提供程序;sqlserver管理工作室;各种.Net应用程序和2007 Microsoft Office system(基本上是Excel) 我看到在sys.dm_exec_sessions DMV中,可以看到访问当前会话数据库的程序的程序名。我的问题是:是否有可能拒绝来自特定命名程序的访问?如果能为任何命名的程序执行此操作,我们将获得一等奖,但如果能够拒绝所有Microsoft

目前,我们的一个数据库(SQL Server 2008)通过多种不同的机制进行访问:.Net SqlClient数据提供程序;sqlserver管理工作室;各种.Net应用程序和2007 Microsoft Office system(基本上是Excel)


我看到在sys.dm_exec_sessions DMV中,可以看到访问当前会话数据库的程序的程序名。我的问题是:是否有可能拒绝来自特定命名程序的访问?如果能为任何命名的程序执行此操作,我们将获得一等奖,但如果能够拒绝所有Microsoft Office应用程序(尤其是Excel)访问此特定数据库,我们将获得巨大的好处。

只是好奇而已。。。为什么不向每个应用程序颁发不同的用户ID和密码,并以这种方式限制访问?我知道这不能准确回答您的问题,但我认为这是首选方法。

通常您会选择相反的方法。创建一组具有特定访问权限的登录,然后在相关应用程序中使用这些登录


如果您只有一个共享的登录名。。嗯,这不是一个非常安全的环境,最终每个人都有权做任何他们想做的事情。

可以使用的机制是“应用程序角色”。从应用程序连接时,您将承担特定角色,并且该角色被授予特权。因此,所有应用程序都是通过这种机制连接的,不会为任何未经授权的使用提供SQL或NT登录


-Krip

如果要限制用户通过应用程序的访问,请使用SSPI

如果只想限制应用程序,请使用SQL Server模拟并为此应用程序创建一个帐户

这样,一旦您不再希望此应用程序访问您的服务器,您只需将其从角色中删除即可


假设您为应用程序等创建了一个特定的角色。

了解您想要这样做的确切原因可能会有所帮助。我假设这不是出于安全原因,因为任何这样的计划都很容易规避


您是否担心Excel和其他应用程序会消耗不成比例的服务器资源?如果是这样,请查看SQL Server 2008中添加的功能。基本思想是创建一个函数,将新会话划分为多个组,然后将这些组与资源池相关联,在资源池中,当存在争用时,内存或CPU使用率(或两者)可以被限制。

这是不可能的,所有相反的说法都是不可能的

虽然确实可以检查应用程序名并创建拒绝基于此属性登录的登录触发器,但应用程序名不是安全属性,任何人都可以轻易伪造。依靠it实现安全性(即拒绝登录)是失败的

因此,只要您降低您的栏位并从您的问题中删除“拒绝访问”这一术语,就可以在以下位置提供检查会话的
程序名


程序名是由一些应用程序设置的,我不知道Office suite是将此属性设置为有用的还是保留默认值。您必须了解,任何人只要更改连接字符串中的属性都可以避免这种情况。

但是,如果用户使用某个已批准的程序和Excel,会发生什么情况?你怎么只做一个work@Mark:你没有。服务器不关心哪个应用程序正在访问它。它只关心用户是什么以及他们的访问权限是什么。为什么要停止excel?因为这是OP的问题。我看到Excel中的ODBC访问锁定了其他applications@Mark:不知怎的,我把你和OP搞混了我在生产中看到过这个问题——用户可以使用Excel创建任意SQl,包括大量交叉连接,A)在odbc锁表下,b)占用大量服务器CPU。虽然应用程序可以约束查询,但您是否使用广告身份验证?只是提醒一下,但程序名不能保证准确,例如,如果您使用OLEDB连接,您可以使用
使其成为您喜欢的任何内容;Application Name=xxxxx
ODBC也是如此。混合模式身份验证-最近的东西使用windows身份验证连接,但存在大量应用程序等。。。使用SQL Server身份验证进行连接在Sybase和Oracle中,我有一些服务器没有安装odbc目录来阻止odbc和tus Excel,但是我不确定ADO.Net和SQL Server是否可以在没有这些目录的情况下运行谢谢。我同意,作为一个长期解决办法,这可能是我们应该朝着的方向。目前我们面临的问题是,我们有一组未知的excel加载项,它们使用一组未知的凭据访问特定的数据库。我们无法禁用凭据,因为这些其他应用程序有效地使用它们进行连接。我们希望建立一种“不允许excel访问数据库”的模式,作为减少公司对excel依赖的更广泛计划的一部分。这是减少整个组织对excel使用依赖的更广泛计划的一部分,也是为了满足已生效的某些合规法规。我们面临的主要问题是,我们无法清楚地说明访问数据库的当前电子表格集是什么(大型组织、多个站点等)。感谢您的回答-这将完全满足我们目前需要的功能,即提供一种临时机制来拒绝访问现有Excel电子表格,并帮助我们记录访问的来源,以便我们能够识别这些现有的电子表格,然后转向创建更好的方法来访问这个特定的数据库(基本上是创建.net应用程序来替换遗留功能)。我读了其他文章,这似乎可以用于它,追踪遗留应用程序、文件和el
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;