Share via


SIDs e IDs

Se você estiver gravando o código que interage com o mecanismo do SQL Server, lembre-se de dois números usados como representações internas da entidade. Cada entidade tem uma identificação e um identificador de segurança (SID). O significado e a fonte desses números dependem de como a entidade foi criada e se ela é uma entidade de servidor ou de banco de dados.

Número de identificação de nível de servidor

Quando um logon do SQL Server é criado, uma identificação e um SID são atribuídos. Eles são visíveis na exibição do catálogo sys.server_principals como principal_id e SID. A identificação (principal_id) identifica o logon como seguro no servidor. Ela é atribuída pelo SQL Server quando o logon é criado. Quando um logon é excluído, o número de identificação é reciclado. O SID identifica o contexto de segurança do logon e é exclusivo dentro da instância do servidor. A fonte do SID depende de como o logon é criado. Se o logon for criado de um grupo ou um usuário do Windows, será fornecido o SID do Windows da entidade de origem; o SID do Windows é exclusivo no domínio. Se o logon do SQL Server for criado de um certificado ou uma chave assimétrica, será atribuído um SID derivado do hash SHA-1 da chave pública. Se o logon for criado como um logon do SQL Server com estilo herdado que requer uma senha, o servidor irá gerar um SID.

Número de identificação de nível de banco de dados

Quando um usuário de banco de dados é criado, uma ID e um identificador de segurança (SID) são atribuídos. Esses números são visíveis na exibição do catálogo sys.database_principals como principal_id e SID. A identificação identifica o usuário como seguro dentro do banco de dados. Quando um usuário de banco de dados é excluído, a identificação é reciclada. O SID atribuído a um usuário de banco de dados é exclusivo dentro do banco de dados. A fonte do SID depende de como o usuário de banco de dados é criado. Se o usuário for criado de um logon do SQL Server, será fornecido o SID do logon. Se o usuário for criado de um certificado ou uma chave assimétrica, o SID será derivado do hash SHA-1 da chave pública.

Número máximo de usuários do banco de dados

O número máximo de usuários do banco de dados é determinado pelo tamanho do campo de identificação de usuário. O valor de uma ID de usuário deve ser zero ou um inteiro positivo. No SQL Server 2000, a ID do usuário é armazenada como smallint, que consiste em 16 bits, um dos quais é o sinal. Por esse motivo, o número máximo de IDs de usuário no SQL Server 2000 é 215= 32.768. No SQL Server 2005, e em versões posteriores, a ID do usuário é armazenada como um int, que consiste em 32 bits, um dos quais é o sinal. Esses bits adicionais permitem atribuir 231 = 2.147.483.648 números de ID.

As IDs de usuário de banco de dados são divididas em intervalos pré-alocados, conforme ilustrado na tabela a seguir.

ID do SQL Server 2000

ID do SQL Server 2005

Alocada para

0

0

público

1

1

dbo

2

2

convidado

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

Usuários, aliases, funções de aplicativo

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

Funções

16400 - 2,147,483,647

Usuários, funções, funções de aplicativos, aliases

O tamanho da ID de usuário é aumentado de smallint (16 bits) para int (32 bits). As APIs que requerem uma ID de usuário de 16 bits retornarão resultados incorretos se uma ID de usuário de 32 bits for transmitida. Ao migrar dados e aplicativos criados para o SQL Server 2000 ou anterior, você deve verificar o código para referências às interfaces preteridas a seguir.

  • sysusers

  • syscacheobjects

  • sysmembers

  • sysobjects

  • syspermissions

  • sysprocesses

  • sysprotects

  • systypes

  • USER_ID

Essas interfaces requerem IDs de usuário de 16 bits. Elas não retornam resultados corretos quando usadas com IDs de usuário de 32 bits.