SUSER_SID(Transact-SQL)

지정된 로그인 이름에 대한 SID(보안 ID)를 반환합니다.

항목 링크 아이콘Transact-SQL 구문 표기 규칙

구문

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

인수

  • 'login'
    사용자의 로그인 이름입니다. login은 sysname입니다. login은 선택 사항이며 SQL Server 로그인이나 Microsoft Windows 사용자 또는 그룹일 수 있습니다. login을 지정하지 않은 경우에는 현재 보안 컨텍스트에 대한 정보가 반환됩니다. NULL 단어를 포함하면 NULL을 반환합니다.

  • Param2
    로그인 이름의 유효성을 검사할지 여부를 지정합니다. Param2는 int 유형이며 선택 사항입니다. Param2가 0이면 로그인 이름의 유효성을 검사하지 않습니다. Param2가 0으로 지정되지 않으면 Windows 로그인 이름이 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의 로그인이 User이고 SQL Server에서 로그인을 TESTCOMPUTER\User로 저장하면 로그인 TestComputer\User 조회에서 로그인 이름을 올바르게 확인하지 못할 수 있습니다. 로그인 이름의 이 유효성 검사를 건너뛰려면 Param2를 사용합니다. 데이터 정렬이 서로 다르면 다음과 같이 SQL Server 오류 15401이 자주 발생합니다.

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

1. SUSER_SID 사용

다음 예에서는 SQL Serversa 로그인에 대한 보안 ID를 반환합니다.

SELECT SUSER_SID('sa');
GO

2. Windows 사용자 이름과 SUSER_SID 사용

다음 예에서는 Windows 사용자 London\Workstation1에 대한 보안 ID를 반환합니다.

SELECT SUSER_SID('London\Workstation1');
GO

3. SUSER_SID를 DEFAULT 제약 조건으로 사용

다음 예에서는 SUSER_SID를 CREATE TABLE 문의 DEFAULT 제약 조건으로 사용합니다.

USE AdventureWorks2008R2;
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

4. Windows 로그인 이름을 SQL Server에 저장된 로그인 이름과 비교

다음 예에서는 Param2를 사용하여 Windows에서 SID를 가져오는 방법을 보여 주고 해당 SID를 SUSER_SNAME 함수에 대한 입력으로 사용합니다. 이 예에서는 Windows에 저장된 형식으로 로그인을 제공하고(TestComputer\User), SQL Server에 저장된 형식으로 로그인을 반환합니다(TESTCOMPUTER\User).

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