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 / coding / Perguntas / 79555092
Accepted
Manngo
Manngo
Asked: 2025-04-04 18:39:06 +0800 CST2025-04-04 18:39:06 +0800 CST 2025-04-04 18:39:06 +0800 CST

Logins e usuários do SQL Server

  • 772

Quero criar uma coleção de bancos de dados e usuários para que cada usuário tenha acesso a apenas um banco de dados.

A pergunta do SO Diferença entre um usuário e um login no SQL Server discute logins e usuários.

Entendo que, geralmente, um login é para o servidor e um usuário é para o banco de dados. No entanto, não consigo ver como isso funciona, pois a senha é definida para o login, não para o usuário.

Isso significa que preciso de um login diferente para cada banco de dados ou existe uma maneira de fazer isso com um único login com vários usuários, cada um com sua própria senha?

Quero fazer isso em SQL, não na interface gráfica, pois preciso criar um script para isso.

sql-server
  • 2 2 respostas
  • 59 Views

2 respostas

  • Voted
  1. Aaron Bertrand
    2025-04-04T18:48:48+08:002025-04-04T18:48:48+08:00

    Isso parece um caso para bancos de dados contidos .

    1. Defina o suporte de contenção no nível do servidor:

       EXEC sys.sp_configure 'contained database authentication', 1;
       RECONFIGURE WITH OVERRIDE;
      
    2. Defina a contenção parcial no nível do banco de dados (observe que isso requer um bloqueio exclusivo, portanto pode precisar de um único usuário e não funcionará muito bem se um banco de dados estiver em um AG):

       ALTER DATABASE splunge SET CONTAINMENT = PARTIAL;
      
    3. Crie um usuário com senha somente naquele banco de dados e dê a ele as permissões apropriadas, por exemplo:

       USE splunge;
       GO
       CREATE USER mort WITH PASSWORD = 'Str0ng}P@ssword_Yo';
       ALTER ROLE db_owner ADD MEMBER mort;
      

    Esteja ciente das limitações mencionadas na página e dos impactos em outros recursos .

    • 4
  2. Best Answer
    Thom A
    2025-04-04T18:45:51+08:002025-04-04T18:45:51+08:00

    Isso significa que preciso de um login diferente para cada banco de dados ou existe uma maneira de fazer isso com um único login com vários usuários, cada um com sua própria senha?

    Se você estiver usando Logins SQL, então cada indivíduo precisará do seu próprio LOGIN, sim, que então precisará ser USERcriado no(s) respectivo(s) banco(s) de dados aos quais a pessoa precisa ter acesso. Como um exemplo simplificado demais:

    CREATE DATABASE SteveDB;
    CREATE DATABASE JaneDB;
    GO
    
    CREATE LOGIN Steve WITH PASSWORD = 'ABC123!"£', DEFAULT_DATABASE = SteveDB;
    CREATE LOGIN Jane WITH PASSWORD = 'XYZ789*()', DEFAULT_DATABASE = JaneDB;
    GO
    USE SteveDB;
    GO
    CREATE USER Steve FOR LOGIN Steve;
    ALTER ROLE db_owner ADD MEMBER Steve; --Example demonstration of giving them high permissions. You may well want them to have lower permissions
    GO
    USE JaneDB;
    GO
    CREATE USER Jane FOR LOGIN Jane;
    ALTER ROLE db_owner ADD MEMBER Jane;
    GO
    

    Se você estiver usando bancos de dados contidos, então você pode "pular" a LOGINcriação, e em vez disso criar um USERcom uma senha. A pessoa que está autenticando no SQL Server, no entanto, precisaria garantir que especificasse o banco de dados ao qual deseja se conectar quando autenticar, pois não fazer isso resultaria em um erro de conexão. Note, no entanto, que bancos de dados contidos funcionam um pouco diferente dos não contidos; a maior coisa que as pessoas parecem "esquecer", é que consultas entre bancos de dados não são permitidas em tais bancos de dados.

    Usando o exemplo simplificado anterior:

    CREATE DATABASE SteveDB CONTAINMENT = PARTIAL;
    CREATE DATABASE JaneDB CONTAINMENT = PARTIAL;
    GO
    USE SteveDB;
    GO
    CREATE USER Steve WITH PASSWORD = 'ABC123!"£';
    ALTER ROLE db_owner ADD MEMBER Steve;
    GO
    USE JaneDB;
    GO
    CREATE USER Jane WITH PASSWORD = 'XYZ789*()';
    ALTER ROLE db_owner ADD MEMBER Jane;
    GO
    
    • 3

