Pokročilé hledání             

HELIOS iNuvio      FAQ     Uživatelský panel    

Registrovat     Přihlásit se

    Obsah fóra> Časté dotazy> Systémové dotazy
    Verze pro tisk

[tip] Omezení přístupu do SQL pro vybrané aplikace

Zapisují se opakující se dotazy na řešení systémových problémů z provozu Helios Orange. Patří sem dotazy typu "Po instalaci SQL serveru se nemohu přihlásit do Heliosu." apod.

Moderátor: orange_moderator

Odeslat odpověď
Příspěvek: 1 • Stránka 1 z 1
  • Odpovědět s citací

[tip] Omezení přístupu do SQL pro vybrané aplikace

Příspěvekod jan.havranek v 28.06.2016 14:22

Kromě známé metody přístupu do databáze přes tzv. Aplikační roli je možné pro omezení přístupu do SQL využít tzv. DDL triggery.

Optimálně napsaný globální DDL trigger může na úrovni přihlašování k SQL filtrovat vybrané aplikace, které se mohou k SQL připojit. Pokusy o přístup z jiných programů tento trigger odmítne. Filtr aplikací musí být napsán do podmínek triggeru, formou WHITELISTu (povolené programy).

Příklad použití přístupového DDL triggeru:
Následující SQL skript založí externí tabulku PokusOLogin, do které budou zapisovány neúspěšné pokusy o přístup z nepovolených aplikací.

Dále vytvoří globální trigger, který u všech uživatelů, kromě členů role sysadmin, povolí připojení k SQL pouze aplikacemi, jejichž jméno začíná textem Helios (tedy např. Helios Orange, Helios Orange Manažerské rozhraní apod.)

PS: Přesná jména aplikací připojených k SQL se dají zjistit například přes funkci Monitor v Heliosu nebo funkcí Activity monitor v Microsoft SQL Server Management Studiu .

Kód: Vybrat vše
USE [master]
GO

CREATE TABLE master..PokusOLogin
(
ID INT IDENTITY PRIMARY KEY
, Datum datetime DEFAULT GETDATE()
, LoginName SYSNAME
, Program SYSNAME
, Pocitac SYSNAME
)
GO
 
CREATE TRIGGER [OnlyHeO]
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 'Helios%'
       --Pokud spousteny program neni Helios
       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


Zrušit DDL trigger a smazat logovací tabulku lze tímto skriptem:

Kód: Vybrat vše
USE [master]
GO

--Smaz DDL trigger
DROP TRIGGER [OnlyHeO] ON ALL SERVER
GO

--Smaz logovaci tabulku
DROP TABLE [dbo].[PokusOLogin]
GO
jan.havranek
 
Příspěvky: 217
Registrován: 03.10.2006 08:51
Firma: Asseco Solutions, a.s.
Nahoru

Odeslat odpověď
Příspěvek: 1 • Stránka 1 z 1

Zpět na Systémové dotazy

Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 1 návštěvník

         
  • Tým • Smazat všechny cookies z fóra • Všechny časy jsou v UTC + 1 hodina
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group, Český překlad – phpBB.cz

© copyright 2011 Asseco Solutions, a.s.
hotline Helios Orange
+420 244 104 155
hotline.orange@assecosol.cz