共用方式為


SUSER_SID (Transact-SQL)

適用於:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceMicrosoft Fabric 中的 SQL 資料庫

傳回指定登入名稱的安全性識別碼 (SID)。

Transact-SQL 語法慣例

語法

SUSER_SID ( [ 'login' ] [ , Param2 ] )

引數

'* 登錄 *'

適用於:SQL Server 2008 (10.0.x) 和更新版本

使用者的登入名稱。 loginsysname。 選擇性的 login 可為 SQL Server 登入或 Microsoft Windows 使用者或群組。 若沒有指定 login,則會傳回目前安全性內容的相關資訊。 如果參數包含 NULLSUSER_SID 則會傳回 NULL

Param2

適用於:SQL Server 2012 (11.x) 和更新版本

指定是否要驗證登入名稱。 Param2 的類型為 int 且為選擇性。 當 Param2 為 0 時,不會驗證登入名稱。 當 Param2 未指定為 0 時,則會驗證 Window 登入名稱,確認其與儲存在 SQL Server 中的登入名稱完全相同。

傳回類型

varbinary(85)

備註

SUSER_SID可作為 或 DEFAULT中的ALTER TABLE約束。CREATE TABLE SUSER_SID 可用於選取清單、子句, WHERE 以及任何允許運算式的地方。 SUSER_SID 必須一律後面接著括弧,即使未指定參數也一樣。

在沒有引數的情況下呼叫時, SUSER_SID 會傳回目前安全性內容的 SID。 在已切換內容的批次內呼叫沒有引數時,會傳 EXECUTE AS回模擬內容的 SID SUSER_SID 。 從模擬內容呼叫時, SUSER_SID(ORIGINAL_LOGIN()) 會傳回原始內容的 SID。

當 SQL Server 定序和 Windows 定序不同時,當 SQL Server 和 Windows 以不同的格式儲存登入時, SUSER_SID 可能會失敗。 例如,如果 Windows 電腦 TestComputer 具有登入, User 而 SQL Server 將登入儲存為 TESTCOMPUTER\User,則登入 TestComputer\User 的查閱可能無法正確解析登入名稱。 若要略過登入名稱的驗證作業,請使用 Param2。 不同的定序通常是 SQL Server 錯誤 15401 的原因: Windows NT user or group '%s' not found. Check the name again.

Azure SQL 資料庫、Fabric 中的 SQL 資料庫 備註

SUSER_SID 一律傳回目前安全性內容的登入 SID。 使用 sys.database_principals 取得不同登入的 SID。

陳述 SUSER_SID 式不支援透過 使用 EXECUTE AS模擬的安全性內容來執行。

範例

A. 下載 SUSER_SID

下列範例會傳回目前安全性內容的安全性識別碼 (SID)。

SELECT SUSER_SID();

B. 使用具有特定登入的SUSER_SID

適用於:SQL Server 2012 (11.x) 和更新版本

下列範例會傳回 SQL Server sa 登入的安全性識別碼。

SELECT SUSER_SID('sa');
GO

C. 將SUSER_SID與 Windows 使用者名稱搭配使用

適用於:SQL Server 2012 (11.x) 和更新版本

下列範例會傳回 Windows 使用者 London\Workstation1 的安全性識別碼。

SELECT SUSER_SID('London\Workstation1');
GO

D. 使用 SUSER_SID 作為 DEFAULT 約束

下列範例會利用 SUSER_SID 來做為 DEFAULT 陳述式中的 CREATE TABLE 條件約束。

USE AdventureWorks2022;
GO
CREATE TABLE sid_example
(
login_sid   VARBINARY(85) DEFAULT SUSER_SID(),
login_name  VARCHAR(30) DEFAULT SYSTEM_USER,
login_dept  VARCHAR(10) DEFAULT 'SALES',
login_date  DATETIME DEFAULT GETDATE()
);  
GO
INSERT sid_example DEFAULT VALUES;
GO

E. 將 Windows 登入名稱與儲存在 SQL Server 中的登入名稱進行比較

適用於:SQL Server 2012 (11.x) 和更新版本

下列範例示範如何使用 Param2 從 Windows 取得 SID,並使用該 SID 作為 SUSER_SNAME 函式的輸入。 此範例以 Windows 中的儲存格式 (TestComputer\User) 提供登入,並以 SQL Server 中的儲存格式 (TESTCOMPUTER\User) 傳回登入。

SELECT SUSER_SNAME(SUSER_SID('TestComputer\User', 0));