SQL Server: Azure 시스템 할당 관리 ID 유저 추가 방법

Agenda

  1. Microsoft Entra 인증을 이용한 SQL Server 에 로그인 방법을 알아 본다.
  2. 일반적인 SQL User 추가 방법을 알아 본다.
  3. 시스템 할당 관리 ID(System assigned managed ID) User 추가 방법을 알아 본다.
  4. 관리 ID에 SQL DB 읽기/쓰기 권한을 할당하는 방법을 알아 본다.
SQL Server 접속 방식에 따라 추가 포트가 필요한 경우도 존재한다.

SQL Server 에 로그인

Microsoft Entra 인증만 허용

SQL Server 에 접속할 때 Entra 인증만을 허용한다.

이 설정을 적용한 경우, SQL Server admin 계정으로도 접속이 불가능하다.

Microsoft Entra 인증

SQL Server 에 로그인

  1. 이름 해결에 문제가 없는 것을 확인한다.
  2. SSMS (SQL Server Management Stuido)의 접속 방식을 Microsoft Entra MFA 로 지정한다.
  3. Entra 인증을 이용하여 SQL Server 에 로그인한다.
1. nslookup <xxxx.database.windows.net>
2. 서버에 Microsoft Entra MFA 인증으로 접속

정상적으로 SQL Server 에 접속되는 것을 확인한다.

SQL Server User 생성 및 역할 할당

  1. [보안] – [로그인] – [새 로그인] 을 선택한다.
  2. User 생성 쿼리를 실행한다.
  3. 보안 디렉토리 하위에 새로운 유저가 생성된 것을 확인한다.

새 로그인(N)… 선택

[새 로그인] 을 누르면 아래와 같은 템플릿 쿼리가 표시된다.

-- =============================================================================================================================
-- Create SQL Login template for Azure SQL Database, Azure Synapse Analytics Database, and Azure Synapse SQL Analytics on-demand
-- =============================================================================================================================

CREATE LOGIN <SQL_login_name, sysname, login_name> 
	WITH PASSWORD = '<password, sysname, Change_Password>' 
GO

-- =============================================================================================================================
-- Create Microsoft Entra Login template for Azure SQL Database, Azure Synapse Analytics Database, and Azure Synapse SQL Analytics on-demand
-- =============================================================================================================================

-- CREATE LOGIN <Microsoft Entra Principal, sysname, login_name> FROM EXTERNAL PROVIDER

User 생성 쿼리를 실행

  1. 아래의 Sample query 를 실행한다.
  2. 명령이 완료되었다는 메시지를 확인한다.
CREATE LOGIN [Username]
    WITH PASSWORD = N'Password'
GO

[보안] 디렉토리 하위에 생성된 유저를 확인

App Service 시스템 할당 관리 ID 유효화

  1. App service 의 identity 페이지로 이동한다.
  2. System assigned Status 를 On 으로 변경 후 저장한다.

SQL Server IAM 설정

  1. SQL Server 의 Access control (IAM) 페이지에 이동한다.
  2. SQL DB Contributor 권한을 위에서 생성한 App Servcie 의 관리 ID에 할당한다.

관리 ID를 이용한 SQL DB User 생성 및 권한 할당

  1. [SQL DB] – [보안] – [사용자] – [새 로그인] 를 선택한다.
  2. 관리 ID User 생성 쿼리를 실행한다.
  3. User 권한 할당 쿼리를 실행한다.
  4. [보안] 디렉토리 하위에 생성된 유저를 확인한다.

새 로그인(N)… 선택

[새 로그인] 을 누르면 아래와 같은 쿼리가 표시된다.

-- =======================================================================================
-- Create User as DBO template for Azure SQL Database and Azure Synapse Analytics Database
-- =======================================================================================
-- For login login_name, create a user in the database
CREATE USER <user_name, sysname, user_name>
	FOR LOGIN <login_name, sysname, login_name>
	WITH DEFAULT_SCHEMA = <default_schema, sysname, dbo>
GO

-- =======================================================================================
-- Create Microsoft Entra User for Azure SQL Database and Azure Synapse Analytics Database
-- =======================================================================================
-- For login <login_name, sysname, login_name>, create a user in the database
-- CREATE USER <Microsoft_Entra_User, sysname, user_name>
--    [   { FOR | FROM } LOGIN <Microsoft_Entra_Principal_Login, sysname, login_name>  ]  
--    | FROM EXTERNAL PROVIDER
--    [ WITH DEFAULT_SCHEMA = <default_schema, sysname, dbo> ]
-- GO


-- Add user to the database owner role
EXEC sp_addrolemember N'db_owner', N'<user_name, sysname, user_name>'
GO

User 생성 쿼리를 실행

CREATE USER [Resource name] FROM EXTERNAL PROVIDER

User 역할 할당 쿼리를 실행

ALTER ROLE db_datareader ADD MEMBER [User name]
ALTER ROLE db_datawriter ADD MEMBER [User name]

DB 수준의 권한 조회

-- 데이터베이스 수준의 권한 조회
SELECT 
    dp.name AS UserName,
    dp.type_desc AS UserType,
    perm.permission_name AS PermissionType,
    perm.state_desc AS PermissionState
FROM 
    sys.database_permissions AS perm
INNER JOIN 
    sys.database_principals AS dp ON perm.grantee_principal_id = dp.principal_id
WHERE 
    dp.name = 'User name';  -- 유저 이름으로 변경

DB 역할 멤버쉽 조회

-- 데이터베이스 역할 멤버십 조회
SELECT 
    dp.name AS UserName,
    dp.type_desc AS UserType,
    dr.name AS RoleName
FROM 
    sys.database_role_members AS drm
INNER JOIN 
    sys.database_principals AS dr ON drm.role_principal_id = dr.principal_id
INNER JOIN 
    sys.database_principals AS dp ON drm.member_principal_id = dp.principal_id
WHERE 
    dp.name = 'User name';  -- 유저 이름으로 변경