Dela via


SUSER_SID (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Förhandsversion av Microsoft Fabric

Returnerar säkerhetsidentifieringsnumret (SID) för det angivna inloggningsnamnet.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

'* login *'

Gäller för: SQL Server 2008 (10.0.x) och senare versioner

Användarens inloggningsnamn. login är sysname. inloggning, vilket är valfritt, kan vara en SQL Server-inloggning eller Microsoft Windows-användare eller grupp. Om inloggning inte anges returneras information om den aktuella säkerhetskontexten. Om parametern innehåller returnerar NULLSUSER_SID .NULL

Param2

Gäller för: SQL Server 2012 (11.x) och senare versioner

Anger om inloggningsnamnet har verifierats. Param2 är av typen int och är valfritt. När Param2 är 0 verifieras inte inloggningsnamnet. När Param2 inte anges som 0 verifieras Windows-inloggningsnamnet vara exakt samma som inloggningsnamnet som lagras i SQL Server.

Returtyper

varbinary(85)

Anmärkningar

SUSER_SID kan användas som en DEFAULT begränsning i antingen ALTER TABLE eller CREATE TABLE. SUSER_SID kan användas i en urvalslista, i en WHERE sats och var som helst där ett uttryck tillåts. SUSER_SID måste alltid följas av parenteser, även om ingen parameter har angetts.

När det anropas utan argument SUSER_SID returneras SID för den aktuella säkerhetskontexten. När det anropas utan argument i en batch som har växlat kontext med hjälp EXECUTE ASav returnerar SUSER_SID SID för den personifierade kontexten. När det anropas från en personifierad kontext SUSER_SID(ORIGINAL_LOGIN()) returnerar SID för den ursprungliga kontexten.

När SQL Server-sortering och Windows-sortering skiljer sig SUSER_SID åt kan det misslyckas när SQL Server och Windows lagrar inloggningen i ett annat format. Om Till exempel Windows-datorn TestComputer har inloggningen User och SQL Server lagrar inloggningen som TESTCOMPUTER\User, kan sökningen av inloggningen TestComputer\User misslyckas med att matcha inloggningsnamnet korrekt. Om du vill hoppa över den här valideringen av inloggningsnamnet använder du Param2. Olika sortering är ofta en orsak till SQL Server-fel 15401: Windows NT user or group '%s' not found. Check the name again.

Kommentarer för Azure SQL Database, SQL Database i Fabric

SUSER_SID returnera alltid inloggnings-SID för den aktuella säkerhetskontexten. Använd sys.database_principals för att hämta SID för en annan inloggning.

-instruktionen SUSER_SID stöder inte körning med hjälp av en personifierad säkerhetskontext via EXECUTE AS.

Examples

A. Använda SUSER_SID

I följande exempel returneras säkerhetsidentifieringsnumret (SID) för den aktuella säkerhetskontexten.

SELECT SUSER_SID();

B. Använda SUSER_SID med en specifik inloggning

Gäller för: SQL Server 2012 (11.x) och senare versioner

I följande exempel returneras säkerhetsidentifieringsnumret för SQL Server-inloggningen sa .

SELECT SUSER_SID('sa');
GO

C. Använda SUSER_SID med ett Windows-användarnamn

Gäller för: SQL Server 2012 (11.x) och senare versioner

I följande exempel returneras säkerhetsidentifieringsnumret för Windows-användaren London\Workstation1.

SELECT SUSER_SID('London\Workstation1');
GO

D. Använd SUSER_SID som standardvillkor

I följande exempel används SUSER_SID som en DEFAULT begränsning i en CREATE TABLE -instruktion.

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. Jämför Inloggningsnamnet för Windows med inloggningsnamnet som lagras i SQL Server

Gäller för: SQL Server 2012 (11.x) och senare versioner

I följande exempel visas hur du använder Param2 för att hämta SID från Windows och använder detta SID som indata till SUSER_SNAME funktionen. Exemplet innehåller inloggningen i formatet där den lagras i Windows (TestComputer\User) och returnerar inloggningen i det format som den lagras i SQL Server (TESTCOMPUTER\User).

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