ID 和 SID
新建日期: 2006 年 4 月 14 日
如果要编写与 SQL Server 引擎进行交互的代码,则应该注意用作主体内部表示形式的两个号码。 每个主体都具有一个 ID 和一个安全 ID (SID)。 这些号码的含义和源取决于主体的创建方式,同时与主体是服务器主体还是数据库主体有关。
服务器级标识号
创建 SQL Server 登录名时,便会为它分配一个 ID 和一个 SID。 这些号码在 sys.server_principals 目录视图中显示为 principal_id 和 SID。 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_id 和 SID。 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)