자습서: Microsoft Entra 서버 로그인 만들기 및 활용
적용 대상: Azure SQL 데이터베이스 Azure SQL Managed Instance Azure Synapse Analytics(전용 SQL 풀만 해당)
이 문서에서는 Azure SQL의 가상 master
마스터 데이터베이스에서 Microsoft Entra(이전의 Azure Active Directory)가 지원하는 로그인을 만들고 활용하는 방법에 대해 설명합니다.
이 자습서에서는 다음을 하는 방법을 알아볼 수 있습니다.
- Azure SQL 데이터베이스용 새 구문 익스텐션을 확장하여 가상
master
데이터베이스에 Microsoft Entra 로그인 만들기 - 가상
master
데이터베이스에서 Microsoft Entra 로그인에 매핑된 사용자 만들기 - Microsoft Entra 사용자에 서버 역할 부여
- Microsoft Entra 로그인 사용 안 함으로 설정
참고 사항
Microsoft Entra 서버 주체(로그인)는 현재 Azure SQL 데이터베이스에 대한 공개 미리 보기로 제공됩니다. Azure SQL Managed Instance에서는 이미 Microsoft Entra 로그인을 활용할 수 있습니다.
필수 조건
- 데이터베이스가 있는 SQL Database 또는 SQL Managed Instance. 빠른 시작: Azure SQL 데이터베이스 단일 데이터베이스 만들기(Azure SQL 데이터베이스를 아직 만들지 않은 경우) 또는 빠른 시작: Azure SQL Managed Instance 만들기를 참조하세요.
- SQL Database 또는 SQL Managed Instance에 설정된 Microsoft Entra 인증. 자세한 내용은 Azure SQL에서 Microsoft Entra 인증 구성 및 관리를 참조하세요.
- 이 문서에서는 가상
master
데이터베이스 내에서 Microsoft Entra 로그인 및 사용자를 만드는 방법에 대해 설명합니다. Microsoft Entra 관리자만 가상master
데이터베이스 내에서 사용자를 만들 수 있으므로 이 자습서를 진행할 때 Microsoft Entra 관리자 계정을 사용할 것을 권장합니다.loginmanager
역할의 Microsoft Entra 주체는 로그인을 만들 수 있지만 가상master
데이터베이스 내의 사용자는 만들 수 없습니다.
Microsoft Entra 로그인 만들기
Microsoft Entra 계정의 Azure SQL 데이터베이스 로그인을 만듭니다. 이 예에서는
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 로그인을 만들 수 없습니다.
SSMS(SQL Server Management Studio)를 사용하여 서버에 설정된 Microsoft Entra 관리자 계정으로 SQL Database에 로그인합니다.
다음 쿼리를 실행합니다.
Use master CREATE LOGIN [bob@contoso.com] FROM EXTERNAL PROVIDER GO
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
가상
master
데이터베이스에 로그인bob@contoso.com
이 생성되었습니다.
Microsoft Entra 로그인을 사용하여 사용자 만들기
이제 Microsoft Entra 로그인을 만들었으므로 가상
master
데이터베이스의 Microsoft Entra 로그인에 매핑된 데이터베이스 수준 Microsoft Entra 사용자를 만들 수 있습니다. 사용자를 특수 역할에 추가하는 방법을 보여주기 위해 예시인bob@contoso.com
을 계속 사용하여 가상master
데이터베이스에 사용자를 만듭니다. Microsoft Entra 관리자 또는 SQL 서버 관리자만 가상master
데이터베이스에서 사용자를 만들 수 있습니다.가상
master
데이터베이스를 사용하고 있지만 다른 데이터베이스에서 사용자를 만들려는 경우 원하는 데이터베이스로 전환할 수 있습니다. 다음 쿼리를 실행합니다.Use master CREATE USER [bob@contoso.com] FROM LOGIN [bob@contoso.com]
팁
Microsoft Entra 사용자 별칭(예:
bob@contoso.com
)을 사용할 필요는 없지만 Microsoft Entra 사용자와 Microsoft Entra 로그인에는 동일한 별칭을 사용하는 것이 좋습니다.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 로그인을 생성할 수 있습니다. 자세한 내용은 Microsoft Entra 로그인 및 고유하지 않은 표시 이름을 가진 사용자를 참조세요.
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
을 만들었습니다. 사용자에게 dbmanager 및 loginmanager 역할을 부여하겠습니다.
다음 쿼리를 실행합니다.
ALTER ROLE [dbmanager] ADD MEMBER [bob@contoso.com] ALTER ROLE [loginmanager] ADD MEMBER [bob@contoso.com]
다음 쿼리를 실행하여 데이터베이스 역할 할당을 확인합니다.
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 데이터베이스에서 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
이에 대한 사용 사례는 지역 복제본에서 읽기 전용을 허용하지만 주 서버에서는 연결을 거부하는 것입니다.