Id. y SID

Nuevo: 14 de abril de 2006

Si escribe código que interactúa con el motor de SQL Server, debe tener en cuenta dos números que se utilizan como representaciones internas de la entidad de seguridad. Toda entidad de seguridad tiene un identificador (Id.) y un número de identificación de seguridad (SID). El significado y origen de estos números dependen de la forma en que se creó la entidad de seguridad y si es una entidad de seguridad de servidor o de base de datos.

Número de identificación en el nivel de servidor

Cuando se crea un inicio de sesión de SQL Server, se le asigna un identificador y un SID. Pueden verse en la vista de catálogo sys.server_principals como principal_id y SID. El Id. (principal_id) identifica el inicio de sesión como un asegurable dentro del servidor. SQL Server lo asigna cuando se crea el inicio de sesión. Cuando éste se elimina, su número de Id. se recicla. El SID identifica el contexto de seguridad del inicio de sesión y es único dentro de la instancia de servidor. El origen del SID depende de cómo se haya creado el inicio de sesión. Si se ha creado a partir de un usuario o grupo de Windows, se le da el SID de Windows de la entidad de seguridad de origen; el SID de Windows es único dentro del dominio. Si el inicio de sesión de SQL Server se ha creado a partir de un certificado o clave asimétrica, se le asigna un SID que se deriva del hash SHA-1 de la clave pública. Si el inicio de sesión se ha creado como un inicio de sesión de SQL Server de estilo heredado que requiere una contraseña, el servidor generará un SID.

Número de identificación en el nivel de base de datos

Cuando se crea una función de usuario de base de datos, se le asigna un Id. y un Id. de seguridad (SID). Estos números pueden verse en la vista de catálogo sys.database_principals como principal_id y SID. El Id. identifica al usuario como un asegurable dentro de la base de datos. Cuando un usuario de la base de datos se elimina, su Id. se recicla. El SID asignado a un usuario de base de datos es único dentro de la base de datos. El origen del SID depende de cómo se haya creado el usuario de base de datos. Si el usuario se ha creado a partir de un inicio de sesión de SQL Server, se le asigna el SID del inicio de sesión. Si el usuario se ha creado a partir de un certificado o clave asimétrica, el SID se deriva del hash SHA-1 de la clave pública.

Número máximo de usuarios de base de datos

El número máximo de usuarios de base de datos está determinado por el tamaño del campo Id. de usuario. El valor de un Id. de usuario debe ser cero o un entero positivo. En SQL Server 2000, el Id. de usuario se almacena como un smallint de 16 bits, uno de los cuales es el signo. Por esta razón, el número máximo de identificadores de usuario en SQL Server 2000 es 215 = 32.768. En SQL Server 2005, el Id. de usuario se almacena como un int de 32 bits, uno de los cuales es el signo. Estos bits adicionales hacen posible asignar 231 = 2.147.483.648 números identificadores.

Los identificadores de usuario de base de datos se dividen en intervalos asignados previamente, como se muestra en la siguiente tabla.

Id. de SQL Server 2000 Id. de SQL Server 2005 Asignado a

0

0

público

1

1

dbo

2

2

invitado

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

usuarios, alias, funciones de aplicación

16384

16384

db_owner

16385

16385

db_accessadmin

16386

16386

db_securityadmin

16387

16387

db_ddladmin

16389

16389

db_backupoperator

16390

16390

db_datareader

16391

16391

db_datawriter

16392

16392

db_denydatareader

16393

16393

db_denydatawriter

16394 - 16399

16394 - 16399

Reservado

16400 - 32767

Funciones

16400 - 2,147,483,647

Usuarios, funciones, funciones de aplicación, alias

En SQL Server 2005, el tamaño del Id. de usuario se incrementa de smallint (16 bits) a int (32 bits). Las API que requieren un Id. de usuario de 16 bits devolverán resultados incorrectos si se les pasa un Id. de usuario de 32 bits. En la migración de datos y aplicaciones de una versión anterior de SQL Server, deberá revisar el código en busca de referencias a las siguientes interfaces obsoletas:

  • sysusers
  • syscacheobjects
  • sysmembers
  • sysobjects
  • syspermissions
  • sysprocesses
  • sysprotects
  • systypes
  • USER_ID

Estas interfaces requieren identificadores de usuario de 16 bits. Cuando se usan con identificadores de usuario de 32 bits no devuelven resultados correctos.

Vea también

Conceptos

Entidades de seguridad

Otros recursos

sys.server_principals (Transact-SQL)
sys.database_principals (Transact-SQL)
USER_ID (Transact-SQL)
SUSER_SID (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005