CREATE USER (Transact-SQL)

Aplica-se a:SQL ServerBanco de Dados SQL do AzureInstância Gerenciada SQL do AzureBanco de Dados SQL do Azure Synapse Analyticsno Microsoft Fabric

Adiciona um usuário ao banco de dados atual. A lista seguinte mostra os 13 tipos de utilizadores juntamente com uma amostra da sintaxe mais básica:

Note

Embora o Microsoft Entra ID seja o novo nome para o Azure Ative Directory (Azure AD), para evitar a interrupção de ambientes existentes, o Azure AD ainda permanece em alguns elementos codificados, como campos de interface do usuário, provedores de conexão, códigos de erro e cmdlets. Neste artigo, os dois nomes são intercambiáveis.

Usuários com base em logins em master

  • Usuário baseado em um login baseado em uma conta do Windows Ative Directory. CREATE USER [Contoso\test];

  • Usuário baseado em um login baseado em um grupo do Windows. CREATE USER [Contoso\Sales];

  • Utilizador baseado num login que utiliza autenticação SQL Server. CREATE USER Mary;

  • Usuário baseado em um login do Microsoft Entra. CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com]

    Note

    de entidades de servidor do Microsoft Entra (logons) estão atualmente em visualização pública para o Banco de Dados SQL do Azure.

    Note

    A base de dados SQL no Microsoft Fabric não suporta logins nem utilizadores baseados em logins.

Utilizadores que se autenticam na base de dados - Use utilizadores contidos para ajudar a tornar a sua base de dados mais portátil.
Sempre permitido no Base de Dados SQL do Azure. Apenas permitido em um banco de dados contido no SQL Server.

  • Usuário baseado em um usuário do Windows que não tem login. CREATE USER [Contoso\test];

  • Usuário baseado em um grupo do Windows que não tem login. CREATE USER [Contoso\Sales];

  • Usuário no Banco de Dados SQL ou no Azure Synapse Analytics com base em um usuário do Microsoft Entra. CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;

  • Usuário de banco de dados contido com senha. (Não disponível no Azure Synapse Analytics.) CREATE USER Mary WITH PASSWORD = '********';

Usuários com base em entidades do Windows que se conectam por meio de logins de grupo do Windows

  • Usuário baseado em um usuário do Windows que não tem login, mas pode se conectar ao Mecanismo de Banco de Dados por meio da associação a um grupo do Windows. CREATE USER [Contoso\test];

  • Usuário baseado em um grupo do Windows que não tem login, mas pode se conectar ao Mecanismo de Banco de Dados por meio da associação a um grupo diferente do Windows. CREATE USER [Contoso\test];

Usuários que não podem autenticar - Esses usuários não podem fazer logon no SQL Server ou no Banco de dados SQL.

  • Usuário sem login. Não posso iniciar sessão, mas podem ser concedidas permissões. CREATE USER CustomApp WITHOUT LOGIN;
  • Usuário baseado em um certificado. Não é possível fazer login, mas podem receber permissões e assinar módulos. CREATE USER TestProcess FOR CERTIFICATE Contoso50;
  • Usuário baseado em uma chave assimétrica. Não é possível fazer login, mas podem receber permissões e assinar módulos. CREATE User TestProcess FROM ASYMMETRIC KEY Contoso09;

Transact-SQL convenções de sintaxe

Syntax

Sintaxe para SQL Server, Banco de Dados SQL do Azure e Instância Gerenciada SQL do Azure

-- Syntax Users based on logins in master
CREATE USER user_name
    [
        { FOR | FROM } LOGIN login_name
    ]
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

-- Users that authenticate at the database
CREATE USER
    {
      windows_principal [ WITH <options_list> [ , ... ] ]

    | user_name WITH PASSWORD = 'password' [ , <options_list> [ , ... ]
    | Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH OBJECT_ID = 'objectid' ]
    }

 [ ; ]

-- Users based on Windows principals that connect through Windows group logins
CREATE USER
    {
          windows_principal [ { FOR | FROM } LOGIN windows_principal ]
        | user_name { FOR | FROM } LOGIN windows_principal
}
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

-- Users that cannot authenticate
CREATE USER user_name
    {
         WITHOUT LOGIN [ WITH <limited_options_list> [ , ... ] ]
       | { FOR | FROM } CERTIFICATE cert_name
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name
    }
 [ ; ]

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | SID = sid
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name ]
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

