{"id":1468,"date":"2020-05-21T21:44:18","date_gmt":"2020-05-21T21:44:18","guid":{"rendered":"http:\/\/manualsqlserver.com\/?p=1468"},"modified":"2020-05-21T21:44:19","modified_gmt":"2020-05-21T21:44:19","slug":"triggers-logon-en-sql-server","status":"publish","type":"post","link":"https:\/\/manualsqlserver.com\/?p=1468","title":{"rendered":"Triggers Logon en SQL Server"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"232\" height=\"237\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon__D.png\" alt=\"\" class=\"wp-image-1469\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Triggers Logon<\/h2>\n\n\n\n<p>Los tipos de <strong>Triggers Logon<\/strong> se disparan en respuesta a un evento LOGON o de inicio de sesi\u00f3n en una instancia de SQL Server. El Trigger de tipo Logon se desencadena despu\u00e9s de que finaliza la fase de autenticaci\u00f3n del inicio de sesi\u00f3n, pero antes de que se establezca realmente la sesi\u00f3n del usuario. Por lo tanto, todos los mensajes que se originan dentro del desencadenador que normalmente llegar\u00edan al usuario, como los mensajes de error y los mensajes de la instrucci\u00f3n PRINT si es que el Trigger los tiene, se desv\u00edan al registro de errores de SQL Server.<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Los disparadores de inicio de sesi\u00f3n no se activan si falla la autenticaci\u00f3n. Puede usar los Triggers Logon para auditar y controlar las sesiones del servidor, como el seguimiento de la actividad de inicio de sesi\u00f3n, restringir los inicios de sesi\u00f3n en SQL Server o limitar el n\u00famero de sesiones para un inicio de sesi\u00f3n espec\u00edfico.<\/p>\n\n\n\n<p style=\"font-size:24px\"><strong>Ejercicio<\/strong><\/p>\n\n\n\n<p>Crear un Trigger Logon que rechaza los intentos de inicio de sesi\u00f3n en SQL Server si ya existen <strong>dos<\/strong> sesiones de usuario creadas por ese inicio de sesi\u00f3n.<br><strong>Primero crear el inicio de sesi\u00f3n para hacer la prueba (<a href=\"https:\/\/manualsqlserver.com\/?p=540\">Ver Logins<\/a>)<br><\/strong>Use master<br>go<br>Create login TrainerPrueba WITH PASSWORD = &#8216;123&#8217;<br>go<br>Grant View Server State TO TrainerPrueba;<br>go<\/p>\n\n\n\n<p><strong>Crear el Trigger para probar las conexiones.<\/strong><br>Create trigger trLimitarConexion2<br>On ALL Server With Execute As &#8216;TrainerPrueba&#8217;<br>FOR LOGON<br>AS<br>Begin<br>If ORIGINAL_LOGIN()= &#8216;TrainerPrueba&#8217; AND<br>(SELECT COUNT(*) FROM sys.dm_exec_sessions<br>WHERE is_user_process = 1 AND<br>original_login_name = &#8216;TrainerPrueba&#8217;) > 2<br>ROLLBACK<br>End<br>go<\/p>\n\n\n\n<p>Para probar que el Trigger Logon creado funciona primero vamos a conectarnos dos veces a la misma instancia de SQL Server. La imagen muestra dos conexiones activas a la instancia de SQL Server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_01.png\" alt=\"\" class=\"wp-image-1470\" width=\"520\" height=\"629\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_01.png 390w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_01-248x300.png 248w\" sizes=\"auto, (max-width: 520px) 100vw, 520px\" \/><\/figure>\n\n\n\n<p>Ahora vamos a intentar conectarnos nuevamente usando el inicio de sesi\u00f3n TrainerPrueba. <\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_02.png\" alt=\"\" class=\"wp-image-1471\" width=\"615\" height=\"404\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_02.png 477w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_02-300x197.png 300w\" sizes=\"auto, (max-width: 615px) 100vw, 615px\" \/><\/figure>\n\n\n\n<p>Al pulsar Connect para realizar la conexi\u00f3n aparece el mensaje que se muestre en la figura siguiente, el que indica que no se ha podido realizar la conexi\u00f3n debido a la ejecuci\u00f3n del Trigger.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_03.png\" alt=\"\" class=\"wp-image-1472\" width=\"770\" height=\"231\" srcset=\"https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_03.png 607w, https:\/\/manualsqlserver.com\/wp-content\/uploads\/2020\/05\/ManualSQL_TriggersLogon_03-300x90.png 300w\" sizes=\"auto, (max-width: 770px) 100vw, 770px\" \/><\/figure>\n\n\n\n<script async src=\"\/\/pagead2.googlesyndication.com\/pagead\/js\/adsbygoogle.js\"><\/script>\n<ins class=\"adsbygoogle\"\n     style=\"display:block; text-align:center;\"\n     data-ad-layout=\"in-article\"\n     data-ad-format=\"fluid\"\n     data-ad-client=\"ca-pub-2636008503986218\"\n     data-ad-slot=\"1902193434\"><\/ins>\n<script>\n     (adsbygoogle = window.adsbygoogle || []).push({});\n<\/script>\n","protected":false},"excerpt":{"rendered":"<p>Triggers Logon Los tipos de Triggers Logon se disparan en respuesta a un evento LOGON o de inicio de sesi\u00f3n en una instancia de SQL Server. El Trigger de tipo Logon se desencadena despu\u00e9s de que finaliza la fase de autenticaci\u00f3n del inicio de sesi\u00f3n, pero antes de que se establezca realmente la sesi\u00f3n del &hellip; <\/p>\n<p><a class=\"more-link btn\" href=\"https:\/\/manualsqlserver.com\/?p=1468\">Seguir leyendo<\/a><\/p>\n","protected":false},"author":1,"featured_media":1469,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[143],"tags":[145,151,59],"class_list":["post-1468","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-triggersql","tag-create-trigger","tag-logon","tag-triggers","nodate","item-wrap"],"_links":{"self":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1468","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1468"}],"version-history":[{"count":1,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1468\/revisions"}],"predecessor-version":[{"id":1473,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/posts\/1468\/revisions\/1473"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=\/wp\/v2\/media\/1469"}],"wp:attachment":[{"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1468"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1468"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/manualsqlserver.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1468"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}