2014-12-16 14 views
6

Ich habe einen SQL Server konfigurieren müssen, um nur eine Sitzung pro Anmeldung zuzulassen. Ich habe ein paar Referenzen zum Erstellen von Login-Triggern gefunden, um zu verhindern, dass ein Login mehr als eine Sitzung erstellt, aber ich frage mich, ob es eine Möglichkeit gibt, dies auf einer niedrigeren Ebene zu definieren, so dass dieses Session-Limit eher der Standard ist als dies in einem anderen Login für jeden Benutzer definieren zu müssen?Begrenzen Sie alle Benutzer auf 1 Sitzung

Ich sehe eine Menge Verweise auf dieses Thema in "Fragen, die vielleicht schon Ihre Antwort haben" und "ähnliche Fragen" hier auf stackoverflow, aber bisher habe ich einen Beitrag nicht gefunden oder nicht verstanden, der beschreibt was ich versuche ich zu tun. Ich habe auch eine Referenz über Declarative Management Framework gesehen, mit der Sie SQL Server nach Richtlinien konfigurieren können.

Ich werde weiterhin durch Artikel schauen, um zu versuchen, dies zu lernen, aber in der Zwischenzeit ... Ratschläge sehr geschätzt!

+0

Vielleicht ist es besser, diese Frage auf http://security.stackexchange.com/](http://security.stackexchange. com /) –

+0

Ich nehme an, Sie meinen Microsoft SQL Server. – Gumbo

+0

Haben alle Benutzer denselben Login, sind sie individuell angemeldet oder von einer AD-Gruppe geerbt? –

Antwort

1

Das Beispiel für eine logon trigger in der Online-Dokumentation ist ziemlich nah an dem, was ich denke, dass Sie wollen, habe ich ein paar Änderungen vorgenommen, damit es für alle Anmeldungen funktioniert.

-- Trigger must be created by a user with 'view server state' permission in order the trigger to have unrestricted access to sys.dm_exec_sessions. 
create trigger connection_limit_trigger on all server with execute as self for logon 
as 
begin 
    -- Check whether the caller is a SysAdmin. 
    -- Note: The trigger is executing under an elevated security context so we must switch to the caller's context to test their SysAdmin status. 
    declare @IsSysAdmin int 
    execute as caller 
    set @IsSysAdmin = isnull(is_srvrolemember ('sysadmin'), 0) 
    revert 

    -- If the user is not a SysAdmin and there are already too many non-dormant sessions for this login then 'rollback' the logon. 
    -- Note: sys.dm_exec_sessions does not include an entry for this logon attempt. 
    if ((@IsSysAdmin = 0) and ((select count(1) from sys.dm_exec_sessions where is_user_process = 1 and status <> 'Dormant' and original_login_name = original_login()) > 1)) 
    begin 
     raiserror('This login has exceeded the maximum of 1 connections to this SQL Server.', 16, 1) 
     rollback 
    end 
end 

Ich habe einen Scheck hinzugefügt, so dass die Grenze für SysAdmin Anmeldungen nicht gilt und nicht ruhende Verbindung Pool-Verbindungen zählt. Ein paar Dinge zu beachten;

  • , wenn eine Verbindung ist nicht richtig es in sys.dm_exec_sessions für eine Weile hängen, um geschlossen in diesem Fall wird der Benutzer nicht in der Lage neu zu verbinden, bis die tote Verbindung selbst löscht.
  • Wenn Sie einen Anmelde-Trigger durcheinander bringen, können Sie sich selbst (und alle anderen!) Aus dem SQL Server sperren. Siehe die logon trigger Seite für Details, wie Sie wieder in :)
Verwandte Themen