-- SQL Database syntax when connected to a federation member
CREATE USER user_name
[;]

-- Syntax for users based on Microsoft Entra logins for Azure SQL Managed Instance
CREATE USER user_name
    [   { FOR | FROM } LOGIN login_name  ]
    | FROM EXTERNAL PROVIDER
    [ WITH <limited_options_list> [ , ... ] ]
[ ; ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
    | ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ ON | OFF ] ]

Sintaxe para o Azure Synapse Analytics

CREATE USER user_name
    [ { { FOR | FROM } { LOGIN login_name }
      | WITHOUT LOGIN
    ]
    [ WITH DEFAULT_SCHEMA = schema_name ]
[;]

CREATE USER Microsoft_Entra_principal FROM EXTERNAL PROVIDER
    [ WITH DEFAULT_SCHEMA = schema_name ]
[;]

Sintaxe para base de dados SQL no Microsoft Fabric e Base de Dados SQL do Azure

CREATE USER
    {
    Microsoft_Entra_principal FROM EXTERNAL PROVIDER [ WITH <limited_options_list> [ , ... ] ]
    | Microsoft_Entra_principal WITH <options_list> [ , ... ]
    }
 [ ; ]

-- Users that cannot authenticate
CREATE USER user_name
    {    WITHOUT LOGIN [ WITH DEFAULT_SCHEMA = schema_name ]
       | { FOR | FROM } CERTIFICATE cert_name
       | { FOR | FROM } ASYMMETRIC KEY asym_key_name
    }
 [ ; ]

<limited_options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | OBJECT_ID = 'objectid'

<options_list> ::=
      DEFAULT_SCHEMA = schema_name
    | SID = sid
    | TYPE = { X | E }

Arguments

user_name

Especifica o nome pelo qual o usuário é identificado dentro desse banco de dados. user_name é um sysname. Pode ter até 128 caracteres. Ao criar um usuário com base em uma entidade do Windows, o nome principal do Windows se torna o nome de usuário, a menos que outro nome de usuário seja especificado.

LOGIN login_name

Especifica o logon para o qual o usuário do banco de dados está sendo criado. login_name deve ser um login válido no servidor. Pode ser um logon baseado em uma entidade do Windows (usuário ou grupo), um logon usando autenticação do SQL Server ou um logon usando uma entidade do Microsoft Entra (usuário, grupo ou aplicativo). Quando esse logon do SQL Server entra no banco de dados, ele adquire o nome e a ID do usuário do banco de dados que está sendo criado. Ao criar um login mapeado a partir de uma entidade do Windows, use o formato [<domainName>\<loginName>]. Para obter exemplos, consulte Resumo da sintaxe.

Se a CREATE USER instrução for a única numa lote SQL, o Base de Dados SQL do Azure suporta a cláusula WITHLOGIN. Se a CREATE USER instrução não for a única num lote SQL ou correr em SQL dinâmico, a cláusula WITH LOGIN não é suportada.

COM DEFAULT_SCHEMA = schema_name

Especifica o primeiro esquema pesquisado pelo servidor quando resolve os nomes dos objetos para este utilizador da base de dados.

'windows_principal'

Especifica a entidade do Windows para a qual o usuário do banco de dados está sendo criado. O windows_principal pode ser um usuário do Windows ou um grupo do Windows. O usuário será criado mesmo que o windows_principal não tenha um login. Ao se conectar ao SQL Server, se o windows_principal não tiver um logon, a entidade do Windows deverá autenticar-se no Mecanismo de Banco de Dados por meio da associação a um grupo do Windows que tenha um logon ou a cadeia de conexão deverá especificar o banco de dados contido como o catálogo inicial. Ao criar um usuário a partir de uma entidade do Windows, use o formato [<domainName>\<loginName>]. Para obter exemplos, consulte Resumo da sintaxe. Os usuários baseados em usuários do Ative Directory são limitados a nomes de menos de 21 caracteres.

'Microsoft_Entra_principal'

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, SQL Database, SQL Managed Instance, Azure Synapse Analytics, base de dados SQL no Microsoft Fabric

Especifica a entidade de segurança do Microsoft Entra para a qual o usuário do banco de dados está sendo criado. O Microsoft_Entra_principal pode ser um usuário do Microsoft Entra, um grupo do Microsoft Entra ou um aplicativo do Microsoft Entra. (Os usuários do Microsoft Entra não podem ter logons de Autenticação do Windows no Banco de dados SQL; somente usuários de banco de dados.) A cadeia de conexão deve especificar o banco de dados contido como o catálogo inicial.

Para os princípios do Microsoft Entra, a CREATE USER sintaxe exige:

  • UserPrincipalName do objeto Microsoft Entra para usuários do Microsoft Entra.

    • CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
    • CREATE USER [alice@fabrikam.onmicrosoft.com] FROM EXTERNAL PROVIDER;
  • Entidades de servidor (logons) do Microsoft Entra introduz a criação de usuários que são mapeados para logons do master Microsoft Entra no banco de dados. Por exemplo, CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];

  • Os utilizadores do Microsoft Entra e as entidades de serviço (aplicações) que são membros de mais de 2048 grupos de segurança do Microsoft Entra não têm suporte para iniciar sessão em bases de dados na Base de Dados SQL do Azure, na Instância Gerida SQL do Azure ou na Sinapse do Azure.

  • DisplayName do objeto Microsoft Entra para grupos do Microsoft Entra e aplicativos do Microsoft Entra. Se tivesse o grupo de segurança Enfermeiros , utilizaria:

    • CREATE USER [Nurses] FROM EXTERNAL PROVIDER;

