共用方式為


識別碼與安全性識別碼

新增: 2006 年 4 月 14 日

如果您正在撰寫與 SQL Server 引擎互動的程式碼,就應該注意兩組當做主體內部表示使用的數字。每個主體都具有一個識別碼和一個安全性識別碼 (SID)。這些數字的意義和來源會根據主體的建立方式而定,並且根據它是伺服器主體或資料庫主體而定。

伺服器層級識別碼

建立 SQL Server 登入時,系統會指派識別碼和 SID 給這個登入。這些識別碼會在 sys.server_principals 目錄檢視中顯示成 principal_idSID。識別碼 (principal_id) 可將登入識別為伺服器中的安全性實體。它是在建立登入時,由 SQL Server 所指派的。刪除登入後,系統就會回收其識別碼。SID 可識別登入的安全性內容,而且它在伺服器執行個體中是唯一的。SID 的來源會根據建立登入的方式而定。如果登入是從 Windows 使用者或群組建立的,系統就會提供來源主體的 Windows SID 給此登入,而且該 Windows SID 在網域中是唯一的。如果 SQL Server 登入是從憑證或非對稱金鑰建立的,系統就會指派一個衍生自公開金鑰 SHA-1 雜湊的 SID 給此登入。如果登入是建立成需要密碼的傳統樣式 SQL Server 登入,伺服器就會產生 SID。

資料庫層級識別碼

當資料庫使用者建立後,會指派識別碼 (ID) 與安全性識別碼 (SID)。這些識別碼會在 sys.database_principals 目錄檢視中顯示成 principal_idSID。識別碼可將使用者識別為資料庫中的安全性實體。刪除資料庫使用者後,系統就會回收其識別碼。指派給資料庫使用者的 SID 在資料庫中是唯一的。SID 的來源會根據建立資料庫使用者的方式而定。如果使用者是從 SQL Server 登入建立的,系統就會提供登入的 SID 給這個使用者。如果使用者是從憑證或非對稱金鑰建立的,此 SID 就會衍生自公開金鑰的 SHA-1 雜湊。

資料庫使用者的數目上限

資料庫使用者的數目上限是由使用者識別碼欄位大小所決定。使用者識別碼的值必須為零或正整數。在 SQL Server 2000 中,使用者識別碼會儲存成包含 16 個位元的 smallint,而且其中一個位元是符號。因此,在 SQL Server 2000 中,使用者識別碼的數目上限是 215 = 32,768。在 SQL Server 2005 中,使用者識別碼會儲存成包含 32 個位元的 int,而且其中一個位元是符號。這些額外的位元可讓您指派 231 = 2,147,483,648 個識別碼。

資料庫使用者識別碼可分成預先配置的範圍,如下表所示。

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 中,使用者識別碼的大小從 smallint (16 個位元) 增加為 int (32 個位元)。如果您傳遞 32 位元使用者識別碼,要求 16 位元使用者識別碼的 API 將會傳回不正確的結果。移轉針對舊版 SQL Server 所建立的資料和應用程式時,您應該檢閱下列已被取代之介面的參考程式碼。

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

這些介面會要求 16 位元使用者識別碼。如果您使用 32 位元使用者識別碼時,它們就不會傳回正確的結果。

請參閱

概念

主體

其他資源

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 協助