Cơ chế Bảo mật SQL Server 2019: Triển khai và Quản lý Quyền hạn

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

  • DENY luôn ưu tiên hơn GRANT
  • 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

Thẻ: sql-server-2019 database-security authorization T-SQL role-based-access-control

Đăng vào ngày 5 tháng 6 lúc 03:52