Para obter mais informações, consulte Conectando-se ao Banco de Dados SQL usando a autenticação do Microsoft Entra.

Para obter mais informações sobre a autenticação do Microsoft Entra no SQL Server, consulte Tutorial: Configurar a autenticação do Microsoft Entra para SQL Server habilitada pelo Azure Arc.

COM SENHA = 'senha'

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, base de dados SQL.

Só pode ser usado em um banco de dados contido. Especifica a senha para o usuário que está sendo criado.

A partir do SQL Server 2012 (11.x), o SQL Server e o Base de Dados SQL do Azure usaram um hash SHA-512 combinado com um sal aleatório e único de 32 bits. Este método tornou estatisticamente inviável para os atacantes deduzir senhas.

O SQL Server 2025 (17.x) introduz um algoritmo de hash iterado, RFC2898, também conhecido como função de derivação de chaves baseada em palavra-passe (PBKDF). Este algoritmo ainda usa SHA-512, mas hashes a senha várias vezes (100.000 iterações), retardando significativamente os ataques de força bruta. Essa alteração melhora a proteção por senha em resposta à evolução das ameaças à segurança e ajuda os clientes a cumprir as diretrizes do NIST SP 800-63b. Esta melhoria de segurança utiliza um algoritmo de hash mais forte, que pode aumentar ligeiramente o tempo de login para os logins de autenticação SQL. O impacto é geralmente menor em ambientes com pooling de ligações, mas pode ser mais notório em cenários sem pooling ou onde a latência de login é monitorizada de perto.

SEM LOGIN

Especifica que o usuário não deve ser mapeado para um logon existente.

CERTIFICATE cert_name

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, base de dados SQL, base de dados SQL no Microsoft Fabric

Especifica o certificado para o qual o usuário do banco de dados está sendo criado.

ASYMMETRIC KEY asym_key_name

Aplica-se a: SQL Server 2008 (10.0.x) e versões posteriores, base de dados SQL, base de dados SQL no Microsoft Fabric

Especifica a chave assimétrica para a qual o usuário do banco de dados está sendo criado.

DEFAULT_LANGUAGE = { NENHUM | <LCID> | <nome da> língua | <language salias> }

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, SQL Database

Especifica o idioma padrão para o novo usuário. Se especificar uma língua padrão para o utilizador e posteriormente alterar a língua padrão da base de dados, a língua padrão do utilizador mantém-se como especificada. Se não especificar uma língua padrão, o utilizador fica com a língua padrão da base de dados. Se não especificar uma linguagem padrão para o utilizador e depois alterar a linguagem padrão da base de dados, a língua padrão do utilizador muda para a nova linguagem padrão da base de dados.

Important

DEFAULT_LANGUAGE é usado apenas para um usuário de banco de dados contido.

SID = sid

Aplica-se a: SQL Server 2012 (11.x) e versões posteriores, e a bases de dados SQL no Microsoft Fabric.

