Pau*_*lin 6 sql sql-server-2008
目前,我们的一个数据库(SQL Server 2008)通过许多不同的机制进行访问:.Net SqlClient Data Provider; SQL Server Management Studio; 各种.Net应用程序和2007 Microsoft Office系统(基本上是Excel).
我看到在sys.dm_exec_sessions DMV中,可以看到访问当前会话数据库的程序的程序名称.我的问题是:是否有可能拒绝来自特定命名程序的访问?如果可以为任何已命名的程序执行此操作,那么将获得一等奖,但是我们可以从所有Microsoft Office应用程序(尤其是Excel)拒绝访问此特定数据库,从而获得很多好处.
Rem*_*anu 13
这是不是可以和所有的相反说法是万金油.
虽然您可以检查应用程序名称并创建基于此属性拒绝登录的登录触发器,但应用程序名称不是安全属性,并且可以由任何人轻松伪造.对安全性的依赖(即登录拒绝)是#fail.
所以只要你降低你的酒吧,并删除条款"拒绝访问"从你的问题,它可以提供一个登录触发器是检查会话的program_name
在sys.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;
Run Code Online (Sandbox Code Playgroud)
program_name是由某些应用程序设置的,我不知道Office套件是将此属性设置为有用的还是保留默认值.而且你必须明白,任何人都可以通过简单地更改连接字符串中的ApplicationName属性来规避这一点.
您可以使用的机制是"应用程序角色".从应用程序连接时,您将承担特定角色,并且该角色被授予特权.因此,所有应用程序都通过此机制连接,并且不会为任何未经授权的使用提供SQL或NT登录.
请参阅http://technet.microsoft.com/en-us/library/ms190998.aspx
-Krip