Mô hình Bảo mật Phân Tầng trong SQL Server 2019
SQL Server 2019 áp dụng mô hình bảo mật theo cấp độ, từ máy chủ → cơ sở dữ liệu → lược đồ → đối tượng. Hệ thống bao gồm các thành phần cốt lõi:
- Xác thực (Authentication): Xác minh danh tính người dùng thông qua tài khoản máy chủ
- Phân quyền (Authorization): Cấp quyền truy cập cho người dùng/vai trò
- Vai trò (Roles): Tập hợp quyền hạn để quản lý tập trung
- Quyền hạn (Permissions): Quy định thao tác cụ thể trên đối tượng (SELECT, INSERT...)
Cấp độ Bảo mật
| Cấp độ | Thành phần |
|---|---|
| Máy chủ | Tài khoản đăng nhập, vai trò máy chủ, endpoint |
| Cơ sở dữ liệu | Người dùng, vai trò CSDL, quyền hạn |
| Lược đồ | Không gian tên chứa đối tượng |
| Đối tượng | Bảng, view, stored procedure (hỗ trợ quyền cấp cột) |
Thành Phần Bảo Mật Chính
Đối tượng bảo mật (Principal): Thực thể yêu cầu tài nguyên (tài khoản đăng nhập, người dùng, vai trò)
Đối tượng được bảo vệ (Securable): Tài nguyên được cấp quyền (bảng, view, CSDL...)
Quyền hạn (Permission): Quyền thực hiện thao tác (SELECT, INSERT, ALTER...)
Phương Thức Xác Thực
1. Xác thực Windows
- Sử dụng tài khoản Active Directory
- Được quản lý bởi chính sách Windows (mã hóa Kerberos, khóa tài khoản)
- Phù hợp môi trường nội bộ
2. Xác thực Hỗn hợp
- Hỗ trợ cả tài khoản Windows và SQL Server
- Yêu cầu thiết lập chính sách mật khẩu riêng
- Cần đặt mật khẩu mạnh cho tài khoản
sa
Thay Đổi Chế Độ Xác Thực
-- Kiểm tra chế độ hiện tại
SELECT SERVERPROPERTY('IsIntegratedSecurityOnly') AS CheDoXacThuc;
-- Chuyển sang chế độ hỗn hợp (cần khởi động lại dịch vụ)
USE master;
GO
EXEC xp_instance_regwrite
N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\MSSQLServer\MSSQLServer',
N'LoginMode',
REG_DWORD,
2; -- 1: Windows-only, 2: Hỗn hợp
GO
Quản Lý Tài Khoản Máy Chủ
Tạo Tài Khoản Đăng Nhập
-- Tạo tài khoản SQL Server
CREATE LOGIN user_app
WITH PASSWORD = 'S3cur3P@ss!2024',
CHECK_POLICY = ON,
CHECK_EXPIRATION = ON,
DEFAULT_DATABASE = SalesDB,
DEFAULT_LANGUAGE = Vietnamese;
-- Tạo tài khoản Windows
CREATE LOGIN [DOMAIN\AdminUser] FROM WINDOWS
WITH DEFAULT_DATABASE = SalesDB;
Sửa Đổi & Xóa Tài Khoản
-- Thay đổi mật khẩu
ALTER LOGIN user_app WITH PASSWORD = 'NewP@ss!2024';
-- Vô hiệu hóa tài khoản
ALTER LOGIN user_app DISABLE;
-- Xóa tài khoản (kiểm tra trước)
USE SalesDB;
GO
IF EXISTS (SELECT 1 FROM sys.database_principals
WHERE sid = (SELECT sid FROM sys.server_principals
WHERE name = 'user_app'))
BEGIN
DROP USER IF EXISTS user_app;
END
GO
DROP LOGIN IF EXISTS user_app;
Quản Lý Vai Trò và Quyền Hạn
Vai Trò Máy Chủ Cố Định
| Vai trò | Mô tả |
|---|---|
| sysadmin | Quản trị viên hệ thống (quyền cao nhất) |
| securityadmin | Quản lý tài khoản và quyền hạn |
| dbcreator | Tạo/sửa/xóa cơ sở dữ liệu |
Thêm Tài Khoản vào Vai Trò
-- Tạo tài khoản giám sát
CREATE LOGIN monitor_account
WITH PASSWORD = 'MonitorP@ss!2024',
CHECK_POLICY = ON;
-- Gán vào vai trò securityadmin
ALTER SERVER ROLE securityadmin ADD MEMBER monitor_account;
Vai Trò Cơ Sở Dữ Liệu Tự Định Nghĩa
USE SalesDB;
GO
-- Tạo vai trò quản lý bán hàng
CREATE ROLE QuanLyBanHang;
GRANT SELECT, INSERT, UPDATE ON dbo.DonHang TO QuanLyBanHang;
GRANT EXECUTE ON dbo.usp_BaoCaoDoanhSo TO QuanLyBanHang;
-- Tạo người dùng và gán vai trò
CREATE USER user_sales FOR LOGIN sales_login;
ALTER ROLE QuanLyBanHang ADD MEMBER user_sales;
Quản Lý Quyền Hạn Chi Tiết
Cấp Phát Quyền
GRANT {ALL | permission}
ON [class::] securable
TO principal
[WITH GRANT OPTION]
Ví Dụ: Quyền Cấp Cột
USE SalesDB;
GO
-- Tạo người dùng hạn chế
CREATE USER user_restricted FOR LOGIN restricted_login;
-- Cấp quyền đọc tên, từ chối quyền xem lương
GRANT SELECT (MaNV, HoTen) ON dbo.NhanVien TO user_restricted;
DENY SELECT (Luong) ON dbo.NhanVien TO user_restricted;
Quyền Ưu Tiên
DENYluôn ưu tiên hơnGRANT- Quyền người dùng = Quyền trực tiếp + Quyền từ vai trò - Quyền bị từ chối
Triển Khai Bảo Mật Thực Tế
Thiết Lập Mô Hình Phân Vai Trò
-- Tạo vai trò nhân viên
CREATE ROLE NhanVien;
GRANT SELECT, INSERT ON dbo.DonHang TO NhanVien;
DENY DELETE ON dbo.DonHang TO NhanVien;
-- Tạo vai trò báo cáo
CREATE ROLE BaoCao;
GRANT SELECT ON SCHEMA::dbo TO BaoCao;
Thiết Lập Giám Sát Bảo Mật
-- Tạo bảng giám sát đăng nhập
CREATE TABLE dbo.LogDangNhap (
ID INT IDENTITY PRIMARY KEY,
ThoiGian DATETIME DEFAULT GETDATE(),
TenDangNhap NVARCHAR(128),
ThanhCong BIT
);
-- Tạo trigger giám sát
CREATE TRIGGER trg_GiamSatDangNhap
ON ALL SERVER
FOR LOGON
AS
BEGIN
INSERT INTO master.dbo.LogDangNhap (TenDangNhap, ThanhCong)
VALUES (ORIGINAL_LOGIN(), 1);
END;
Nguyên Tắc Bảo Mật Quan Trọng
- Áp dụng nguyên tắc quyền tối thiểu
- Ưu tiên sử dụng xác thực Windows
- Luôn bật chính sách mật khẩu cho tài khoản SQL
- Thường xuyên kiểm tra phân quyền
- Tránh sử dụng vai trò sysadmin không cần thiết
- Thiết lập giám sát đăng nhập và hoạt động hệ thống