No SQL Server 2012 (11.x) e versões posteriores, aplica-se apenas a utilizadores com palavras-passe (autenticação do SQL Server) numa base de dados contida. Especifica o SID do novo usuário do banco de dados. Se não selecionares esta opção, o SQL Server atribui automaticamente um SID. Use o parâmetro SID para criar usuários em vários bancos de dados que tenham a mesma identidade (SID). Esta funcionalidade é útil ao criar utilizadores em múltiplas bases de dados para se prepararem para o failover Always On. Para determinar o SID de um utilizador, consulte sys.database_principals.

No banco de dados SQL no Microsoft Fabric, sid deve ser uma ID válida da entidade de segurança especificada do Microsoft Entra. Se o principal for um utilizador ou grupo, o ID deve ser um ID de objeto Microsoft Entra do utilizador ou grupo. Se o principal Microsoft Entra for um principal de serviço (uma aplicação ou uma identidade gerida), o ID deve ser um ID de aplicação ou um ID de cliente. A ID especificada deve ser um valor binary(16). O Mecanismo de Banco de Dados não valida a ID especificada no Microsoft Entra. Se usar o SID argumento, deve incluir TYPE.

TYPE = [ E | X ]

Aplica-se a: Banco de dados SQL no Microsoft Fabric e no Banco de Dados SQL do Azure.

Especifica o tipo de uma entidade de segurança do Microsoft Entra. E indica que a entidade de segurança é um usuário ou uma entidade de serviço (um aplicativo ou uma identidade gerenciada). X indica que o principal é um grupo.

ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = [ EM | DESLIGADO ]

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores, SQL Database.

Suprime verificações de metadados criptográficos no servidor em operações de cópia em massa. Isso permite que o usuário copie em massa dados criptografados entre tabelas ou bancos de dados, sem descriptografar os dados. O padrão é OFF.

Warning

O uso indevido desta opção pode levar à corrupção de dados. Para obter mais informações, consulte migrar dados confidenciais protegidos porsempre criptografados .

DE FORNECEDOR EXTERNO

Aplica-se a: SQL Server 2022 (16.x) e versões posteriores, base de dados SQL, Azure SQL Managed Instance, base de dados SQL no Microsoft Fabric

Especifica que a entidade de segurança é para autenticação do Microsoft Entra. O SQL Server valida automaticamente o nome principal fornecido no Microsoft Entra.

Se o principal que emite a CREATE USER declaração for um utilizador principal da Microsoft Entra, o principal ou o grupo do principal deve estar na função de Leitores de Diretório na Microsoft Entra.

No Banco de Dados SQL e na Instância Gerenciada SQL do Azure, se a entidade que emite a instrução CREATE USER for uma entidade de serviço, a identidade do servidor de banco de dados ou da instância gerenciada deverá estar na função Leitores de Diretório no Microsoft Entra.

Na base de dados SQL no Microsoft Fabric, não pode usar FROM EXTERNAL PROVIDER se um principal que emite CREATE USER é um principal de serviço no Microsoft Entra. As entidades de serviço devem usar argumentos TYPE e SID para criar usuários para entidades do Microsoft Entra.

COM OBJECT_ID = 'objectid'

Aplica-se a: SQL Server 2025 (17.x) e versões posteriores, base de dados SQL, Azure SQL Managed Instance, base de dados SQL no Microsoft Fabric

Especifica a ID do objeto Microsoft Entra. Se especificar o OBJECT_ID, pode user_name ser um alias definido pelo utilizador formado a partir do nome principal original com um sufixo acrescentado. O user_name deve ser um nome exclusivo na visão sys.database_principals e aderir a todas as outras limitações sysname. Para mais informações sobre a utilização da WITH OBJECT_ID opção, consulte os logins da Microsoft Entra e utilizadores com nomes de exibição não únicos.

Note

A partir do SQL Server 2025 (17.x), a WITH OBJECT_ID opção é suportada para logins do Microsoft Entra e utilizadores com nomes de exibição únicos.

Se o nome de exibição do principal de serviço não for duplicado, use o predefinido CREATE LOGIN ou CREATE USER a instrução. A extensão WITH OBJECT_ID é um item de reparo de solução de problemas implementado para uso com entidades de serviço não exclusivas. Não é recomendado usá-lo com um princípio de serviço único. Usar a WITH OBJECT_ID extensão para um principal de serviço sem adicionar um sufixo corre com sucesso, mas não é óbvio para qual principal de serviço foi criado o login ou o utilizador. Recomenda-se criar um alias usando um sufixo para identificar de forma única o principal do serviço.

Remarks

