AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 4441
Accepted
Jon Seigel
Jon Seigel
Asked: 2011-08-08 16:48:19 +0800 CST2011-08-08 16:48:19 +0800 CST 2011-08-08 16:48:19 +0800 CST

Por que é uma prática ruim permitir que todos usem o login sa?

  • 772

Mesmo a Microsoft desencoraja o uso do modo de autenticação do SQL Server , mas nossos aplicativos exigem isso.

Eu li que é uma prática recomendada não permitir que os usuários usem o salogin diretamente, em vez disso, use a Autenticação do Windows e permita privilégios de administrador de sistema a essas contas (ou grupos de contas).

  • Não é essencialmente a mesma coisa? Quais são as vantagens/desvantagens?
  • Como a prática recomendada aumenta a segurança de minhas instâncias do SQL Server?
  • Isso se aplica apenas às instâncias de produção ou também às nossas instâncias de desenvolvimento interno?
sql-server security
  • 8 8 respostas
  • 13092 Views

8 respostas

  • Voted
  1. Best Answer
    Brent Ozar
    2011-08-09T03:55:34+08:002011-08-09T03:55:34+08:00

    Você tem várias perguntas diferentes aqui, então vou eliminá-las individualmente:

    "Li que é uma prática recomendada não permitir que os usuários usem o login sa diretamente, em vez disso, use a Autenticação do Windows"

    Você está misturando duas coisas aqui: o conceito de SA e o conceito de autenticação SQL e autenticação Windows.

    A autenticação SQL é uma lista de nomes de usuários e senhas que são armazenados em cada SQL Server. O fato de ser armazenado em SQL é o primeiro problema. Se você precisar alterar a senha de login, deverá alterá-la em todos os servidores (ou manter senhas diferentes em servidores diferentes). Com a autenticação do Windows, você pode desabilitar logins centralmente, alterar senhas, definir políticas etc.

    Se você optar por usar a autenticação SQL, o SA será apenas um login de autenticação SQL. É o nome de usuário padrão do administrador, assim como o Administrador na autenticação do Windows. Ele tem superpoderes locais naquela instância, mas não superpoderes globais em todas as instâncias.

    "...e permitindo a essas contas (ou grupos de contas) privilégios de administrador de sistema."

    Qualquer que seja o método de autenticação escolhido, o ideal é seguir o princípio do privilégio mínimo: conceder às pessoas os direitos mínimos de que precisam para realizar seu trabalho e nada mais.

    Não pense neles apenas como logins - são pessoas que podem fazer com que você seja demitido. Se eles descartarem o banco de dados ou desabilitarem suas tarefas de backup acidentalmente, eles não serão demitidos porque, por padrão, o SQL não rastreia quem fez o quê. Você é quem vai ser demitido porque vai acontecer, e você não vai poder dizer quem fez isso.

    "Como a prática recomendada aumenta a segurança de minhas instâncias do SQL Server?"

    Você quer fazer duas coisas:

    1. Impedir que as pessoas quebrem o servidor
    2. Quando eles quebrarem o servidor, seja capaz de identificar exatamente quem fez isso

    A primeira é realizada com o princípio do menor privilégio: dar às pessoas apenas as permissões de que precisam e nada mais.

    A segunda é realizada dando a cada pessoa seu próprio login, não permitindo logins compartilhados (como permitir que todos usem o mesmo nome de usuário/senha) e, idealmente, auditando os logins. Você provavelmente não fará essa última parte imediatamente, porque é meio doloroso, mas vamos colocar as peças no lugar primeiro para que você possa adicionar auditoria mais tarde, depois que alguém abandonar um banco de dados e seu chefe quiser saber por quê.

    Eu sei o que você está pensando: "Mas estamos codificando aplicativos e o aplicativo precisa de um login." Sim, dê ao aplicativo seu próprio login, e os desenvolvedores precisam saber essa senha, mas esse login deve ser tão despojado de permissões que ninguém em sã consciência gostaria de usá-lo. Por exemplo, pode ser necessário apenas as funções db_datareader e db_datawriter, nada mais. Dessa forma, ele pode inserir, atualizar, excluir e selecionar dados, mas não necessariamente alterar esquemas, adicionar índices, alterar procedimentos armazenados, etc.

    "Isso se aplica apenas a instâncias de produção ou também a nossas instâncias de desenvolvimento interno?"

    Acho que se aplica tanto a instâncias de desenvolvimento porque geralmente fico preocupado com as pessoas quebrando as coisas. As pessoas adoram quebrar servidores em desenvolvimento. E, claro, quando é hora de agrupar a lista de alterações para migrar para produção, preciso saber se um determinado índice é realmente vital para o aplicativo ou se algum idiota apenas executou o Database Tuning Advisor e disse para aplicar todas as alterações . As permissões adequadas ajudam a diminuir essa dor.

    • 53
  2. user507
    2011-08-08T17:16:45+08:002011-08-08T17:16:45+08:00

    Na verdade, se você ler este whitepaper: SQL Server Separation of Duties Whitepaper

    Ele dirá que NINGUÉM deve usar privilégios de administrador de sistema em sua conta. Sua conta de acesso diário deve receber acesso mínimo, não direitos explícitos de administrador de sistema. Dado a eles, o CONTROL SERVER está realmente próximo do que o sysadmin é e permite que você ainda NEGUE/REVOGUE o acesso onde eles não precisam. Permitir direitos de administrador de sistema a qualquer pessoa torna-se um problema se você precisar atender a quaisquer padrões de conformidade de TI. A maioria dos padrões requer o uso mínimo da função sysadmin.

    Eu desativo e renomeio a conta "sa", assim como você faria com a conta de administrador integrada no sistema operacional. Só para ser usado em emergência.

    Os desenvolvedores geralmente recebem acesso total ao seu ambiente de desenvolvimento. Então, quando seu programa for movido para a instância de pré-produção, seu acesso deve ser mínimo ou nenhum; assim como seria na produção. Esse é um mundo perfeito. Se, no entanto, você não estiver nisso e seus desenvolvedores tiverem privilégios mais altos do que você acha que eles precisam, eu auditaria suas contas. Eu capturaria tudo e qualquer coisa que eles fazem até certo ponto. Portanto, no caso de algo dar errado quando eles estavam em seu servidor de produção, você pode voltar e descobrir exatamente o que eles fizeram.

    • 15
  3. gbn
    2011-08-08T22:12:22+08:002011-08-08T22:12:22+08:00

    Se você estiver sujeito a controles ou padrões regulatórios externos (SOX, PCI etc.), você

    • falhará em uma auditoria
    • estão falhando em suas verificações PCI mensais

    Os desenvolvedores devem ter db_owner em uma rede SQL Server apenas para desenvolvimento.

    Se todos os seus SQL Servers estiverem na rede com uma compilação padrão (ou seja, a mesma conta de serviço), o sa em um confere direitos a todos eles.

    Se a conta de serviço for administrador local, seus desenvolvedores também terão controle total sobre os servidores.

    Não há vantagens.

    • 8
  4. datagod
    2011-08-08T17:10:42+08:002011-08-08T17:10:42+08:00

    sa = administrador do sistema

    Fazer login com sa dá ao usuário o poder de fazer o seguinte: - eliminar e criar bancos de dados - modificar objetos no banco de dados - eliminar e criar logins - alterar senhas - excluir todos os dados

    Conceder privilégios de administrador de sistema a uma conta do Windows realiza a mesma coisa.

    A lista continua, mas isso deve lhe dar alguns bons motivos para NUNCA, NUNCA, permitir que um não administrador use o sa.

    Você deve criar uma conta Windows ou SQL com os privilégios mínimos necessários para que os aplicativos funcionem. (ou seja, login, acesso a procedimentos armazenados e visualizações)

    • 6
  5. garik
    2011-08-09T00:12:54+08:002011-08-09T00:12:54+08:00

    A melhor prática é colocar uma senha forte e esquecê-la.

    • 5
  6. Marian
    2011-08-11T12:46:14+08:002011-08-11T12:46:14+08:00

    Tenho duas opções em mente agora, por que não se deve ter uma conta SA fraca. Se você tiver uma senha fraca/vazia para SA, uma pessoa má (traduza isso para 'colega amigável') pode:

    • habilite o procedimento do sistema xp_cmdshell e, usando os privilégios da conta de serviço Sql Server, danifique sua caixa local (crie/remova arquivos...). Ter baixa segurança para SA não diz muito sobre as configurações da instância, mas pode implicar que o usuário do serviço pode seguir práticas ruins (como ser um administrador :-));

    • habilitar e-mail em sua instância e encaminhar rapidamente um pequeno script divertido de spam (que provavelmente causará alguns problemas com seu provedor de internet ou com seus colegas... dependendo de onde os e-mails vão ;-));

    Não vou apontar os fatos óbvios de que ele pode descartar bancos de dados, logins ... etc.

    • Não é essencialmente a mesma coisa? Quais são as vantagens/desvantagens?
    • Não necessariamente: por exemplo - na instância do SQL Server do seu laptop, a diferença entre a autenticação do Windows e a autenticação SQL significa que, em teoria, um invasor externo poderia usar apenas uma conta SQL, porque a autenticação do Windows não pode ser usada fora do seu próprio domínio conta. Um usuário pode escanear laptops vizinhos do shopping onde você está bebendo seu café e pode ver que você tem uma instância SQL instalada e iniciada e pode tentar se divertir de graça. Não é que isso aconteça com frequência... mas é uma possibilidade :-).

    • Como a prática recomendada aumenta a segurança de minhas instâncias do SQL Server?

    • Como todas as melhores práticas neste mundo fazem o seu trabalho..diminui as chances de uma possível desvantagem (por exemplo: a melhor prática de fazer atividade física diminuirá as chances de você ser como eu.. um preguiçoso) que poderia ocorrer de outra forma.

    • Isso se aplica apenas às instâncias de produção ou também às nossas instâncias de desenvolvimento interno?

    • Digamos que eu sugira implementar as melhores práticas de segurança (testadas e modificadas de acordo com as necessidades do seu ambiente) pelo menos na produção. Mas se no desenvolvimento você também usa dados de produção (sensíveis, etc.), isso é uma forte indicação de que você também deve alterar suas práticas de desenvolvimento.
    • 1
  7. Richard
    2011-08-10T06:42:53+08:002011-08-10T06:42:53+08:00

    Respondendo à sua pergunta final, usamos contas SA em todos os nossos bancos de dados de desenvolvimento (com a senha "sa", diga-se de passagem!)

    No entanto, é importante observar que não armazenamos os dados e não os geramos. Nossos bancos de dados são usados ​​exclusivamente para um armazenamento de dados para um aplicativo C/C++. Esses bancos de dados de desenvolvimento contêm apenas dados de teste e são frequentemente criados, eliminados, modificados, etc.\

    Além disso, igualmente crítico, todos os bancos de dados de desenvolvimento são instalados em máquinas de desenvolvimento. (Uma cópia por desenvolvedor, pelo menos!) Portanto, se alguém bagunçar uma instalação inteira, eles apenas bagunçam a si mesmos e a mais ninguém.

    Quando se trata de um ambiente em que você deseja garantir que seu banco de dados, tabelas e dados sejam realmente consistentes e seguros, você deseja uma senha SA boa e sólida. Se você deixar isso fraco, qualquer pessoa terá acesso total aos seus dados e poderá destruir completamente seu banco de dados.

    Para um grupo de desenvolvedores com suas próprias cópias do banco de dados que contêm apenas dados de teste, ainda não encontrei um argumento sólido para manter uma conta SA forte.

    • 0
  8. Ivan Stankovic
    2014-05-16T10:25:35+08:002014-05-16T10:25:35+08:00

    Qualquer parâmetro de segurança do sistema SQL Server padrão fornecido deve ser modificado. É recomendável não usar o modo misto (habilita a autenticação do Windows e do SQL Server) para autenticação. Em vez disso, mude apenas para a autenticação do Windows - que aplicará a política de senha do Windows - verificando o comprimento da senha, a duração e o histórico. O recurso da política de senha do Windows que a torna diferente da autenticação do SQL Server é o bloqueio de login - após várias tentativas sucessivas de logon com falha, o login fica bloqueado e inutilizável para uso posterior

    Por outro lado, a autenticação do SQL Server não fornece nenhum método para detectar tentativas de ataque de força bruta e, o que é pior, o SQL Server é otimizado para lidar com um grande número de tentativas rápidas de login. Portanto, se a autenticação do SQL Server for obrigatória em um sistema SQL Server específico, é altamente recomendável desabilitar o login SA

    • 0

relate perguntas

  • Quando devo usar uma restrição exclusiva em vez de um índice exclusivo?

  • Os procedimentos armazenados impedem a injeção de SQL?

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Protegendo senhas de banco de dados

  • Como determinar se um Índice é necessário ou necessário

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve