자습서: Microsoft Entra 서버 로그인 만들기 및 활용

적용 대상:Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics(전용 SQL 풀만 해당)

이 문서에서는 Azure SQL의 가상 master 마스터 데이터베이스에서 Microsoft Entra(이전의 Azure Active Directory)가 지원하는 로그인을 만들고 활용하는 방법에 대해 설명합니다.

이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.

  • Azure SQL Database용 새 구문 익스텐션을 확장하여 가상 master 데이터베이스에 Microsoft Entra 로그인 만들기
  • 가상 master 데이터베이스에서 Microsoft Entra 로그인에 매핑된 사용자 만들기
  • Microsoft Entra 사용자에 서버 역할 부여
  • Microsoft Entra 로그인 사용 안 함으로 설정

참고 항목

Microsoft Entra 서버 주체(로그인)는 현재 Azure SQL Database에 대한 공개 미리 보기로 제공됩니다. Azure SQL Managed Instance에서는 이미 Microsoft Entra 로그인을 활용할 수 있습니다.

필수 조건

  • 데이터베이스가 있는 SQL Database 또는 SQL Managed Instance. 빠른 시작: Azure SQL Database 단일 데이터베이스 만들기(Azure SQL Database를 아직 만들지 않은 경우) 또는 빠른 시작: Azure SQL Managed Instance 만들기를 참조하세요.
  • SQL Database 또는 Managed Instance에 설정된 Microsoft Entra 인증. 자세한 내용은 Azure SQL에서 Microsoft Entra 인증 구성 및 관리를 참조하세요.
  • 이 문서에서는 가상 master 데이터베이스 내에서 Microsoft Entra 로그인 및 사용자를 만드는 방법에 대해 설명합니다. Microsoft Entra 관리자만 가상 master 데이터베이스 내에서 사용자를 만들 수 있으므로 이 자습서를 진행할 때 Microsoft Entra 관리자 계정을 사용할 것을 권장합니다. loginmanager 역할의 Microsoft Entra 주체는 로그인을 만들 수 있지만 가상 master 데이터베이스 내의 사용자는 만들 수 없습니다.

Microsoft Entra 로그인 만들기

  1. Microsoft Entra 계정의 Azure SQL Database 로그인을 만듭니다. 이 예에서는 contoso라는 Azure AD 도메인에 있는 bob@contoso.com을 사용합니다. Microsoft Entra 그룹 또는 서비스 주체(애플리케이션)를 사용하여 로그인을 만들 수도 있습니다. 예를 들어 mygroup 해당 그룹의 구성원인 Microsoft Entra 계정으로 구성된 Microsoft Entra 그룹입니다. 자세한 내용은 CREATE LOGIN(Transact-SQL)을 참조하세요.

    참고 항목

    첫 번째 Microsoft Entra 로그인은 Microsoft Entra 관리자가 만들어야 합니다. Microsoft Entra 관리자는 Microsoft Entra 사용자 또는 그룹일 수 있습니다. SQL 로그인은 Microsoft Entra 로그인을 만들 수 없습니다.

  2. SSMS(SQL Server Management Studio)를 사용하여 서버에 설정된 Microsoft Entra 관리자 계정으로 SQL Database에 로그인합니다.

  3. 다음 쿼리를 실행합니다.

    Use master
    CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER
    GO
    
  4. sys.server_principals에서 생성된 로그인을 확인합니다. 다음 쿼리를 실행합니다.

    SELECT name, type_desc, type, is_disabled 
    FROM sys.server_principals
    WHERE type_desc like 'external%'  
    

    다음과 유사한 출력이 표시됩니다.

    Name                            type_desc       type   is_disabled 
    bob@contoso.com                 EXTERNAL_LOGIN  E      0 
    
  5. 가상 master 데이터베이스에 로그인 bob@contoso.com이 생성되었습니다.

Microsoft Entra 로그인을 사용하여 사용자 만들기

  1. 이제 Microsoft Entra 로그인을 만들었으므로 가상 master 데이터베이스의 Microsoft Entra 로그인에 매핑된 데이터베이스 수준 Microsoft Entra 사용자를 만들 수 있습니다. 사용자를 특수 역할에 추가하는 방법을 보여주기 위해 예제인 bob@contoso.com을 계속 사용하여 가상 master 데이터베이스에 사용자를 만듭니다. Microsoft Entra 관리자 또는 SQL 서버 관리자만 가상 master 데이터베이스에서 사용자를 만들 수 있습니다.

  2. 가상 master 데이터베이스를 사용하고 있지만 다른 데이터베이스에서 사용자를 만들려는 경우 원하는 데이터베이스로 전환할 수 있습니다. 다음 쿼리를 실행합니다.

    Use master
    CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
    

    Microsoft Entra 사용자 별칭(예: bob@contoso.com)을 사용할 필요는 없지만 Microsoft Entra 사용자와 Microsoft Entra 로그인에는 동일한 별칭을 사용하는 것이 좋습니다.

  3. sys.database_principals에서 생성된 사용자를 확인합니다. 다음 쿼리를 실행합니다.

    SELECT name, type_desc, type 
    FROM sys.database_principals 
    WHERE type_desc like 'external%'
    

    다음과 유사한 출력이 표시됩니다.

    Name                            type_desc       type
    bob@contoso.com                 EXTERNAL_USER   E
    

참고 항목

Microsoft Entra 로그인 없이 Microsoft Entra 사용자를 만드는 기존 구문은 계속 지원됩니다. 다음 구문을 실행하면 연결된 특정 데이터베이스 내에 포함된 데이터베이스 사용자가 만들어집니다. 중요한 것은 동일한 이름의 로그인이 가상 master 데이터베이스에 있더라도 이 사용자는 로그인에 연결되지 않는다는 것입니다.

예들 들어 CREATE USER [bob@contoso.com] FROM EXTERNAL PROVIDER입니다.

Microsoft Entra 로그인에 대한 서버 수준 역할 권한 부여하기

##MS_DefinitionReader##, ##MS_ServerStateReader## 또는 ##MS_ServerStateManager## 역할과 같은 고정 서버 수준 역할에 로그인을 추가할 수 있습니다.

참고 항목

여기에 언급된 서버 수준 역할은 Microsoft Entra 그룹에 대해 지원되지 않습니다.

ALTER SERVER ROLE ##MS_DefinitionReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateReader## ADD MEMBER [AzureAD_object];
ALTER SERVER ROLE ##MS_ServerStateManager## ADD MEMBER [AzureAD_object];

사용 권한은 사용자가 다시 연결할 때까지 유효하지 않습니다. DBCC 캐시도 플러시합니다.

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS 

서버 수준 역할의 일부인 Microsoft Entra 로그인을 확인하려면 다음 쿼리를 실행합니다.

SELECT roles.principal_id AS RolePID,roles.name AS RolePName,
       server_role_members.member_principal_id AS MemberPID, members.name AS MemberPName
       FROM sys.server_role_members AS server_role_members
       INNER JOIN sys.server_principals AS roles
       ON server_role_members.role_principal_id = roles.principal_id
       INNER JOIN sys.server_principals AS members 
       ON server_role_members.member_principal_id = members.principal_id;

Microsoft Entra 사용자에게 특별한 역할 권한 부여하기

SQL Database의 특수 역할은 가상 master 데이터베이스의 사용자에게 할당할 수 있습니다.

사용자에게 특수 데이터베이스 역할 중 하나를 부여하려면 사용자가 가상 master 데이터베이스에 있어야 합니다.

역할에 사용자를 추가하려면 다음 쿼리를 실행합니다.

ALTER ROLE [dbmanager] ADD MEMBER [AzureAD_object] 

역할에서 사용자를 제거하려면 다음 쿼리를 실행합니다.

ALTER ROLE [dbmanager] DROP MEMBER [AzureAD_object] 

AzureAD_object(은)는 Microsoft Entra ID의 Microsoft Entra 사용자, 그룹 또는 서비스 주체일 수 있습니다.

이 예제에서는 사용자 bob@contoso.com을 만들었습니다. 사용자에게 dbmanagerloginmanager 역할을 부여하겠습니다.

  1. 다음 쿼리를 실행합니다.

    ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] 
    ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com] 
    
  2. 다음 쿼리를 실행하여 데이터베이스 역할 할당을 확인합니다.

    SELECT DP1.name AS DatabaseRoleName,    
      isnull (DP2.name, 'No members') AS DatabaseUserName    
    FROM sys.database_role_members AS DRM   
    RIGHT OUTER JOIN sys.database_principals AS DP1   
      ON DRM.role_principal_id = DP1.principal_id   
    LEFT OUTER JOIN sys.database_principals AS DP2   
      ON DRM.member_principal_id = DP2.principal_id   
    WHERE DP1.type = 'R'and DP2.name like 'bob%' 
    

    다음과 유사한 출력이 표시됩니다.

    DatabaseRoleName       DatabaseUserName 
    dbmanager              bob@contoso.com
    loginmanager           bob@contoso.com
    

선택 사항 - 로그인 사용 안 함

ALTER LOGIN(Transact-SQL) DDL 구문을 사용하여 Azure SQL Database에서 Microsoft Entra 로그인을 사용하거나 사용하지 않도록 설정할 수 있습니다.

ALTER LOGIN [bob@contoso.com] DISABLE

DISABLE 또는 ENABLE 변경을 즉시 적용하려면 다음 T-SQL 명령을 사용하여 인증 캐시 및 TokenAndPermUserStore 캐시를 지워야 합니다.

DBCC FLUSHAUTHCACHE
DBCC FREESYSTEMCACHE('TokenAndPermUserStore') WITH NO_INFOMSGS 

다음 쿼리를 실행하여 로그인을 사용하지 않도록 설정했는지 확인합니다.

SELECT name, type_desc, type 
FROM sys.server_principals 
WHERE is_disabled = 1

이에 대한 사용 사례는 지역 복제본에서 읽기 전용을 허용하지만 주 서버에서는 연결을 거부하는 것입니다.

참고 항목

자세한 내용 및 예제는 다음을 참조하세요.