Se omitires FOR LOGIN, o novo utilizador da base de dados mapeia para o login do SQL Server com o mesmo nome.

O esquema padrão é o primeiro esquema que o servidor procura quando resolve os nomes dos objetos para este utilizador da base de dados. Salvo indicação em contrário, o esquema padrão é o proprietário dos objetos criados por este utilizador da base de dados.

Se o utilizador tiver um esquema predefinido, o servidor usa esse esquema predefinido. Se o utilizador não tiver um esquema padrão mas for membro de um grupo que tem um esquema padrão, o servidor usa o esquema padrão do grupo. Se o utilizador não tiver um esquema padrão e pertencer a vários grupos, o servidor usa o esquema padrão configurado do grupo Windows com o mais baixo principal_id entre os grupos que têm um esquema padrão explicitamente definido. Não podes selecionar explicitamente um dos esquemas predefinidos disponíveis como o esquema preferido. Se o servidor não conseguir determinar um esquema padrão para um utilizador, usa esse dbo esquema.

Podes definir DEFAULT_SCHEMA antes de criar o esquema para o qual aponta.

Não podes especificar DEFAULT_SCHEMA quando criar um utilizador mapeado para um certificado ou uma chave assimétrica.

O servidor ignora o valor de DEFAULT_SCHEMA se o utilizador é membro do sysadmin papel fixo do servidor. Todos os membros do sysadmin papel fixo do servidor têm um esquema padrão de dbo.

A WITHOUT LOGIN cláusula cria um utilizador que não está mapeado para um login autenticado por SQL. Ele pode se conectar a outros bancos de dados como convidado. Pode atribuir permissões a este utilizador sem iniciar sessão. Quando o contexto de segurança muda para um utilizador sem login, o utilizador original recebe as permissões do utilizador sem iniciar sessão. Para um exemplo, veja D. Criar e usar um utilizador sem login.

Somente os usuários mapeados para entidades do Windows podem conter o caractere de barra invertida (\).

Não podes usar CREATE USER para criar um utilizador convidado porque o utilizador convidado já existe em todas as bases de dados. Pode ativar o utilizador convidado concedendo-lhe CONNECT permissão, como mostrado:

GRANT CONNECT TO guest; 
GO  

Pode ver informações sobre utilizadores de bases de dados na vista de catálogo sys.database_principals .

Use a extensão de sintaxe FROM EXTERNAL PROVIDER para criar logons do Microsoft Entra no nível de servidor no Banco de Dados SQL do Azure e na Instância Gerenciada SQL do Azure. Ao usar logins do Microsoft Entra, pode mapear os princípios do Microsoft Entra ao nível da base de dados para os logins do Microsoft Entra ao nível do servidor. Para criar um utilizador Microsoft Entra a partir de um login Microsoft Entra, utilize a seguinte sintaxe:

CREATE USER [Microsoft_Entra_principal] FROM LOGIN [Microsoft Entra login];

Quando cria o utilizador na base de dados SQL do Azure, o login_name deve corresponder a um login de Microsoft Entra existente. Caso contrário, usar a FROM EXTERNAL PROVIDER cláusula cria apenas um utilizador Microsoft Entra sem login na master base de dados. Por exemplo, o seguinte comando cria um utilizador contido:

CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;

Resumo da sintaxe

Usuários com base em logins em master

A lista a seguir mostra a sintaxe possível para usuários com base em logins. As opções de esquema padrão não estão listadas.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER SQLAUTHLOGIN
  • CREATE USER SQLAUTHLOGIN FOR LOGIN SQLAUTHLOGIN
  • CREATE USER SQLAUTHLOGIN FROM LOGIN SQLAUTHLOGIN

Usuários que se autenticam no banco de dados

A lista a seguir mostra a sintaxe possível para usuários que só pode ser usada em um banco de dados contido. Os usuários criados não estarão relacionados a nenhum logon no banco de dados mestre. O esquema padrão e as opções de idioma não estão listados.

Important

Essa sintaxe concede aos usuários acesso ao banco de dados e também concede novo acesso ao Mecanismo de Banco de Dados.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER Test WITH PASSWORD = '<strong password>'

Usuários baseados em entidades do Windows sem logins no banco de dados do sistema master

A lista a seguir mostra a sintaxe possível para usuários que têm acesso ao Mecanismo de Banco de Dados por meio de um grupo do Windows, mas não têm um logon no banco de dados do sistema master. Essa sintaxe pode ser usada em todos os tipos de bancos de dados. O esquema padrão e as opções de idioma não estão listados.