relate perguntas

  • Extraia um valor entre 2 tubos

  • Sintaxe incorreta próxima ao erro 'C:' no aplicativo Microsoft VB Console

  • Não consigo conectar o SQL Server no VS Code

  • Compare os dados de duas tabelas com base na coluna-chave e obtenha um relatório personalizado

  • O loop no TSQL e a instrução de atualização não funcionam

Sidebar

Stats

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

    Reformatar números, inserindo separadores em posições fixas

    • 6 respostas
  • Marko Smith

    Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não?

    • 2 respostas
  • Marko Smith

    Problema com extensão desinstalada automaticamente do VScode (tema Material)

    • 2 respostas
  • Marko Smith

    Vue 3: Erro na criação "Identificador esperado, mas encontrado 'import'" [duplicado]

    • 1 respostas
  • Marko Smith

    Qual é o propósito de `enum class` com um tipo subjacente especificado, mas sem enumeradores?

    • 1 respostas
  • Marko Smith

    Como faço para corrigir um erro MODULE_NOT_FOUND para um módulo que não importei manualmente?

    • 6 respostas
  • Marko Smith

    `(expression, lvalue) = rvalue` é uma atribuição válida em C ou C++? Por que alguns compiladores aceitam/rejeitam isso?

    • 3 respostas
  • Marko Smith

    Um programa vazio que não faz nada em C++ precisa de um heap de 204 KB, mas não em C

    • 1 respostas
  • Marko Smith

    PowerBI atualmente quebrado com BigQuery: problema de driver Simba com atualização do Windows

    • 2 respostas
  • Marko Smith

    AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos

    • 1 respostas
  • Martin Hope
    Fantastic Mr Fox Somente o tipo copiável não é aceito na implementação std::vector do MSVC 2025-04-23 06:40:49 +0800 CST
  • Martin Hope
    Howard Hinnant Encontre o próximo dia da semana usando o cronógrafo 2025-04-21 08:30:25 +0800 CST
  • Martin Hope
    Fedor O inicializador de membro do construtor pode incluir a inicialização de outro membro? 2025-04-15 01:01:44 +0800 CST
  • Martin Hope
    Petr Filipský Por que os conceitos do C++20 causam erros de restrição cíclica, enquanto o SFINAE antigo não? 2025-03-23 21:39:40 +0800 CST
  • Martin Hope
    Catskul O C++20 mudou para permitir a conversão de `type(&)[N]` de matriz de limites conhecidos para `type(&)[]` de matriz de limites desconhecidos? 2025-03-04 06:57:53 +0800 CST
  • Martin Hope
    Stefan Pochmann Como/por que {2,3,10} e {x,3,10} com x=2 são ordenados de forma diferente? 2025-01-13 23:24:07 +0800 CST
  • Martin Hope
    Chad Feller O ponto e vírgula agora é opcional em condicionais bash com [[ .. ]] na versão 5.2? 2024-10-21 05:50:33 +0800 CST
  • Martin Hope
    Wrench Por que um traço duplo (--) faz com que esta cláusula MariaDB seja avaliada como verdadeira? 2024-05-05 13:37:20 +0800 CST
  • Martin Hope
    Waket Zheng Por que `dict(id=1, **{'id': 2})` às vezes gera `KeyError: 'id'` em vez de um TypeError? 2024-05-04 14:19:19 +0800 CST
  • Martin Hope
    user924 AdMob: MobileAds.initialize() - "java.lang.Integer não pode ser convertido em java.lang.String" para alguns dispositivos 2024-03-20 03:12:31 +0800 CST

Hot tag

python javascript c++ c# java typescript sql reactjs html

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