Leer en inglés

Compartir a través de


Funciones que devuelven nombres e Id. de usuarios

Varias funciones del sistema devuelven Id. y nombres de usuarios. Para comprender los parámetros y los datos de salida de estas funciones, es necesario comprender los tipos de nombres e identificadores utilizados en SQL Server.

Cada usuario que inicia sesión en SQL Server tiene los dos niveles siguientes de nombres en SQL Server, y cada nombre está asociado con un Id. único:

  • Nombre de inicio de sesión

    Cada usuario autorizado para iniciar sesión en SQL Server tiene un nombre de inicio de sesión que le concede acceso a una instancia de SQL Server. Hay dos tipos de nombres de inicio de sesión:

    • Nombres de cuenta de Microsoft Windows

      Mediante sp_grantlogin, los miembros de las funciones fijas de servidor sysadmin o securityadmin pueden autorizar cuentas de Windows de usuarios individuales o grupos para iniciar sesión en una instancia de SQL Server. El usuario identificado por la cuenta de Windows o cualquier persona del grupo de Windows pueden conectarse a una instancia de SQL Server utilizando la autenticación de Windows. Cada nombre de cuenta o grupo de Windows se almacena en sys.server_principals. El identificador de seguridad de Windows para la cuenta o el grupo de Windows se almacena en sys.server_principals.sid.

    • Nombres de inicio de sesión de SQL Server

      Se utilizan cuando el usuario inicia sesión con autenticación de SQL Server. Los nombres de inicio de sesión de SQL Server son definidos por integrantes de las funciones fijas de servidor sysadmin o securityadmin utilizando sp_addlogin. Cada nombre de inicio de sesión de SQL Server se almacena en master.dbo.syslogins.loginname. SQL Server genera un GUID que se utiliza como identificador de seguridad y se almacena en sys.server_principals.sid.

      SQL Server utiliza sys.server_principals.sid como security_identifier para el inicio de sesión.

  • Nombre de usuario de base de datos

    Cada cuenta de Windows o inicio de sesión de SQL Server debe estar asociado con un nombre de usuario en cada base de datos a la que el usuario tiene autorizado el acceso, o bien la base de datos debe tener habilitado el acceso de usuarios guest. Los miembros de las funciones fijas de servidor db_owner o db_accessadmin definen los nombres de usuario de base de datos, que se almacenan en la tabla sys.database_principals de cada base de datos. Cada nombre de usuario de base de datos está asociado con un Id. de usuario de base de datos almacenado en sys.database_principals.uid.

    El parámetro security identifier de cada usuario se almacena en sys.database_principals.sid; por tanto, se pueden asignar los usuarios a sus inicios de sesión asociados. Resulta menos confuso si el inicio de sesión de SQL Server y la cuenta de Windows utilizan el mismo nombre de usuario de base de datos; no obstante, no es obligatorio.

Obtener id. o cuentas de inicio de sesión

Cuando esté conectado a una instancia de SQL Server, puede utilizar los siguientes elementos para obtener Id. o cuentas de inicio de sesión:

  • SUSER_SNAME para obtener el nombre de inicio de sesión de SQL Server o la cuenta de Windows asociada a un parámetro security identifier.

  • SUSER_SID para obtener el parámetro security identifier asociado a un nombre de inicio de sesión de SQL Server o una cuenta de Windows.

  • SUSER_SID() (SUSER_SID especificado sin un parámetro login_account) para obtener el parámetro security identifier de la conexión actual, independientemente de si se ha utilizado la autenticación de SQL Server o la autenticación de Windows.

  • La función ISO SYSTEM_USER para obtener la cuenta de Windows para una conexión con autenticación de Windows o el nombre de inicio de sesión de SQL Server para una conexión con autenticación de SQL Server.En Transact-SQL, SYSTEM_USER se implementa como sinónimo de SUSER_SNAME() (SUSER_SNAME especificado sin un parámetro security_identifier).

En SQL Server, las funciones que devuelven nombres de inicio de sesión o cuentas funcionan de la siguiente manera:

  • SUSER_SNAME(security_identifier)

    SUSER_SNAME puede tomar:

    • El parámetro security_identifier de una cuenta o grupo de Windows, en cuyo caso devuelve el nombre de la cuenta o grupo de Windows.

    • El falso security_identifier generado por un inicio de sesión de SQL Server, en cuyo caso devuelve el nombre de inicio de sesión de SQL Server.

    Si no se especifica el parámetro security_identifier de una conexión realizada con autenticación de Windows, SUSER_SNAME devuelve el nombre de la cuenta de Windows asociada a la conexión. Si se realizó la conexión con autenticación de SQL Server, SUSER_SNAME devuelve el inicio de sesión de SQL Server asociado con la conexión.

  • SYSTEM_USER

    En ISO, la función se implementa como sinónimo de SUSER_SNAME().(SUSER_SNAME especificado sin un parámetro security_identifier.)

Obtener nombres o Id. de usuarios de base de datos

Cuanto esté conectado a una instancia de SQL Server, utilice los siguientes elementos para obtener nombres o Id. de usuario:

  • USER_ID para obtener el Id. de usuario de base de datos asociado con un nombre de usuario de base de datos.

  • USER_ID() para obtener el Id. de usuario de base de datos asociado con la conexión actual.

  • USER_NAME para obtener el nombre de usuario de base de datos asociado con un Id. de usuario de base de datos.

  • La función ISO CURRENT_USER o bien la función ISO SESSION_USER para obtener el nombre de usuario de base de datos asociado con la conexión actual. En Transact-SQL, estas funciones se implementan como sinónimo de USER_NAME(). (USER_NAME especificado sin un parámetro database_user_ID.) La función USER de Transact-SQL también se implementa como sinónimo de USER_NAME().

    ISO permite codificar instrucciones SQL en módulos de SQL que pueden tener identificadores de autorización diferentes del identificador de autorización del usuario que se ha conectado a una base de datos de SQL. ISO especifica que SESSION_USER siempre devuelva el identificador de autorización del usuario que realizó la conexión. CURRENT_USER devuelve el identificador de autorización del módulo de SQL para las instrucciones ejecutadas desde un módulo de SQL o del usuario que realizó la conexión si las instrucciones SQL no se ejecutaron desde un módulo de SQL. Si el módulo de SQL no tiene un identificador de autorización diferente, ISO especifica que CURRENT_USER devuelva el mismo valor que SESSION_USER. SQL Server no tiene identificadores de autorización diferentes para los módulos de SQL; por tanto, CURRENT_USER y SESSION_USER son siempre iguales. La función USER está definida por ISO como función para mantener la compatibilidad con versiones anteriores para aplicaciones escritas en versiones anteriores del estándar. Se especifica que devuelva el mismo valor que CURRENT_USER.

En SQL Server, las funciones que devuelven nombres de inicio de sesión o cuentas funcionan de la siguiente manera:

  • USER_ID('database_user_name')

    USER_ID devuelve el Id. de usuario de base de datos asociado con el nombre de usuario de base de datos especificado. Si no se especifica database_user_name, USER_ID devuelve el Id. de usuario de base de datos asociado a la conexión actual.

  • USER_NAME(database_user_ID)

    USER_NAME devuelve el nombre de usuario de base de datos asociado al Id. de usuario de base de datos especificado. Si no se especifica database_user_ID, USER_NAME devuelve el nombre de usuario de base de datos asociado a la conexión actual.

  • CURRENT_USER, SESSION_USER, USER

    Estas funciones son sinónimos de USER_NAME(). (USER NAME especificado sin un parámetro database_user_ID.)