CREATE USER (Transact-SQL)
Adiciona um usuário ao banco de dados atual. Há onze tipos de usuários:
Usuários baseados em logons no mestre Este é o tipo mais comum de usuário.
Usuário baseado em um logon baseado em um usuário do Windows.
Usuário baseado em um logon baseado em um grupo do Windows.
Usuário baseado em um logon que usa a autenticação do SQL Server.
Usuários que se autenticam no banco de dados Permitidos apenas em um banco de dados contido.
Usuário baseado em um usuário do Windows que não tem logon.
Usuário baseado em um grupo do Windows que não tem logon.
Usuário de banco de dados contido com senha.
Usuários baseados em entidades de segurança do Windows que se conectam por logons de grupo do Windows
Usuário baseado em um usuário do Windows que não tem logon, mas pode conectar-se ao Mecanismo de Banco de Dados por meio de associação em um grupo do Windows.
Usuário baseado em um grupo do Windows que não tem logon, mas pode conectar-se ao Mecanismo de Banco de Dados por meio de associação em um grupo diferente do Windows.
Usuários que não podem se autenticar Estes usuários não podem fazer logon no SQL Server.
Usuário sem um logon. Não pode fazer logon, mas pode receber permissões.
Usuário baseado em um certificado. Não pode fazer logon, mas pode receber permissões e assinar módulos.
Usuário baseado em uma chave assimétrica. Não pode fazer logon, mas pode receber permissões e assinar módulos.
Convenções da sintaxe Transact-SQL
Sintaxe
Users based on logins in master
CREATE USER user_name
[
{ FOR | FROM } LOGIN login_name
]
[ WITH DEFAULT_SCHEMA = schema_name ]
[ ; ]
Users that authenticate at the database
CREATE USER
{
windows_principal [ WITH <options_list> [ ,... ] ]
| user_name WITH PASSWORD = 'password' [ , <options_list> [ ,... ]
}
[ ; ]
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 DEFAULT_SCHEMA = schema_name ]
[ ; ]
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
}
[ ; ]
<options_list> ::=
DEFAULT_SCHEMA = schema_name
| DEFAULT_LANGUAGE = { NONE | lcid | language name | language alias }
| SID = sid
Argumentos
user_name
Especifica o nome pelo qual o usuário é identificado nesse banco de dados. user_name é sysname. Pode ter até 128 caracteres. Ao criar um usuário baseado em uma entidade de segurança do Windows, o nome da entidade de segurança do Windows se tornará o nome do usuário, a menos que outro nome de usuário seja especificado.LOGON login_name
Especifica o logon para o qual o usuário do banco de dados está sendo criado. login_name deve se um logon válido no servidor. Pode ser um logon baseado em uma entidade de segurança do Windows (usuário ou grupo) ou um logon que usa a autenticação do SQL Server. Quando esse logon do SQL Server entra no banco de dados, ele adquire o nome e a ID do usuário de banco de dados que está sendo criado. Ao criar um logon mapeado de uma entidade de segurança do Windows, use o formato [<domainName>\<loginName>]. Para obter exemplos, consulte Resumo da sintaxe.WITH DEFAULT_SCHEMA = schema_name
Especifica o primeiro esquema que será pesquisado pelo servidor quando ele resolver os nomes de objetos para esse usuário de banco de dados.windows_principal'
Especifica a entidade de segurança do Windows para a qual o usuário de banco de dados está sendo criado. O windows_principal pode ser um usuário ou um grupo do Windows. O usuário será criado mesmo que o windows_principal não tenha um logon. Ao conectar-se ao SQL Server, se o windows_principal não tiver um logon, a entidade de segurança do Windows deverá autenticar-se no Mecanismo de Banco de Dados por meio de associação em 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 de segurança do Windows, use o formato [<domainName>\<loginName>]. Para obter exemplos, consulte Resumo da sintaxe.WITH PASSWORD = 'password'
Pode ser usado apenas em um banco de dados independente. Especifica a senha do usuário que está sendo criado.WITHOUT LOGIN
Especifica que o usuário não deve ser mapeado para um logon existente.CERTIFICATE cert_name
Especifica o certificado para o qual o usuário do banco de dados está sendo criado.ASYMMETRIC KEY asym_key_name
Especifica a chave assimétrica para a qual o usuário de banco de dados está sendo criado.DEFAULT_LANGUAGE = { NONE | <lcid> | <language name> | <language alias> }
Especifica o idioma padrão do novo usuário. Se for especificado um idioma padrão para o usuário e o idioma padrão do banco de dados for alterado posteriormente, o idioma padrão dos usuários permanecerá conforme especificado. Se nenhum idioma padrão for especificado, o idioma padrão do usuário será o idioma padrão do banco de dados. Se o idioma padrão do usuário não for especificado, e o idioma padrão do banco de dados for alterado posteriormente, o idioma padrão do usuário será alterado para o novo idioma padrão do banco de dados.Importante DEFAULT_LANGUAGE é usado apenas para um usuário de banco de dados contido.
SID = sid
Aplica-se somente a usuários com senhas (autenticação do SQL Server) em um banco de dados independente. Especifica o SID do novo usuário de banco de dados. Se esta opção não for selecionada, o SQL Server nomeará um SID automaticamente. Use o parâmetro do SID para criar usuários em vários bancos de dados que têm a mesma identidade (SID). Isto é útil ao criar usuários em vários bancos de dados para preparar para failover do AlwaysOn. Para determinar a SID de um usuário, consulte sys.database_principals.
Comentários
Se FOR LOGIN for omitido, o novo usuário de banco de dados será mapeado para o logon do SQL Server com o mesmo nome.
O esquema padrão será o primeiro esquema que será pesquisado pelo servidor ao resolver os nomes dos objetos para esse usuário de banco de dados. A não ser quando especificado de outra forma, o esquema padrão será o proprietário dos objetos criados pelo usuário de banco de dados.
Se o usuário tiver um esquema padrão, esse esquema padrão será usado. Se o usuário não tiver um esquema padrão, mas for um membro de um grupo que tenha um esquema padrão, o esquema padrão do grupo será usado. Se o usuário não tiver um esquema padrão e for membro de mais de um grupo, o esquema padrão do usuário será o do grupo do Windows com o menor principal_id e um esquema padrão definido explicitamente. Não é possível selecionar explicitamente um dos esquemas padrão disponíveis como o esquema preferencial. Se nenhum esquema padrão puder ser determinado para um usuário, o esquema dbo será usado.
DEFAULT_SCHEMA pode ser definido antes de o esquema para o qual ele aponta ser criado.
DEFAULT_SCHEMA não pode ser especificado ao criar um usuário mapeado para um certificado ou para uma chave assimétrica.
O valor de DEFAULT_SCHEMA será ignorado se o usuário for membro da função de servidor fixa sysadmin. Todos os membros da função de servidor fixa sysadmin possuem um esquema padrão de dbo.
A cláusula WITHOUT LOGIN cria um usuário que não é mapeado para um logon do SQL Server. Pode conectar-se a outros bancos de dados como guest. Podem ser atribuídas permissões a esse usuário sem logon e quando o contexto de segurança for alterado para um usuário sem logon, os usuários originais receberão as permissões do usuário sem logon. Consulte o exemplo D. Criando e usando um usuário sem um logon.
Apenas usuários que são mapeados para entidades de segurança do Windows podem conter o caractere de barra invertida (\).
CREATE USER não pode ser usado para criar um usuário guest porque o usuário guest já existe em cada banco de dados. É possível habilitar o usuário guest por meio da concessão da permissão CONNECT, conforme mostrado:
GRANT CONNECT TO guest;
GO
As informações sobre usuários de banco de dados estão visíveis na exibição do catálogo sys.database_principals.
Resumo da sintaxe
Usuários baseados em logons no mestre
A lista a seguir mostra a sintaxe possível para usuários baseados em logons. As opções de esquema padrão não são listadas.
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry
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 pode ser usada apenas em um banco de dados contido. Os usuários criados não serão relacionados a nenhum logon no banco de dados mestre. As opções de esquema e de idioma padrão não estão listadas.
Observação sobre segurança |
---|
Esta sintaxe concede acesso de usuário ao banco de dados e também concede novo acesso ao Mecanismo de Banco de Dados. |
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsGroupManagers]
CREATE USER Barry WITH PASSWORD = 'sdjklalie8rew8337!$d'
Usuários baseados em entidades de segurança do Windows sem logons no mestre
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 que não têm um logon no mestre. Essa sintaxe pode ser usada em todos os tipos de bancos de dados. As opções de esquema e de idioma padrão não estão listadas.
Essa sintaxe é semelhante a usuários baseados em logons no mestre, mas essa categoria de usuário não tem um logon no mestre. O usuário deve ter acesso ao Mecanismo de Banco de Dados por meio de um logon de grupo do Windows.
Esta sintaxe é semelhante a usuários de banco de dados contidos baseados em entidades de segurança do Windows, mas essa categoria de usuário não obtém novo acesso ao Mecanismo de Banco de Dados.
CREATE USER [Domain1\WindowsUserBarry]
CREATE USER [Domain1\WindowsUserBarry] FOR LOGIN Domain1\WindowsUserBarry
CREATE USER [Domain1\WindowsUserBarry] FROM LOGIN Domain1\WindowsUserBarry
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 se 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 os usuários às funções de banco de dados que têm permissão para acessar objetos de banco de dados ou conceder permissões de objeto ao usuário.
Considerações especiais para bancos de dados contidos
Ao conectar-se a um banco de dados contido, se o usuário não tiver um logon no banco de dados mestre, 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 com senha de banco de dados contido.
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, de forma que o banco de dados possa ser movido facilmente para outra instância do SQL Server. Para obter mais informações, consulte Bancos de dados contidos. Para alterar um usuário de banco de dados de um usuário baseado em um logon de autenticação do SQL Server para um usuário com senha de banco de dados contido, consulte sp_migrate_user_to_contained (Transact-SQL).
Em um banco de dados independente, os usuários não precisam ter logons no banco de dados mestre. Os administradores do Mecanismo de Banco de Dados devem entender que o acesso a um banco de dados independente pode ser concedido no nível do banco de dados e não no nível do Mecanismo de Banco de Dados. Para obter mais informações, consulte Práticas recomendadas de segurança com bancos de dados independentes.
Permissões
Requer a permissão ALTER ANY USER no banco de dados.
Exemplos
A.Criando um usuário de banco de dados baseado em um logon do SQL Server
O exemplo a seguir cria primeiro um logon do SQL Server denominado AbolrousHazem e, em seguida, cria um usuário de banco de dados correspondente AbolrousHazem no AdventureWorks2012.
CREATE LOGIN AbolrousHazem
WITH PASSWORD = '340$Uuxwp7Mcxo7Khy';
USE AdventureWorks2012;
GO
CREATE USER AbolrousHazem FOR LOGIN AbolrousHazem;
GO
B.Criando um usuário de banco de dados com um esquema padrão
O exemplo a seguir cria primeiro um logon de servidor denominado WanidaBenshoof com uma senha e depois cria um usuário de banco de dados correspondente Wanida, com o esquema padrão Marketing.
CREATE LOGIN WanidaBenshoof
WITH PASSWORD = '8fdKJl3$nlNv3049jsKK';
USE AdventureWorks2012;
CREATE USER Wanida FOR LOGIN WanidaBenshoof
WITH DEFAULT_SCHEMA = Marketing;
GO
C.Criando um usuário de banco de dados de um certificado
O exemplo a seguir cria um usuário de banco de dados JinghaoLiu a partir do certificado CarnationProduction50.
USE AdventureWorks2012;
CREATE CERTIFICATE CarnationProduction50
WITH SUBJECT = 'Carnation Production Facility Supervisors',
EXPIRY_DATE = '11/11/2011';
GO
CREATE USER JinghaoLiu FOR CERTIFICATE CarnationProduction50;
GO
D.Criando e usando um usuário sem um logon
O exemplo a seguir cria um usuário de banco de dados CustomApp que não mapeia para um logon do SQL Server. O exemplo a seguir concede uma permissão de usuário adventure-works\tengiz0 para representar o usuário CustomApp.
USE AdventureWorks2012 ;
CREATE USER CustomApp WITHOUT LOGIN ;
GRANT IMPERSONATE ON USER::CustomApp TO [adventure-works\tengiz0] ;
GO
Para usar as credenciais CustomApp, o usuário adventure-works\tengiz0 executa a seguinte instrução.
EXECUTE AS USER = 'CustomApp' ;
GO
Para reverter para as credenciais de adventure-works\tengiz0, o usuário executa a instrução a seguir.
REVERT ;
GO
E.Criando um usuário com senha de banco de dados independente
O exemplo a seguir cria um usuário com senha de banco de dados contido. Este exemplo pode ser executado apenas em um banco de dados contido.
USE AdventureWorks2012 ;
GO
CREATE USER Carlo
WITH PASSWORD='RN92piTCh%$!~3K9844 Bl*'
, DEFAULT_LANGUAGE=[Brazilian]
, DEFAULT_SCHEMA=[dbo]
GO
F.Criando um usuário de banco de dados independente para um logon de domínio
O exemplo a seguir cria um usuário de banco de dados contido para um logon denominado Fritz em um domínio denominado Contoso. Este exemplo pode ser executado apenas em um banco de dados contido.
USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
GO
G.Criando um usuário de banco de dados independente com uma SID específica
O exemplo a seguir cria um usuário de banco de dados independente autenticado do SQLServer chamado CarmenW. Este exemplo pode ser executado apenas em um banco de dados contido.
USE AdventureWorks2012 ;
GO
CREATE USER CarmenW WITH PASSWORD = 'a8ea v*(Rd##+'
, SID = 0x01050000000000090300000063FF0451A9E7664BA705B10E37DDC4B7;
Consulte também
Referência
sys.database_principals (Transact-SQL)