Esta página foi útil?
Seus comentários sobre este conteúdo são importantes. Queremos saber sua opinião.
Comentários adicionais?
1500 caracteres restantes
Exportar (0) Imprimir
Expandir Tudo

Funções que retornam o nome e a ID de usuários

Várias funções do sistema retornam o nome e o ID de usuários. O compreendimento dos parâmetros e das saídas dessas funções requer uma compreensão dos tipos de nome e ID usados no SQL Server.

Cada usuário que se conectar ao SQL Server tem os dois níveis de nomes a seguir no SQL Server e cada nome está associado a uma ID exclusiva:

  • Nome de logon

    Cada usuário autorizado a conectar-se ao SQL Server tem um nome de logon que proporciona ao usuário o acesso a uma instância do SQL Server. Há dois tipos de nomes de logon:

    • Nomes da conta do Microsoft Windows

      Usando sp_grantlogin, os membros das funções de servidor fixas sysadmin ou securityadmin podem autorizar as contas do Windows de usuários individuais ou os grupos do Windows a se conectarem a uma instância do SQL Server. O usuário identificado pela conta do Windows ou qualquer pessoa no grupo do Windows pode, então, se conectar a uma instância do SQL Server usando a Autenticação do Windows. Cada conta do Windows ou nome de grupo é armazenado em sys.server_principals. O identificador de segurança do Windows para a conta ou grupo do Windows é armazenado em sys.server_principals.sid.

    • Nomes de logon SQL Server

      Esses são usados quando o usuário se conecta usando a Autenticação do SQL Server. Os nomes de logon do SQL Server são definidos pelos membros das funções de servidor fixas sysadmin ou securityadmin usando sp_addlogin. Cada nome de logon do SQL Server é armazenado em master.dbo.syslogins.loginname. O SQL Server gera um GUID que é usado como identificador de segurança e o armazena em sys.server_principals.sid.

      O SQL Server usa sys.server_principals.sid como o security_identifier para o nome de logon.

  • Nome do usuário do banco de dados

    Cada conta do Windows ou logon do SQL Server deve estar associado a um nome de usuário em cada banco de dados que o usuário estiver autorizado a acessar, ou o banco de dados deve ter um acesso de convidado habilitado. Os nomes de usuário são definidos pelos membros da função de banco de dados fixa db_owner ou db_accessadmin e são armazenados na tabela sys.database_principals disponível em cada banco de dados. Cada nome de usuário de banco de dados está associado a uma ID de usuário de banco de dados armazenada em sys.database_principals.uid.

    O security identifier para cada usuário é armazenado em sys.database_principals.sid; portanto, os usuários podem ser mapeados de volta para os seus logons associados. Menos confusão poderia ocorrer se o mesmo nome do usuário do banco de dados for usado para o logon do SQL Server ou para a conta do Windows, porém, não há necessidade de efetuar isso.

Quando estiver conectado a uma instância do SQL Server, use o seguinte para obter as contas ou IDs de logons:

  • O SUSER_SNAME para obter o nome de logon do SQL Server ou a conta do Windows associado a um security identifier.

  • O SUSER_SID para obter o security identifier associado a um nome de logon do SQL Server ou a uma conta do Windows.

  • SUSER_SID() (SUSER_SID especificado sem um parâmetro login_account.) para obter o security identifier da conexão atual, independente do uso da Autenticação SQL Server ou da Autenticação do Windows.

  • A função SYSTEM_USER do ISO para obter a conta do Windows para uma conexão com Autenticação do Windows ou o nome de logon do SQL Server para uma conexão com Autenticação SQL Server. No Transact-SQL, o SYSTEM_USER é implementado como um sinônimo para o SUSER_SNAME() (SUSER_SNAME especificado sem um parâmetro security_identifier.).

No SQL Server, as funções que retornam os nomes de logon ou as contas operam da seguinte maneira:

  • SUSER_SNAME(security_identifier)

    O SUSER_SNAME usa:

    • O security_identifier para uma conta ou grupo do Windows, neste caso ele retornará o nome da conta ou grupo do Windows.

    • O pseudo security_identifier gerado para um logon do SQL Server, neste caso retornará o nome de logon do SQL Server.

    Se um security_identifier não for especificado para uma conexão efetuada usando a Autenticação do Windows, o SUSER_SNAME retornará o nome da conta do Windows associado à conexão. Se a conexão foi efetuada usando a Autenticação SQL Server, o SUSER_SNAME retornará o logon do SQL Server associado à conexão.

  • SYSTEM_USER

    No ISO a função é implementada como um sinônimo de SUSER_SNAME(). (SUSER_SNAME especificado sem um parâmetro security_identifier.)

Quando estiver conectado a uma instância do SQL Server, use o seguinte para obter o nome ou a ID de usuário:

  • USER_ID para obter a ID de usuário de banco de dados associada a um nome de usuário de banco de dados.

  • USER_ID() para obter a ID de usuário de banco de dados associada à conexão atual.

  • USER_NAME para obter o nome de usuário do banco de dados associado a uma ID de usuário de banco de dados.

  • As funções ISO CURRENT_USER ou SESSION_USER para obter o nome de usuário de banco de dados associado à conexão atual. No Transact-SQL, essas funções são implementadas como sinônimos de USER_NAME(). (USER_NAME especificado sem um parâmetro database_user_ID.) A função USER do Transact-SQL é também implementada como um sinônimo de USER_NAME().

    ISO permite que as instruções SQL sejam codificadas nos módulos SQL que podem ter identificadores de autorização separados do identificador de autorização do usuário que se conectou a um banco de dados SQL. O ISO especifica que o SESSION_USER sempre retorna o identificador de autorização do usuário que efetuou a conexão. CURRENT_USER retorna o identificador de autorização do módulo SQL para as instruções executadas de um módulo SQL, ou do usuário que efetuou a conexão se as instruções SQL não foram efetuadas de um módulo SQL. Se o módulo SQL não tiver um identificador de autorização separado, o ISO especificará que o CURRENT_USER retornará o mesmo valor do SESSION_USER. O SQL Server não tem identificadores de autorização separados para os módulos SQL; portanto, o CURRENT_USER e o SESSION_USER serão sempre os mesmos. A função USER é definida pelo ISO como uma função de compatibilidade com versões anteriores para aplicativos gravados em versões anteriores ao padrão. É especificado para retornar o mesmo valor de CURRENT_USER.

No SQL Server, as funções que retornam os nomes de logon ou as contas operam da seguinte maneira:

  • USER_ID('database_user_name')

    USER_ID retorna a ID de usuário de banco de dados associada ao nome de usuário de banco de dados especificado. Se database_user_name não for especificado, USER_ID retornará a ID de usuário de banco de dados associada à conexão atual.

  • USER_NAME(database_user_ID)

    USER_NAME retorna o nome de usuário de banco de dados associado à ID de usuário de banco de dados especificada. Se database_user_ID não for especificado, o USER_NAME retornará o nome de usuário associado à conexão atual.

  • CURRENT_USER, SESSION_USER, USER

    Essas funções são sinônimos de USER_NAME(). (USER_NAME especificado sem um parâmetro database_user_ID.)

Contribuições da comunidade

ADICIONAR
Mostrar:
© 2015 Microsoft