Essa sintaxe é semelhante aos usuários com base em logins em master, mas essa categoria de usuário não tem um login em master. O usuário deve ter acesso ao Mecanismo de Banco de Dados por meio de um logon de grupo do Windows.

Essa sintaxe é semelhante aos usuários de banco de dados contidos com base em entidades do Windows, mas essa categoria de usuário não obtém novo acesso ao Mecanismo de Banco de Dados.

  • CREATE USER [Domain1\WindowsUserTest]
  • CREATE USER [Domain1\WindowsUserTest] FOR LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsUserTest] FROM LOGIN Domain1\WindowsUserTest
  • CREATE USER [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FOR LOGIN [Domain1\WindowsGroupManagers]
  • CREATE USER [Domain1\WindowsGroupManagers] FROM LOGIN [Domain1\WindowsGroupManagers]

Usuários que não podem autenticar

A lista a seguir mostra a sintaxe possível para usuários que não podem fazer logon no SQL Server.

  • CREATE USER RIGHTSHOLDER WITHOUT LOGIN
  • CREATE USER CERTUSER FOR CERTIFICATE SpecialCert
  • CREATE USER CERTUSER FROM CERTIFICATE SpecialCert
  • CREATE USER KEYUSER FOR ASYMMETRIC KEY SecureKey
  • CREATE USER KEYUSER FROM ASYMMETRIC KEY SecureKey

Segurança

A criação de um usuário concede acesso a um banco de dados, mas não concede automaticamente nenhum acesso aos objetos em um banco de dados. Depois de criar um usuário, as ações comuns são adicionar usuários a funções de banco de dados que tenham permissão para acessar objetos de banco de dados ou conceder permissões de objeto ao usuário. Para obter informações sobre como criar um sistema de permissões, consulte Introdução às permissões do mecanismo de banco de dados.

Considerações especiais para bases de dados contidas

Ao se conectar a um banco de dados contido, se o usuário não tiver um logon no banco de dados master, a cadeia de conexão deverá incluir o nome do banco de dados contido como o catálogo inicial. O parâmetro de catálogo inicial é sempre necessário para um usuário de banco de dados contido com senha.

Em um banco de dados contido, a criação de usuários ajuda a separar o banco de dados da instância do Mecanismo de Banco de Dados para que o banco de dados possa ser facilmente movido para outra instância do SQL Server. Para obter mais informações, consulte Bancos de dados contidos e Usuários de banco de dados contidos - Tornando seu banco de dados portátil. Para alterar um utilizador de base de dados de um utilizador baseado num login autenticado por SQL para um utilizador de base de dados contido com palavra-passe, veja sp_migrate_user_to_contained (Transact-SQL).

Em um banco de dados contido, os usuários não precisam ter logins no banco de dados master. Os administradores do Mecanismo de Banco de Dados devem entender que o acesso a um banco de dados contido pode ser concedido no nível do banco de dados, em vez do nível do Mecanismo de Banco de Dados. Para obter mais informações, consulte Práticas recomendadas de segurança com bancos de dados contidos.

Ao usar usuários de banco de dados contidos no Banco de Dados SQL do Azure, configure o acesso usando uma regra de firewall no nível de banco de dados, em vez de uma regra de firewall no nível de servidor. Para obter mais informações, consulte sp_set_database_firewall_rule (Banco de Dados SQL do Azure).

Para utilizadores de bases de dados contidas como SQL Server 2022 (16.x), Base de Dados SQL do Azure, Azure SQL Managed Instance e Azure Synapse Analytics, o SSMS suporta autenticação multifator. Para obter mais informações, consulte Usando a autenticação multifator do Microsoft Entra.

Permissions

Requer ALTERAR QUALQUER USER permissão na base de dados.

Permissões para SQL Server 2022 e versões posteriores

Requer permissão CREATE USER no banco de dados.

Examples

A. Crie um utilizador de base de dados com base num login do SQL Server

O exemplo seguinte cria primeiro um login do SQL Server nomeado test na master base de dados, e depois cria um utilizador test correspondente na base de dados em AdventureWorks2025.

--Connect to the master database
CREATE LOGIN test   
    WITH PASSWORD = '<strong password>';  

Altere para um banco de dados de usuários. Por exemplo, no SQL Server, use a instrução USE [AdventureWorks2022]. No Base de Dados SQL do Azure, a USE declaração não está disponível. Em vez disso, ligue-se diretamente à base de dados pretendida e execute o resto do exemplo de código. Este exemplo baseado em login não se aplica à base de dados SQL no Microsoft Fabric, que não suporta logins nem utilizadores baseados em logins.

--Connect to a user database
CREATE USER test FOR LOGIN test;
GO   

B. Criar um utilizador de base de dados com um esquema predefinido

O exemplo seguinte cria primeiro um login de servidor nomeado testlogin com uma palavra-passe que fornece, e depois cria um utilizador testusercorrespondente da base de dados , com o esquema Marketingpadrão .

--Connect to the master database
CREATE LOGIN testlogin
    WITH PASSWORD = '<strong password>';  

Altere para um banco de dados de usuários. Por exemplo, no SQL Server, use a instrução USE [AdventureWorks2022]. No Base de Dados SQL do Azure e na base de dados SQL no Microsoft Fabric, a USE declaração não está disponível. Em vez disso, ligue-se diretamente à base de dados pretendida e execute o resto do exemplo de código.

--Connect to a user database
CREATE USER testuser FOR LOGIN testlogin
    WITH DEFAULT_SCHEMA = Marketing;  

C. Criar um utilizador de base de dados a partir de um certificado

O exemplo a seguir cria um usuário de banco de dados test a partir do certificado Contoso_Cert. Para mais informações, vejaCREATE CERTIFICATE (Transact-SQL).

USE AdventureWorks2022;  
CREATE CERTIFICATE Contoso_Cert  
    ENCRYPTION BY PASSWORD = '<strong password>'  
    WITH SUBJECT = 'Contoso Facility Supervisors',
    EXPIRY_DATE = '11/11/2011';  
GO  
CREATE USER test FOR CERTIFICATE Contoso_Cert;  
GO   

D. Criar e usar um utilizador sem login

O exemplo a seguir cria um CustomApp de usuário de banco de dados que não é mapeado para um logon do SQL Server. Em seguida, o exemplo concede a um usuário adventure-works\test permissão para representar o usuário CustomApp.

USE AdventureWorks2022;  
CREATE USER CustomApp WITHOUT LOGIN ;  
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\test] ;  
GO

