locked
Bloquear Autenticação do Windows no SQL Server 2005 e 2008 express RRS feed

  • Pergunta

  • Olá Pessoal...


    Preciso bloquear o acesso a um BD com o Windows Authentication através de um SCRIPT ou via código(Vb.Net).

    Eu consigo fazer o bloqueio indo pela interface do SQL Server, verificando quais os usuário e grupos estão com a permissão SYSADMIN e os desabilitando.

    Gostaria de identificar quais usuários tem esta permissão(SYSADMIN) e bloqueá-los automaticamente(permitir apenas o usuário SA para SQL Server Authentication).

    Não sei se está é a forma correta ou se tem outra forma? Se alguém puder ajudar agradeço...abraço a todos.

    quinta-feira, 28 de março de 2013 13:25

Respostas

  • AndersonFC,

    A trigger abaixo barra o login via windows authentication uma vez que pelo SQL Server temos apenas os meios:

    1 - Windows Authentication

    2 - Mixed Mode (Windows Authentication + SQL Server Authentication)

    Ou seja, não temos apenas SQL Server Authentication.

    Apenas tome cuidado com a mesma pois ela esta sem backdoor, ou seja, TODOS! os usuarios via Windows Authentication serão barrados.

    CREATE TRIGGER ImpedeConexaoViaWindowsAuthentication
    ON ALL SERVER WITH EXECUTE AS 'sa'
    FOR LOGON
    AS
    BEGIN
    IF(EXISTS(SELECT TOP 1 1 FROM sys.dm_exec_sessions WHERE is_user_process = 1 AND LEN(LTRIM(RTRIM(nt_domain))) > 0 AND original_login_name LIKE ORIGINAL_LOGIN()))
        ROLLBACK;
    END;


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 13:50
    Moderador
  • Anderson,


    Sou "obrigado" a falar também que a trigger funciona, mas mais eficiente e menos perigoso seria um gerenciamento desses usuarios e a simples não criação de logins via Windows Authentication.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 13:52
    Moderador
  • Anderson,

    Tem certeza que o usuario é o SA? A exclusão da trigger é simples e pode ser feita via interface grafica conforme abaixo:


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 17:43
    Moderador

Todas as Respostas

  • Anderson,

    São 2 coisas distintas, voce quer impedir o bloqueio de pessoas com SysAdmin com exceção do SA ou quer impedir o bloqueio de pessoa via Windows Authentication.

    Podemos ter pessoas com login sql e SysAdmin, assim como podemos ter pessoas com Windows Authentication e SysAdmin.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 13:30
    Moderador
  • Olá Fabrizzio...

    O que eu preciso é " impedir o bloqueio de pessoa via Windows Authentication", é como coloquei no post "Não sei se está é a forma correta ou se tem outra forma? ".

    Se você puder me auxiliar nesta questão agradeço!

    quinta-feira, 28 de março de 2013 13:43
  • AndersonFC,

    A trigger abaixo barra o login via windows authentication uma vez que pelo SQL Server temos apenas os meios:

    1 - Windows Authentication

    2 - Mixed Mode (Windows Authentication + SQL Server Authentication)

    Ou seja, não temos apenas SQL Server Authentication.

    Apenas tome cuidado com a mesma pois ela esta sem backdoor, ou seja, TODOS! os usuarios via Windows Authentication serão barrados.

    CREATE TRIGGER ImpedeConexaoViaWindowsAuthentication
    ON ALL SERVER WITH EXECUTE AS 'sa'
    FOR LOGON
    AS
    BEGIN
    IF(EXISTS(SELECT TOP 1 1 FROM sys.dm_exec_sessions WHERE is_user_process = 1 AND LEN(LTRIM(RTRIM(nt_domain))) > 0 AND original_login_name LIKE ORIGINAL_LOGIN()))
        ROLLBACK;
    END;


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 13:50
    Moderador
  • Anderson,


    Sou "obrigado" a falar também que a trigger funciona, mas mais eficiente e menos perigoso seria um gerenciamento desses usuarios e a simples não criação de logins via Windows Authentication.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 13:52
    Moderador
  • Olá Fabrizzio...

    Funcionou 100% na minha máquina!!!

    Só gostaria de saber se entendi o porcesso corretamente:

    1) Este sccript cria uma trigger que verifica os dados da "sys.dm_exec_sessions"

    2) Caso a trigger encontre um registro com as características colocadas aqui:

    SELECT TOP 1 1
                FROM sys.dm_exec_sessions
                WHERE is_user_process = 1
                AND LEN(LTRIM(RTRIM(nt_domain))) > 0
                AND original_login_name
                LIKE ORIGINAL_LOGIN()))

    Apagao registro com o ROLLBACK.

    3) Para retornar a permitir Windows Athentication é só Logar com o usuário SA(SQL Authentication) e excluir a trigger

    Muito obrigado

    quinta-feira, 28 de março de 2013 14:40
  • Anderson,

    1 - Sim

    2 - Sim, pega os dados de conexão do usuario que esta fazendo a autenticação, caso seja encontrado ele da ROLLBACK na ação de login.

    3 - Isso mesmo, qualquer usuario com permissão SysAdmin e autenticação via SQL Server consegue excluir a trigger.


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 14:42
    Moderador
  • Fabrizzio...

    Sua solução funcionou perfeitamente, muito obrigado pela atenção e presteza!!!

    quinta-feira, 28 de março de 2013 14:49
  • Fabrizzio...

    Quando vou excluir a trigger(DROP TRIGGER ImpedeConexaoViaWindowsAuthentication) esta retornando:

    Cannot drop the trigger 'ImpedeConexaoViaWindowsAuthentication', because it does not exist or you do not have permission.

    Eu estou logando com o usuário SA!



    • Editado AndersonFC quinta-feira, 28 de março de 2013 17:42
    quinta-feira, 28 de março de 2013 17:38
  • Anderson,

    Tem certeza que o usuario é o SA? A exclusão da trigger é simples e pode ser feita via interface grafica conforme abaixo:


    Fabrizzio A. Caputo
    MCT
    Certificações:
    Oracle OCA 11g
    MCITP SQL Server 2008 Implementation and Maintenance
    MCITP SQL Server 2008 Developer
    ITIL V3 Foundation
    Blog Pessoal: www.fabrizziocaputo.wordpress.com
    Twitter: @FabrizzioCaputo
    Email: fabrizzio.antoniaci@gmail.com

    quinta-feira, 28 de março de 2013 17:43
    Moderador
  • Fabrizzio...

    Pela interface do SQL Server exclui sem problema!!! Mais uma vez obrigado.

    quinta-feira, 28 de março de 2013 19:39