Мне нужно заблокировать доступ к серверу 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