Para usar as credenciais CustomApp, o usuário adventure-works\test executa a instrução a seguir.

EXECUTE AS USER = 'CustomApp' ;  
GO  

Para reverter para as credenciais adventure-works\test, o usuário executa a instrução a seguir.

REVERT ;  
GO  

E. Criar um utilizador de base de dados contido com palavra-passe

O exemplo a seguir cria um usuário de banco de dados contido com senha. Só pode executar este exemplo numa base de dados contida.

Este exemplo funciona na base de dados SQL se remover DEFAULT_LANGUAGE.

USE AdventureWorks2022;  
GO  
CREATE USER test  
WITH PASSWORD='<password>'
    , DEFAULT_LANGUAGE=[Brazilian]  
    , DEFAULT_SCHEMA=[dbo]  
GO   

F. Criar um utilizador de base de dados contido para um login de domínio

O exemplo seguinte cria um utilizador de base de dados contido para um login nomeado test num domínio chamado Contoso. Só pode executar este exemplo numa base de dados contida.

USE AdventureWorks2022;
GO  
CREATE USER [Contoso\test] ;  
GO   

G. Crie um utilizador de base de dados contido com um SID específico

O exemplo seguinte cria um utilizador de base de dados contida autenticado pelo SQL Server chamado TestUser. Só pode executar este exemplo numa base de dados contida.

USE AdventureWorks2022;  
GO  
CREATE USER TestUser WITH PASSWORD = '<strong password>'  
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;

H. Crie um utilizador para copiar dados encriptados

O exemplo a seguir cria um usuário que pode copiar dados protegidos pelo recurso Always Encrypted de um conjunto de tabelas, contendo colunas criptografadas, para outro conjunto de tabelas com colunas criptografadas (no mesmo banco de dados ou em um banco de dados diferente). Para obter mais informações, consulte migrar dados confidenciais protegidos porsempre criptografados .

Aplica-se a: SQL Server 2016 (13.x) e versões posteriores, SQL Database.

