Sử dụng và quản lý Database Mail
SQL Server 2005 có một hệ thống mail nhỏ được gọi là Database Mail. Database
Mail là một tính năng được cải thiện trong SQL Mail so với các phiên bản trước đó
của SQL Server. Với tính năng này bạn có thể thiết lập nhiều tài khoản cũng như hồ
sơ để hỗ trợ những vấn đề về email. Database Mail là gì?
Database Mail là một hệ thống hàng đợi của mail. Các email message được lưu trong một
hàng đợi bên trong cơ sở dữ liệu để được xử lý. Khi một email message được đưa vào
trong hàng đợi, một quá trình mở sẽ được kích hoạt để gửi email messages trong hàng đợi
đến mail server thích hợp. Khi email đã được gửi thì một email message có trạng thái của
phân phối sẽ được gửi trở lại cho SQL Server.
Kích hoạt Database Mail
Database Mail không ở trạng thái có sẵn khi cài đặt. Từ mô hình bảo mật của SQL Server
có một số thứ bị tắt mặc định, bạn cần phải kích hoạt Database Mail nếu muốn sử dụng
nó. Bạn có thể sử dụng công cụ cấu hình Surface Area Configuration hoặc T-SQL Server
dưới đây để kích hoạt Database Mail:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE
GO
Thiết lập tài khoản
Một tài khoản Database Mail cho biết SQL Server 2005 phải truyền thông như thế nào
với máy chủ SMTP. Tài khoản chỉ rõ email được định dạng và được gửi như thế nào.
Một tài khoản sẽ nhận dạng một máy chủ SMTP và phương pháp thẩm định. Tài khoản
được sử dụng cho Database Mail không tương ứng với tài khoản đăng nhập của SQL
Server.
Khi thiết lập một tài khoản, bạn cần phải chỉ ra đủ thông tin để SQL Server 2005 có thể
truyền thông với máy chủ SMTP và thẩm định lại nó nếu cần thiết. Tham khảo các nguồn
cơ sở dữ liệu msdb và là một thành viên của DatabaseMailUserRole trong cơ sở dữ liệu
msdb. Trong khi đó private profile chỉ có thể được sử dụng cho những người dùng đặc
biệt được phép truy cập vào private profile. Một mail profile có thể được kết hợp với một
hay nhiều tài khoản khác. Bạn có thể quản lý các profile bằng Database Mail
Configuration Wizard, hoặc sử dụng lệnh T-SQL Server giống như thiết lập cho một mail
profile dưới đây:
Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'Database Administration Profile',
@description = 'Mail Profile for use by DBA processes';
Ở đây tôi đã tạo một profile có tên là “Database Administration Profile”. Có một profile
đã tạo không có nghĩa là bạn có thể sử dụng profile này để gửi email. Bạn vẫn cần phải
kết hợp nó với ít nhật một tài khoản Database Mail và một người dùng bên trong dữ liệu
msdb. Để thực hiện điều đó tôi có thể chạy hai lệnh dưới đây:
Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Database Administration Profile',
@account_name = 'Database Administration Account',
@sequence_number =1 ;
Grant access to the profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'Database Administration Profile',
@principal_name = 'ProdServer01',
Câu lệnh EXECUTE đầu tiên sẽ kết hợp profile của tôi với một tài khoản. Câu lệnh thứ
hai sẽ kết hợp profile với cơ sở dữ liệu msdb người dùng ‘ProdServer01’. Những người
dùng này cần phải được cho phép là thành viên trong DatabaseMailUserRole trước khi họ
có thể gửi mail. Khi tôi kết hợp profile này với một người dùng đặc biệt, thì profile này
được hiểu như một private profile. Để tạo một public profile bạn cần phải kết hợp một
profile với một “public” database role.
Gửi Database Mail
@recipients = '',
@body = 'Reindex database process completed successfully',
@subject = 'Reindex Database' ;
Database Mail xử lý hết một hàng đợi khi chạy lệnh trên thì tôi sẽ có một thông báo được
gửi phản hồi nói rằng mail được đưa vào hàng đợi “Mail queued”. Khi bạn thực thi
sp_send_dbmail SP thì mail không được gửi đi ngay lập tức mà thay vì đó nó được lưu
trong hàng đợi mail bên trong cơ sở dữ liệu msdb. SP này kích hoạt một quá trình mail
mở rộng (DatabaseMail90.exe) để chạy. Thực thi này đọc mail trong hàng đợi và gửi nó
đến mail server thích hợp.
Các trường hợp khác nhau trong sử dụng tài khoản và hồ sơ
Có một số cách khác nhau trong việc sử dụng những ưu điểm của đa tài khoản và profile
được Database Mail cho phép bạn thực hiện với chúng.
Một trong những ưu điểm quan sát thấy của tính năng đa tài khoản đó là cấu hình profile
Database Mail của bạn có thể cho phép khả năng chuyển đổi dự phòng khi một trong
những máy chủ SMTP gặp các vấn đề trục trặc. Khi bổ sung vào các tài khoản cho một
profile Database Mail bạn có thể cung cấp cho chúng một chuỗi số sequence_number.
Khi gửi một email message mới, Database Mail cố gắng gửi nó bằng cách sử dụng số
chuỗi thấp nhất trước. Nếu quá trình gửi đó bị hỏng thì Database Mail sẽ sử dụng chuỗi
số cao hơn tiếp theo. Database Mail sẽ liên tục thực hiện công việc này cho đến khi mail
được gửi thành công hoặc tất cả các tài khoản đã đều được thử.
Một tùy chọn khác trong việc sử dụng này là hỗ trợ cho mail message phân phát đến các
địa chỉ email khác nhau. Nếu bạn có nhiều ứng dụng cần phải gửi email, mỗi ứng dụng
có một địa chỉ email riêng của nó. Việc làm này sẽ giúp người nhận email tự đông phân
biệt được quá trình đã gửi là quá trình gì bằng việc xem địa chỉ email.
Ngoài ra, nếu bạn sử dụng các private profile thì bạn có thể kết hợp các profile này với
các chính sách bảo mật khác. Bằng cách đó sẽ cho phép bạn kiểm soát được private
profile, người dùng msdb sẽ được phép sử dụng một profile Database Mail riêng biệt.
Kiểm tra Database Mail
SQL Server cung cấp 6 cửa sổ hệ thống khác nhau trong cơ sở dữ liệu msdb cho việc
kiểm tra thông tin Database Mail. Các cửa sổ này có thể được sử dụgn để lấy lại thông tin
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp @sent_before=@delete_date