ID 和 SID

新建日期: 2006 年 4 月 14 日

如果要编写与 SQL Server 引擎进行交互的代码,则应该注意用作主体内部表示形式的两个号码。 每个主体都具有一个 ID 和一个安全 ID (SID)。 这些号码的含义和源取决于主体的创建方式,同时与主体是服务器主体还是数据库主体有关。

服务器级标识号

创建 SQL Server 登录名时,便会为它分配一个 ID 和一个 SID。 这些号码在 sys.server_principals 目录视图中显示为 principal_idSID。 ID (principal_id) 将登录名标识为服务器上的安全对象。 创建登录名时由 SQL Server 分配此 ID。 删除登录名时,将回收其 ID 号。 SID 标识登录名的安全上下文,并且在服务器实例中是唯一的。 SID 的源取决于登录名的创建方式。 如果通过 Windows 用户或组创建登录名,则会为它指定源主体的 Windows SID;Windows SID 在域中是唯一的。 如果通过证书或非对称密钥创建 SQL Server 登录名,则会为它分配源自公钥的 SHA-1 哈希的 SID。 如果按照需要密码的、早期样式的 SQL Server 登录名创建登录名,则服务器将生成一个 SID。

数据库级标识号

当创建数据库用户角色时,将为其分配一个 ID 和一个安全 ID (SID)。 这些号码在 sys.database_principals 目录视图中显示为 principal_idSID。 ID 将用户标识为数据库中的安全对象。 删除数据库用户时,将回收其 ID。 分配给数据库用户的 SID 在数据库中是唯一的。 SID 的源取决于数据库用户的创建方式。 如果通过 SQL Server 登录名创建用户,则会为它指定登录名的 SID。 如果通过证书或非对称密钥创建用户,则 SID 源自公钥的 SHA-1 哈希。

最大数据库用户数

最大数据库用户数由用户 ID 字段的大小确定。 用户 ID 的值必须为零或正整数。 在 SQL Server 2000 中,将用户 ID 存储为 16 位的 smallint(其中一位是符号)。 因此,SQL Server 2000 中最大用户 ID 数是 215 = 32,768。在 SQL Server 2005 中,将用户 ID 存储为 32 位的 int(其中一位是符号)。 这些附加的位可以分配 231 = 2,147,483,648 的 ID 号。

数据库用户 ID 划分为预分配的范围,如下表中所示。

SQL Server 2000 ID SQL Server 2005 ID 分配对象

0

0

public

1

1

dbo

2

2

guest

3

3

INFORMATION_SCHEMA

4

4

SYSTEM_FUNCTION_SCHEMA

5 - 16383

5 - 16383

用户、别名、应用程序角色

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

保留

16400 - 32767

角色

16400 - 2,147,483,647

用户、角色、应用程序角色、别名

在 SQL Server 2005 中,用户 ID 大小从 smallint(16 位)增加到 int(32 位)。 如果传递了 32 位用户 ID,则需要 16 位用户 ID 的 API 将返回错误结果。当迁移为早期版本的 SQL Server 创建的数据和应用程序时,应检查代码以确定是否存在对下列不推荐使用的接口的引用。

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

这些接口需要 16 位用户 ID。 当使用 32 位用户 ID 时,这些接口将返回错误结果。

请参阅

概念

主体

其他资源

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)

帮助和信息

获取 SQL Server 2005 帮助