Microsoft Entra 로그인 및 고유하지 않은 표시 이름을 가진 사용자(미리 보기)

적용 대상:Azure SQL DatabaseAzure SQL Managed Instance

이 문서에서는 T-SQL Object_ID 구문을 사용하여 Azure SQL Database 및 Azure SQL Managed Instance에서 고유하지 않은 표시 이름을 가진 Microsoft Entra 로그인 및 사용자를 만드는 방법을 설명합니다.

참고 항목

WITH OBJECT_ID 구문을 사용하여 Azure SQL Managed Instance에서 사용자 및 로그인을 생성하는 방법은 현재 미리 보기에서 확인할 수 있습니다.

개요

Microsoft Entra ID는 서비스 주체를 사용하는 인증을 지원합니다. 그러나 Microsoft Entra ID에서 고유하지 않은 표시 이름이 있는 서비스 주체를 사용하면 Azure SQL에서 로그인 또는 사용자를 만들 때 오류가 발생합니다.

예를 들어 애플리케이션 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 애플리케이션(서비스 주체)에 대해 중복된 표시 이름을 허용하는 반면, Azure SQL은 Microsoft Entra 로그인 및 사용자를 만들 때 고유한 이름이 요구하기 때문에 발생합니다. 이 문제를 해결하기 위해 로그인 및 사용자를 만드는 DDL(데이터 정의 언어) 문이 WITH OBJECT_ID 절로 Azure 리소스의 개체 ID를 포함하도록 확장되었습니다.

참고 항목

WITH OBJECT_ID 확장자는 현재 공개 미리 보기로 제공됩니다.

대부분의 고유하지 않은 Microsoft Entra ID 표시 이름은 서비스 주체와 관련된 이름이지만, 경우에 따라 그룹 이름일 수도 있습니다. 두 사용자가 동일한 사용자 주체를 가질 수 없으므로 Microsoft Entra 사용자 계정 이름은 고유합니다. 그러나 사용자 계정 이름과 동일한 표시 이름을 사용하여 앱 등록(서비스 주체)은 만들 수 있습니다.

서비스 주체 표시 이름이 중복되지 않은 경우 기본값 CREATE LOGIN 또는 CREATE USER 문을 사용해야 합니다. WITH OBJECT_ID 익스텐션은 공개 미리 보기로 제공되며, 이는 고유하지 않은 서비스 주체와 사용하기 위해 구현된 문제 해결 복구 항목입니다. 고유한 서비스 주체와 함께 사용하는 것은 권장되지 않습니다. 접미사를 추가하지 않고 서비스 주체에 WITH OBJECT_ID 익스텐션을 사용하면 성공적으로 실행은 되지만 로그인 또는 사용자가 만들어진 서비스 주체를 명확하게 나타내지는 못합니다. 서비스 주체를 고유하게 식별하는 접미사를 사용하여 별칭을 만들 것을 권장합니다. SQL Server에는 WITH OBJECT_ID 익스텐션이 지원되지 않습니다.

T-SQL은 고유하지 않은 표시 이름을 위한 T-SQL create login/user 구문

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로 만든 로그인 또는 사용자에 대한 별칭도 지정할 수 있습니다. 예를 들어 다음은 애플리케이션 개체 ID4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx(을)를 사용하여 로그인 myapp4466e을(를) 만듭니다.

CREATE LOGIN [myapp4466e] FROM EXTERNAL PROVIDER 
  WITH OBJECT_ID = '4466e2f8-0fea-4c61-a470-xxxxxxxxxxxx' 
  • 위의 쿼리를 실행하려면 지정된 개체 ID가 Azure SQL 리소스가 있는 Microsoft Entra 테넌트에 있어야 합니다. 그렇지 않으면 Msg 37545, Level 16, State 1, Line 1 '' is not a valid object id for '' or you do not have permission. 오류 메시지가 표시되며 CREATE 명령이 실패합니다.
  • 로그인 또는 사용자 이름은 CREATE LOGIN 또는 CREATE USER 문을 사용할 때 사용자 정의 접미사로 확장된 원래 서비스 주체 이름을 포함해야 합니다. 접미사는 개체 ID의 앞 부분을 포함하는 것이 가장 좋습니다. 예를 들어 개체 ID 2ba6c0a3-cda4-4878-a5ca-xxxxxxxxxxxx의 경우 myapp2ba6c인 것이 좋습니다. 그러나 사용자 지정 접미사를 정의할 수도 있습니다. 개체 ID에서 비롯된 접미사를 사용할 필요는 없습니다.

