分享方式:


SUSER_SID (Transact-SQL)

適用於:SQL Server Azure SQL 資料庫 Azure SQL 受控執行個體

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

Transact-SQL 語法慣例

語法

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

引數

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

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

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

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

傳回型別

varbinary(85)

備註

SUSER_SID 可在 ALTER TABLE 或 CREATE TABLE 中,用來當做 DEFAULT 條件約束使用。 SUSER_SID 可用在選取清單、WHERE 子句及任何允許使用運算式的位置中。 SUSER_SID 後面一律必須接著括號,即使未指定任何參數,也是如此。

當呼叫 SUSER_SID 時,如果未設定引數,它會傳回目前安全性內容的 SID。 當利用 EXECUTE AS,在已切換內容的批次內,未設定引數的情況下呼叫 SUSER_SID 時,它會傳回模擬內容的 SID。 當從模擬內容呼叫時,SUSER_SID(ORIGINAL_LOGIN()) 會傳回原始內容的 SID。

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

Windows NT user or group '%s' not found. Check the name again.

Azure SQL Database 備註

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

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

範例

A. 使用 SUSER_SID

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

SELECT SUSER_SID();  

B. 搭配特定登入使用 SUSER_SID

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

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

SELECT SUSER_SID('sa');  
GO  

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

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

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

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 中所儲存的登入名稱

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

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

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

另請參閱

ORIGINAL_LOGIN (Transact-SQL)
CREATE TABLE (Transact-SQL)
binary 和 varbinary (Transact-SQL)
系統函數 (Transact-SQL)