Database/MSSQL

Microsoft 365로 SQL Database Mail 구성 시 TLS 문제, 일반 사용자 권한 문제 처리

달빛에취하다 2025. 1. 3. 15:14

TLS 문제 처리

https://stackoverflow.com/questions/71116436/database-mail-will-not-send-email-to-smtp-office365-com?utm_source=chatgpt.com

 

아래 내용에서 레지스트리 부분만 처리하면 됩니다.

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001
  • DatabaseMail.exe는 .NET Framework 3.5용으로 빌드되었지만 TLS 1.2(.NET Framework 4.5.2 이상)를 지원하는 .NET Framework가 설치되어 있어야 합니다.
  • TLS 1.2 클라이언트 프로토콜은 레지스트리의 컴퓨터 수준에서 사용하도록 설정해야 합니다.
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\SecurityProviders\\SCHANNEL\\Protocols\\TLS 1.2\\Client]
"DisabledByDefault"=dword:00000000
"Enabled"=dword:00000001

  • 레지스트리에서 .NET Framework 4.x에 대해 TLS 1.2 클라이언트 프로토콜을 사용하도록 설정해야 합니다.
[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\.NETFramework\\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

[HKEY_LOCAL_MACHINE\\SOFTWARE\\Wow6432Node\\Microsoft\\.NETFramework\\v4.0.30319]
"SchUseStrongCrypto"=dword:00000001

  • 적절한 supportedRuntime 은 DatabaseMail.exe.config 파일에 있어야합니다 (예 : Microsoft .NET Framework 4.5.2가 설치된 경우).
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="DatabaseServerName" value="." />
    <add key="DatabaseName" value="msdb" />
  </appSettings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5.2" />
  </startup>
</configuration>

  1. SSMS의 데이터베이스 메일 설정을 통해 보내는 계정을 적절하게 구성합니다.
  • 서버 이름: smtp.office365.com
  • 포트 번호: 587(선호 또는 25)
  • 이 서버에는 보안 연결(SSL)이 필요합니다: 선택해야 합니다(STARTTLS 활성화).
  • SMTP 인증:
    • 기본 인증(선택됨)
      • 사용자 이름: sending_mailbox_user@your_domain.com
      • 암호: your_office365_password
      • 비밀번호 확인: your_office365_password_again

권한 문제 처리

-- 권한이 있는 계정 (관리자 계정)으로 실행해야 합니다.
USE msdb;

CREATE USER lacs FOR LOGIN [대상로그인];

-- sysmail_mailitems 테이블에 SELECT 권한 부여
GRANT SELECT ON [msdb].[dbo].[sysmail_mailitems] TO [대상로그인];

/*
-- 기본적으로 일반 사용자 계정에서 삭제나 입력을 처리해서는 안된다.
-- 기본적으로 일반 사용자 계정에서 삭제나 입력을 처리해서는 안된다.
-- 기본적으로 일반 사용자 계정에서 삭제나 입력을 처리해서는 안된다.
-- 기본적으로 일반 사용자 계정에서 삭제나 입력을 처리해서는 안된다.

-- sysmail_mailitems 테이블에 INSERT 권한 부여
GRANT INSERT ON [msdb].[dbo].[sysmail_mailitems] TO [대상로그인];

-- sysmail_mailitems 테이블에 DELETE 권한 부여
GRANT DELETE ON [msdb].[dbo].[sysmail_mailitems] TO [대상로그인];

-- DatabaseMailUserRole 역할을 사용자에게 부여
EXEC sp_addrolemember 'DatabaseMailUserRole', '대상로그인';

*/
 
 -- 특정 사용자에게 sp_send_dbmail 프로시저 실행 권한 부여
GRANT EXECUTE ON msdb.dbo.sp_send_dbmail TO [대상로그인];

EXEC sp_addrolemember 'DatabaseMailUserRole', '대상로그인';