적용 대상: SQL Server 2025(17.x)
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric
이 문서에서는 T-SQL 구문을 사용하여 Azure SQL Database, Fabric SQL Database, Azure SQL Object_ID Managed Instance 및 SQL Server 2025 이상 버전에서 특수하지 않은 표시 이름을 가진 Microsoft Entra 로그인 및 사용자를 만드는 방법을 설명합니다.
비고
Fabric SQL 데이터베이스에서 사용자를 만들 수 있지만 로그인은 만들 수 없습니다.
개요
Microsoft Entra ID는 서비스 주체에 대한 인증을 지원합니다. 그러나 Microsoft Entra ID에서 고유하지 않은 표시 이름이 있는 서비스 주체를 사용하면 SQL Server, Azure SQL Database 및 Azure SQL Managed Instance에서 로그인 또는 사용자를 만들 때 오류가 발생합니다.
예를 들어 애플리케이션 myapp 이 고유하지 않은 경우 다음 오류가 발생할 수 있습니다.
Msg 33131, Level 16, State 1, Line 4
Principal 'myapp' has a duplicate display name. Make the display name unique in Azure Active Directory and execute this statement again.
다음 T-SQL 문을 실행하려고 할 때:
CREATE LOGIN [myapp] FROM EXTERNAL PROVIDER
이 WITH OBJECT_ID 확장은
중복 된 표시 이름 오류는 Microsoft Entra ID가 Microsoft Entra 애플리케이션(서비스 주체)에 대해 중복된 표시 이름을 허용하는 반면 SQL Server 및 Azure SQL은 Microsoft Entra 로그인 및 사용자를 만들기 위해 고유한 이름이 필요하기 때문에 발생합니다. 이 문제를 완화하기 위해, 로그인 및 사용자를 생성하는 DDL(데이터 정의 언어) 문에 Azure 리소스의 개체 ID를 포함시키는 WITH OBJECT_ID 절이 추가되었습니다.
비고
Microsoft Entra ID의 대부분의 고유하지 않은 표시 이름은 서비스 주체와 관련이 있지만 경우에 따라 그룹 이름은 고유하지 않을 수도 있습니다. Microsoft Entra 사용자 주체 이름은 두 사용자가 동일한 주체 이름을 가질 수 없으므로 고유합니다. 그러나 사용자 계정 이름과 동일한 표시 이름을 사용하여 앱 등록(서비스 주체)을 만들 수 있습니다.
서비스 주체 표시 이름이 중복되지 않으면 기본값 CREATE LOGIN 또는 CREATE USER 문을 사용해야 합니다. 확장은 WITH OBJECT_ID 특수하지 않은 서비스 주체와 함께 사용하기 위해 구현된 문제 해결 복구 항목입니다. 고유한 서비스 주체와 함께 사용하는 것은 권장되지 않습니다. 접미사를 추가하지 않고 서비스 주체에 WITH OBJECT_ID 익스텐션을 사용하면 성공적으로 실행은 되지만 로그인 또는 사용자가 만들어진 서비스 주체를 명확하게 나타내지는 못합니다. 서비스 주체를 고유하게 식별하는 접미사를 사용하여 별칭을 만들 것을 권장합니다. 이 WITH OBJECT_ID 확장은 SQL Server 2025 이상 버전에서 지원됩니다.
T-SQL 고유하지 않은 표시 이름에 대한 로그인/사용자 구문 생성
CREATE LOGIN [login_name] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'objectid'
CREATE USER [user_name] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'objectid'
T-SQL DDL 지원 확장으로 로그인 또는 개체 ID가 있는 사용자를 만들 수 있으므로 오류 33131 을 방지하고 개체 ID로 만든 로그인 또는 사용자에 대한 별칭도 지정할 수 있습니다. 예를 들어 다음 T-SQL 샘플은 애플리케이션 개체 IDmyapp4466e를 사용하여 로그인 aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb 을 만듭니다.
CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER
WITH OBJECT_ID = 'aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb'
- 이 T-SQL 쿼리를 실행하려면 지정된 개체 ID가 SQL 리소스가 있는 Microsoft Entra 테넌트에 있어야 합니다. 그렇지 않으면
CREATE오류 메시지와 함께 명령이 실패합니다.Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission. - 로그인 또는 사용자 이름은
CREATE LOGIN또는CREATE USER문을 사용할 때 사용자 정의 접미사로 확장된 원래 서비스 주체 이름을 포함해야 합니다. 접미사는 개체 ID의 초기 부분을 포함하는 것이 가장 좋습니다. 예를 들어myapp2ba6c개체 IDbbbbbbbb-1111-2222-3333-cccccccccccc의 경우입니다. 그러나 사용자 지정 접미사를 정의할 수도 있습니다. 개체 ID에서 접미사를 구성할 필요는 없습니다.
이 명명 규칙은 데이터베이스 사용자 또는 로그인을 Microsoft Entra ID의 개체와 명시적으로 관련시킬 것을 권장합니다.
비고
별칭은 최대 길이 128자를 포함하여 T-SQL 사양 sysname을 준수합니다. 접미사를 개체 ID의 처음 5자로 제한하는 것이 좋습니다.
Microsoft Entra ID의 서비스 주체 표시 이름은 데이터베이스 로그인 또는 사용자 별칭과 동기화되지 않습니다.
CREATE LOGIN 또는 CREATE USER를 실행해도 Azure Portal의 표시 이름에 영향을 주지 않습니다. 마찬가지로 Microsoft Entra ID 표시 이름을 수정해도 데이터베이스 로그인 또는 사용자 별칭에는 영향을 주지 않습니다.
애플리케이션을 위해 생성된 사용자를 식별하세요.
특수하지 않은 서비스 주체의 경우 Microsoft Entra 별칭이 올바른 애플리케이션에 연결되어 있는지 확인하는 것이 중요합니다. 사용자가 올바른 서비스 주체(애플리케이션)에 대해 만들어졌는지 확인하려면 다음을 실행합니다.
Azure SQL 또는 SQL Server에서 만든 사용자로부터 애플리케이션의 애플리케이션 ID 또는 Microsoft Entra 그룹의 개체 ID 를 가져옵니다. 다음 쿼리를 참조하세요.
만든 사용자로부터 서비스 주체의 애플리케이션 ID 를 가져오려면 다음 쿼리를 실행합니다.
SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c'예제 출력:
애플리케이션 ID는 지정된 로그인 또는 사용자 이름에 대한 SID(보안 ID)에서 변환되며, 다음 T-SQL 쿼리를 실행하고 마지막 여러 숫자를 비교하고 날짜를 만들어 확인할 수 있습니다.
SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c'예제 출력:
만든 사용자로부터 Microsoft Entra 그룹의 개체 ID 를 가져오려면 다음 쿼리를 실행합니다.
SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'예제 출력:
만든 사용자로부터 Microsoft Entra 그룹의 SID를 확인하려면 다음 쿼리를 실행합니다.
SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b'예제 출력:
PowerShell을 사용하여 애플리케이션의 개체 ID 및 애플리케이션 ID를 가져오려면 다음 명령을 실행합니다.
Get-AzADApplication -DisplayName "myapp2ba6c"
Azure Portal로 이동하고 엔터프라이즈 애플리케이션 또는 Microsoft Entra 그룹 리소스에서 애플리케이션 ID 또는 개체 ID를 각각 확인합니다. 이전 쿼리에서 가져온 것과 일치하는지 확인합니다.
비고
서비스 주체를 통해 사용자를 생성할 때, Object ID는 WITH OBJECT_ID 절과 함께 CREATE T-SQL 문을 사용할 때 필요합니다. 이는 SQL Server에서 별칭을 확인하려고 할 때 반환되는 애플리케이션 ID 와 다릅니다. 이 확인 프로세스를 사용하여 Microsoft Entra ID의 SQL 별칭과 연결된 서비스 주체 또는 그룹을 식별하고, 개체 ID가 있는 로그인 또는 사용자를 만들 때 발생할 수 있는 실수를 방지할 수 있습니다.
올바른 개체 ID 찾기
서비스 주체의 개체 ID에 대한 자세한 내용은 서비스 주체 개체를 참조하세요. 엔터프라이즈 애플리케이션 아래의 Azure Portal에서 애플리케이션 이름 옆에 나열된 서비스 주체의 개체 ID를 찾을 수 있습니다.
경고
앱 등록 개요 페이지에서 가져온 개체 ID는 엔터프라이즈 애플리케이션 개요 페이지에서 가져온 개체 ID와 다릅니다. 앱 등록 개요 페이지에 있는 경우 로컬 디렉터리 애플리케이션 이름에서 연결된 관리되는 애플리케이션을 선택하여 엔터프라이즈 애플리케이션 개요 페이지에서 올바른 개체 ID로 이동합니다.