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
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)