Números de identificación de seguridad (SID) e identificadores (Id.)

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 de 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 identificador (principal_id) identifica el inicio de sesión como elemento protegible dentro del servidor. SQL Server lo asigna cuando se crea el inicio de sesión. Cuando éste se elimina, su número de identificador 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 de nivel de base de datos

Cuando se crea un usuario de base de datos, se le asigna un identificador y un número de identificación de seguridad (SID). Estos números pueden verse en la vista de catálogo sys.database_principals como principal_id y SID. El identificador identifica al usuario como un elemento protegible dentro de la base de datos. Cuando un usuario de la base de datos se elimina, su identificador 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 identificador de usuario debe ser cero o un entero positivo. En SQL Server 2000, el identificador 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 de 215 = 32.768. En SQL Server 2005 y versiones posteriores, el identificador de usuario se almacena como un valor 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.

Identificador de SQL Server 2000

Identificador de SQL Server 2005

Asignado a

0

0

public

1

1

dbo

2

2

invitado

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

Usuarios, alias, roles 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

Roles

16400 - 2,147,483,647

Usuarios, roles, roles de aplicación, alias

El tamaño del identificador de usuario se incrementa de smallint (16 bits) a int (32 bits). Las API que requieren un identificador de usuario de 16 bits devolverán resultados incorrectos si se les pasa un identificador de usuario de 32 bits. Durante la migración de datos y aplicaciones de SQL Server 2000 o versiones anteriores, 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.