CREATE USER [test]   
WITH   
      DEFAULT_SCHEMA = dbo  
    , ALLOW_ENCRYPTED_VALUE_MODIFICATIONS = ON ;  

I. Crie um utilizador Microsoft Entra a partir de um login Microsoft Entra no Base de Dados SQL do Azure e no Azure SQL Managed Instance

Para criar um usuário do Microsoft Entra a partir de um logon do Microsoft Entra, use a sintaxe a seguir.

Inicie sessão no seu servidor lógico Base de Dados SQL do Azure ou SQL Managed Instance usando um login Microsoft Entra. Use o login de administrador do servidor ou um login que seja membro da loginmanager função na Base de Dados SQL, ou que tenha recebido a sysadmin função na SQL Managed Instance.

O script T-SQL a seguir cria um usuário do Microsoft Entra test@contoso.com, a partir do test@contoso.comde login. Este login foi criado no CREATE LOGIN exemplo.

CREATE USER [test@contoso.com] FROM LOGIN [test@contoso.com];
GO

Important

Ao criar um USER login a partir de um Microsoft Entra, especifique o user_name como o mesmo login_name de LOGIN.

Há suporte para a criação de um usuário do Microsoft Entra como um grupo a partir de um login do Microsoft Entra que é um grupo.

CREATE USER [MS Entra group] FROM LOGIN [MS Entra group];

GO

Você também pode criar um usuário do Microsoft Entra a partir de um login do Microsoft Entra que seja um grupo.

CREATE USER [test@contoso.com] FROM LOGIN [MS Entra group];

GO

J. Criar um usuário de banco de dados contido a partir de uma entidade de segurança do Microsoft Entra

A sintaxe a seguir cria um usuário do Microsoft Entra test@contoso.com, em um banco de dados sem um logon associado no master. O Mecanismo de Banco de Dados valida que o usuário especificado existe no Microsoft Entra.

CREATE USER [test@contoso.com] FROM EXTERNAL PROVIDER;
GO

Na base de dados SQL no Microsoft Fabric, não pode usar FROM EXTERNAL PROVIDER se um principal que emite CREATE USER é um principal de serviço no Microsoft Entra.

K. Criar um usuário de banco de dados contido a partir de uma entidade de segurança do Microsoft Entra sem validação

Aplica-se a: base de dados SQL no Microsoft Fabric e Base de Dados SQL do Azure

Os exemplos nesta seção criam usuários de banco de dados para entidades do Microsoft Entra, sem validar nomes principais no Microsoft Entra.

O exemplo T-SQL a seguir cria um usuário de banco de dados para o usuário do Microsoft Entra, chamado test@contoso.com. Substitua <unique identifier sid> pelo SID do novo usuário para a ID do objeto do usuário do Microsoft Entra.

DECLARE @principal_name SYSNAME = 'test@contoso.com';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- user's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = E;'
EXEC (@cmd);

O exemplo a seguir cria um usuário de banco de dados para a entidade de serviço do Microsoft Entra, chamado HRApp. Substitua <unique identifier sid> pelo SID do novo usuário para a ID do cliente da entidade de serviço no Microsoft Entra.

Note

Use o ID do cliente, e não o ID do objeto, ao especificar um principal de serviço Microsoft Entra, User-Assigned Identidade Gerida (UAMI) ou System-Assigned Identidade Gerida (SAMI).

DECLARE @principal_name SYSNAME = 'HRApp';
DECLARE @clientId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's client ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castClientId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @clientId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castClientId, TYPE = E;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castClientId + ', TYPE = E;'
EXEC (@cmd);

O exemplo a seguir cria um usuário de banco de dados para o grupo Microsoft Entra, chamado HR. Substitua <unique identifier sid> pelo SID do novo usuário para a ID do objeto do grupo.

DECLARE @principal_name SYSNAME = 'HR';
DECLARE @objectId UNIQUEIDENTIFIER = '<unique identifier sid>'; -- principal's object ID in Microsoft Entra

-- Convert the guid to the right type
DECLARE @castObjectId NVARCHAR(MAX) = CONVERT(VARCHAR(MAX), CONVERT (VARBINARY(16), @objectId), 1);

-- Construct command: CREATE USER [@principal_name] WITH SID = @castObjectId, TYPE = X;
DECLARE @cmd NVARCHAR(MAX) = N'CREATE USER [' + @principal_name + '] WITH SID = ' + @castObjectId + ', TYPE = X;'
EXEC (@cmd);