首页 > 解决方案 > 全局 DLL 触发器

问题描述

我只需要阻止某些应用程序访问 SQL 服务器。我们的 CRM 通过设计所有用户设置 db_owner 模式。

我发现这个触发器如何阻止一个应用程序的访问。但我需要再添加一个。

你能帮助我吗?

USE [master]
GO

CREATE TABLE master..PokusOLogin3
(
ID INT IDENTITY PRIMARY KEY
, Datum datetime DEFAULT GETDATE()
, LoginName SYSNAME
, Program SYSNAME
, Pocitac SYSNAME
)
GO

CREATE TRIGGER [OnlyAppka]
ON ALL SERVER WITH EXECUTE AS 'sa'
FOR LOGON
AS
BEGIN

DECLARE @LoginName SYSNAME
DECLARE @Pocitac SYSNAME

DECLARE @data XML
SET @data = EVENTDATA()

DECLARE @AppName SYSNAME
SELECT @AppName = program_name, @Pocitac = host_name FROM sys.dm_exec_sessions WHERE session_id = @data.value('(/EVENT_INSTANCE/SPID)[1]', 'int')

IF @AppName NOT LIKE 'Appka%'
       --Pokud spousteny program neni Appka
       SET @LoginName = @data.value('(/EVENT_INSTANCE/LoginName)[1]', 'SYSNAME')

       IF @LoginName NOT IN (SELECT p.name FROM sys.server_principals p JOIN sys.syslogins s ON p.sid = s.sid WHERE s.sysadmin = 1
                                                            UNION ALL SELECT service_account FROM sys.dm_server_services)
       --A pokud program nespousti administrator sql serveru, nebo sluzba sql serveru
             BEGIN
             ROLLBACK
             --Ukonci session (pokus o prihlaseni)
             INSERT INTO master..PokusOLogin (LoginName, Program, Pocitac)
             SELECT @LoginName --@LoginName
                    , @AppName, @Pocitac
             --A tento pokus zaloguj do tabulky
             END

END

标签: sqldlltriggers

解决方案


如果 @AppName 不喜欢 'Appka%' 或 @AppName 不喜欢 'Appka1%'


推荐阅读