이 명명 규칙은 따를 시 데이터베이스 사용자 또는 로그인 이름에서 Microsoft Entra ID 개체를 명시적으로 떠올릴 수 있기 때문에 권장됩니다.

참고 항목

별칭은 128자 이내의 글자수 제한을 포함한 sysname의 T-SQL 사양을 준수해야 합니다. 접미사는 개체 ID의 앞 5자로 제한하는 것이 좋습니다.

Microsoft Entra ID의 서비스 주체 표시 이름은 데이터베이스 로그인 또는 사용자 별칭과 동기화되지 않습니다. CREATE LOGIN 또는 CREATE USER의 실행은 Azure Portal의 표시 이름에 영향을 미치지 않습니다. 마찬가지로 Microsoft Entra ID 표시 이름을 수정해도 데이터베이스 로그인 또는 사용자 별칭에는 영향을 미치지 않습니다.

애플리케이션 사용자 식별

고유하지 않은 서비스 주체의 경우 Microsoft Entra 별칭이 올바른 애플리케이션을 떠올리게 하는지 확인하는 것이 중요합니다. 사용자가 올바른 서비스 주체(애플리케이션)를 위해 만들어졌는지 확인하는 방법:

  1. SQL Database에서 만든 사용자로부터 애플리케이션의 애플리케이션 ID 또는 Microsoft Entra 그룹의 개체 ID를 가져옵니다. 다음 쿼리를 확인합니다.

    • 다음 쿼리를 실행하여 만든 사용자로부터 서비스 주체의 애플리케이션 ID를 가져옵니다.

      SELECT CAST(sid as uniqueidentifier) ApplicationID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      예제 출력:

      Screenshot of SSMS output for the Application ID.

      애플리케이션 ID는 지정된 로그인 또는 사용자 이름의 SID(보안 ID)에서 변환되며, 아래 쿼리를 실행하여 마지막 여러 숫자 및 생성 날짜를 비교하여 확인됩니다.

      SELECT SID, create_date FROM sys.server_principals WHERE NAME = 'myapp2ba6c' 
      

      예제 출력:

      Screenshot of SSMS output for the SID of the application.

    • 만든 사용자로부터 Microsoft Entra 그룹의 개체 ID를 가져오려면 다음 쿼리를 실행합니다.

      SELECT CAST(sid as uniqueidentifier) ObjectID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      예제 출력:

      Screenshot of SSMS output for the Object ID of the Microsoft Entra group.

      만든 사용자로부터 Microsoft Entra 그룹의 SID를 확인하려면 다음 쿼리를 실행합니다.

      SELECT SID, createdate FROM sys.sysusers WHERE NAME = 'myappgroupd3451b' 
      

      예제 출력:

      Screenshot of SSMS output for the SID of the group.

    • PowerShell을 사용하여 애플리케이션의 개체 ID 및 애플리케이션 ID를 가져오려면 다음 명령을 실행합니다.

      Get-AzADApplication -DisplayName "myapp2ba6c"
      
  2. Azure Portal로 이동하여 엔터프라이즈 애플리케이션 또는 Microsoft Entra 그룹 리소스에서 애플리케이션 ID 또는 개체 ID를 각각 확인합니다. 위의 쿼리에서 가져온 것과 일치하는지 확인합니다.

참고 항목

CREATE T-SQL 문과 WITH OBJECT_ID 절을 사용하여 서비스 주체로부터 사용자를 만들 때는 개체 ID가 필요합니다. 이는 Azure SQL에서 별칭을 확인하려고 할 때 반환되는 애플리케이션 ID와 다릅니다. 이 확인 프로세스를 사용하여 Microsoft Entra ID의 SQL 별칭과 연결된 서비스 주체 또는 그룹을 식별하고, 개체 ID로 로그인 또는 사용자를 만들 때 발생할 수 있는 실수를 방지할 수 있습니다.

올바른 개체 ID 찾기

서비스 주체의 개체 I에 대한 자세한 내용은 서비스 주체의 개체를 참조하세요. 서비스 주체의 개체 ID는 엔터프라이즈 애플리케이션 아래의 Azure Portal 애플리케이션 이름 옆에 나열되어 있습니다.

Warning

앱 등록 개요 페이지에서 가져온 개체 ID는 엔터프라이즈 애플리케이션 개요 페이지에서 가져온 개체 ID와 다릅니다. 앱 등록 개요 페이지의 경우, 로컬 디렉터리 애플리케이션 이름에서 연결된 관리되는 애플리케이션을 선택하여 엔터프라이즈 애플리케이션 개요 페이지에서 올바른 개체 ID로 이동해야 합니다.