Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Ограничаване на едновременни потребителски сесии за специфично влизане в SQL Server

В SQL Server можете да използвате тригер за влизане, за да одитирате и контролирате сесиите на сървъра, като например проследяване на активността за влизане, ограничаване на влизанията до SQL Server или ограничаване на броя на сесиите за конкретно влизане.

Тази статия предоставя пример за използване на тригер за влизане за ограничаване на броя на едновременните сесии за конкретно влизане.

Пример

Ето пример за тригер за влизане, който ограничава броя на едновременните сесии за конкретно влизане до 1.

Създайте вход:

CREATE LOGIN Marge WITH PASSWORD = 'SQLServer123';
GRANT VIEW SERVER STATE TO Marge;

Създайте тригера за влизане:

CREATE TRIGGER trg_limit_concurrent_sessions
ON ALL SERVER WITH EXECUTE AS 'Marge'
FOR LOGON  
AS  
BEGIN  
IF ORIGINAL_LOGIN() = 'Marge' AND  
    (SELECT COUNT(*) FROM sys.dm_exec_sessions  
            WHERE is_user_process = 1 AND  
                original_login_name = 'Marge') > 1
    ROLLBACK;  
END;

Сега, когато този потребител се опита да влезе при втора връзка, той трябва да получи следната грешка:

Error message: Logon failed for login 'Marge' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english.

Имайте предвид, че всички съобщения, произхождащи от тригера, които обикновено достигат до потребителя, като съобщения за грешки и съобщения от PRINT оператор, се пренасочват към регистъра за грешки на SQL Server.

Също така тригерите за влизане не се задействат, ако удостоверяването не успее.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Автоматично изтриване на блокирани процеси в MS SQL Server

  2. 9 жизненоважни задачи, за които отговарят DBA

  3. Как да получите числовата част от низ с помощта на T-SQL?

  4. Промяна на съпоставянето на SQL Server на нечувствително към главни и малки букви?

  5. Кой е най-добрият начин за контрол на версиите на моите съхранени процедури на SQL сървър?