Os logons de autenticação do Windows podem ser desabilitados no SQL Server 2008 (ou R2)?


8

Portanto, podemos fazer o logon do Windows ou o modo misto, mas podemos configurar o SQL Server para usar apenas logons internos e bloquear todos os logons do Windows?

A única solução é adicionar todos os logins potenciais do Windows e configurá-los com privilégios restritos como um procedimento preventivo (ou reativo)?

Respostas:


5

Não pode ser desativado completamente, por dois motivos:

  • Na instalação, logins são provisionados NT AUTHORITY\SYSTEM, NT SERVICE\SQLSERVERAGENT(ou um grupo que contém a conta de serviço SQL Agent), e NT SERVICE\MSSQLSERVER(ou um grupo que contém a conta de serviço de banco de dados SQL). Esses são sysadminlogons de nível que precisam estar disponíveis para o SQL Server funcionar corretamente.

    Embora um teste rápido tenha revelado que excluir todos os três logins impedia a reinicialização do SQL Agent (o mecanismo do banco de dados funcionava bem), tenho certeza de que existem outras funções que dependem dos outros dois logons ... eles foram criados por padrão por uma razão, para não mexer com eles. (Para sua informação, se você testá-lo: a opção de script Drop & Create para um logon no SSMS não cria a associação da função de servidor.)

  • No modo de usuário único, os administradores locais recebem automaticamente sysadminprivilégios de nível, independentemente de haver ou não um login criado que "contenha" esses usuários. Este é um cabide para quando você trancou as chaves no carro.

Conforme mencionado na outra resposta, apenas os logons criados explicitamente no Windows terão acesso à conexão (meu comentário original estava incorreto) - remover todos os logons criados pelo usuário no Windows é suficiente para impedir o acesso.

Se você precisar dar um passo adiante e impedir a criação de logons do Windows , aqui está um ponto de partida (o Gerenciamento Baseado em Política, pelo menos em 2008, não oferece suporte à prevenção disso, pois acontece):

CREATE TRIGGER trg_PreventWindowsLogins
    ON ALL SERVER
    AFTER CREATE_LOGIN
AS
BEGIN

    SET NOCOUNT ON;

    IF (EVENTDATA().exist('/EVENT_INSTANCE[1]/LoginType[1]/text()[1] eq "Windows (NT) Login"') = 1)
    BEGIN
        RAISERROR(N'Not allowed to create Windows logins!', 16, 1);
        ROLLBACK;
    END

END

Obviamente, qualquer pessoa com permissões suficientes pode derrotar isso, mas isso é uma questão separada ...


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.