Computer >> Máy Tính >  >> Lập trình >> Cơ sở dữ liệu

Bảo mật cấp hàng trong SQL Server 2016

Microsoft® đã tập trung vào tính bảo mật trong SQL Server® và hầu hết tất cả các bản gỡ bỏ đều có cải tiến cho các tính năng hiện có hoặc đã giới thiệu các tính năng bảo mật mới. Trong SQL Server 2016, Microsoft đã giới thiệu nhiều tính năng bảo mật mới giúp người dùng bảo vệ dữ liệu của họ, bao gồm Bảo mật cấp hàng, Luôn mã hóa và Tạo mặt nạ dữ liệu động.

Giới thiệu

Trong blog trước đây của mình, tôi đã viết về Tạo mặt nạ dữ liệu động trong SQL Server 2016. Trong blog này, tôi giới thiệu tính năng Bảo mật cấp hàng (RLS), cho phép bạn kiểm soát người dùng nào có quyền truy cập vào các hàng trong bảng. RLS cho phép bạn thực hiện các hạn chế về dữ liệu dựa trên các đặc điểm của người dùng đang thực hiện truy vấn. RLS giúp bạn dễ dàng kiểm soát quyền truy cập vào dữ liệu mà không hoàn toàn minh bạch cho những người dùng khác nhau.

Nhu cầu về RLS

Đôi khi, chúng tôi chỉ cần trả lại dữ liệu chọn lọc cho những người dùng được chọn lọc. Tuy nhiên, cách tiếp cận đó trở nên không thể quản lý được với số lượng lượt xem được yêu cầu để phù hợp với khối lượng dữ liệu và số lượng người dùng ngày càng tăng. SoMicrosoft đã giới thiệu RLS để đáp ứng yêu cầu bảo mật trong hoàn cảnh mới.

RLS cho phép kiểm soát chi tiết đối với quyền truy cập vào các hàng trong bảng, cho phép bạn dễ dàng kiểm soát người dùng có thể truy cập dữ liệu nào với tính minh bạch hoàn toàn đối với ứng dụng.

Với tính năng này, các hàng được lọc dựa trên ngữ cảnh thực thi của truy vấn, thay vì quyền truy cập của người dùng hiện tại. Bạn có thể tạo các quy tắc logic an toàn để xác định người dùng có thể xem hàng nào và hạn chế bất kỳ hàng nào (hoặc dữ liệu) bằng cách thiết kế chính sách bảo mật linh hoạt và mạnh mẽ cho bảng, như được hiển thị trong hình ảnh sau:

Bảo mật cấp hàng trong SQL Server 2016

Nguồn hình ảnh: https://sqlwi suyễnnoj.com/2015/07/13/implecting-row-level-security-rls-with-sql-server-2016/

Thuộc tính RLS

RLS có các thuộc tính sau:

  • Vai trò truy cập chi tiết (kiểm soát cả quyền truy cập đọc và ghi đối với các hàng cụ thể)
  • Tính minh bạch của ứng dụng (không cần thay đổi ứng dụng)
  • Tập trung quyền truy cập trong cơ sở dữ liệu
  • Dễ dàng triển khai và bảo trì

Cách RLS hoạt động

Để triển khai RLS, bạn cần xem xét các yếu tố sau:

  • Chức năng vị ngữ
  • Vị ngữ bảo mật
  • Chính sách bảo mật

Các phần sau đây mô tả các mục này.

Chức năng vị ngữ

Một hàm vị từ là một hàm giá trị bảng nội dòng để kiểm tra xem Auser đang thực hiện một truy vấn có quyền truy cập vào dữ liệu dựa trên logic được xác định trên đó hay không. Hàm này trả về 1 cho mỗi hàng mà người dùng được phép truy cập.

Vị từ bảo mật

Vị từ bảo mật giúp liên kết chức năng vị từ với bảng .RLS hỗ trợ hai loại vị từ bảo mật:Vị từ bộ lọc và vị ngữ khối. Vị từ bộ lọc lọc dữ liệu một cách im lặng mà không gây ra bất kỳ lỗi nào cho các hoạt động sau theo logic được xác định trong hàm thepredicate.

  • SELECT
  • UPDATE
  • DELETE

Vị từ khối phát sinh lỗi một cách rõ ràng và chặn người dùng sử dụng các thao tác sau trên dữ liệu vi phạm logic hàm vị từ:

  • AFTER INSERT
  • AFTER UPDATE
  • BEFORE UPDATE
  • BEFORE DELETE

Chính sách bảo mật

Một đối tượng chính sách bảo mật được tạo để RLS nhóm tất cả các chuyên gia bảo mật tham chiếu đến chức năng vị từ.

Các trường hợp sử dụng

Dưới đây là một số ví dụ thiết kế về cách RLS có thể được sử dụng:

  • Bệnh viện có thể tạo chính sách bảo mật cho phép y tá chỉ xem các hàng dữ liệu cho bệnh nhân của họ.
  • Ngân hàng có thể tạo chính sách hạn chế quyền truy cập vào các hàng dữ liệu tài chính dựa trên bộ phận kinh doanh hoặc vai trò của nhân viên trong công ty.
  • Ứng dụng nhiều đối tượng thuê có thể tạo chính sách để thực thi sự phân tách hợp lý giữa các hàng dữ liệu của từng đối tượng thuê với mọi hàng của các đối tượng thuê khác. Vì đối tượng thuê nhiều định dạng dữ liệu được lưu trữ trong một bảng nên quy trình này hiệu quả hơn. Mỗi đối tượng thuê chỉ có thể xem các hàng dữ liệu của nó.

Triển khai RLS

Sau đây là một ví dụ về cách triển khai RLS:

Bước 1:Chạy mã sau để tạo cơ sở dữ liệu RowFilter và hai người dùng để kiểm tra với:

CREATE DATABASE RowFilter;
GO
USE RowFilter;
GO
CREATE USER userBrian WITHOUT LOGIN;
CREATE USER userJames WITHOUT LOGIN;
GO

Bước 2:Chạy mã sau để tạo bảng với các ví dụ và cấp đặc quyềnSELECT cho người dùng mới:

CREATE TABLE dbo.SalesFigures (
[userCode] NVARCHAR(10),
[sales] MONEY)
GO
INSERT  INTO dbo.SalesFigures
VALUES ('userBrian',100), ('userJames',250), ('userBrian',350)
GO
GRANT SELECT ON dbo.SalesFigures TO userBrian
GRANT SELECT ON dbo.SalesFigures TO userJames
GO

Bước 3:Chạy đoạn mã sau để thêm chức năng vị ngữ bộ lọc:

CREATE FUNCTION dbo.rowLevelPredicate (@userCode as sysname)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS rowLevelPredicateResult
WHERE @userCode = USER_NAME();
GO

Bước 4:Chạy mã sau để thêm vị từ bộ lọc vào bảng dbo.Sales Figures :

CREATE SECURITY POLICY UserFilter
ADD FILTER PREDICATE dbo.rowLevelPredicate(userCode)
ON dbo.SalesFigures
WITH (STATE = ON);
GO

Bước 5:Chạy mã sau để kiểm tra kết quả với người dùng đã được thêm vào trong Bước 2:

EXECUTE AS USER = 'userBrian';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO

Mã này trả về hai hàng, như được hiển thị bên dưới:

Bảo mật cấp hàng trong SQL Server 2016 (/article/uploadfiles/202207/2022070812111051.png)

EXECUTE AS USER = 'userJames';
SELECT * FROM dbo.SalesFigures;
REVERT;
GO

Mã này trả về một hàng, như được hiển thị bên dưới:

Bảo mật cấp hàng trong SQL Server 2016 (/article/uploadfiles/202207/2022070812111024.png)

Quyền

Việc tạo, thay đổi hoặc loại bỏ các chính sách bảo mật yêu cầu CHÍNH SÁCH PHÂN TÍCH ALTER sự cho phép.

Việc tạo hoặc bỏ chính sách bảo mật yêu cầu ALTER sự cho phép trên trang web.

Ngoài ra, mỗi vị từ yêu cầu các quyền sau, được thêm vào:

  • CHỌN TÀI LIỆU THAM KHẢO quyền đối với hàm được sử dụng như một vị từ.
  • TÀI LIỆU THAM KHẢO quyền trên bảng đích được ràng buộc với chính sách.
  • TÀI LIỆU THAM KHẢO quyền trên mỗi cột từ bảng đích được sử dụng đối số.

Chính sách bảo mật áp dụng cho tất cả người dùng, bao gồm cả người dùng sở hữu cơ sở dữ liệu (DBO) trong cơ sở dữ liệu. Người dùng DBO có thể thay đổi hoặc hủy bỏ các chính sách bảo mật. Tuy nhiên, những thay đổi của họ đối với các chính sách bảo mật có thể được kiểm tra. Trong trường hợp người dùng có đặc quyền cao như sysadmin hoặc db_owner , bạn cần xem tất cả các hàng để khắc phục sự cố xác thực dữ liệu, vì vậy bạn phải viết chính sách bảo mật để cho phép điều đó.

Nếu chính sách bảo mật được tạo bằng SCHEMABINDING = OFF , thì người dùng phải có SELECT hoặc EXECUTE quyền đối với hàm vị ngữ và bất kỳ bảng bổ sung, dạng xem hoặc hàm nào được sử dụng trong hàm vị ngữ để truy vấn bảng mục tiêu. Nếu chính sách bảo mật được tạo bằng SCHEMABINDING = ON , chọn mặc định, sau đó các kiểm tra quyền này bị bỏ qua khi người dùng truy vấn bảng mục tiêu.

Sửa đổi SQL Server 2016 RLS

Thực hiện hành động sau để tắt SQL Server RLS cho một chính sách:

  • Thay đổi chính sách bảo mật UseFilter với State = off .

Thực hiện các hành động sau để bỏ bộ lọc và chính sách bảo mật:

  • Bỏ chính sách bảo mật UseFilter .
  • Bỏ chức năng dbo.rowlevelPredicate .

Các phương pháp hay nhất

Microsoft đề xuất các phương pháp hay nhất sau:

  • Chúng tôi thực sự khuyên bạn nên tạo một lược đồ riêng cho các đối tượng RLS (chức năng vị từ và chính sách bảo mật).
  • AL HƠN BẤT KỲ CHÍNH SÁCH BẢO MẬT NÀO quyền được dành cho những người có đặc quyền cao (chẳng hạn như người quản lý chính sách bảo mật). Người quản lý chính sách bảo mật không yêu cầu CHỌN quyền trên bảng mà họ bảo vệ.
  • Tránh chuyển đổi kiểu trong các hàm vị ngữ để tránh các lỗi thời gian chạy tiềm ẩn.
  • Tránh đệ quy trong các hàm vị ngữ nếu có thể để tránh giảm cấp hiệu suất. Trình tối ưu hóa truy vấn cố gắng phát hiện các đệ quy trực tiếp. Tuy nhiên, nó không được đảm bảo để tìm các đệ quy gián tiếp (chẳng hạn như khi một hàm thứ hai gọi hàm vị từ).
  • Tránh sử dụng quá nhiều phép nối bảng trong các hàm vị ngữ để tối đa hóa hiệu suất.

Giới hạn và hạn chế trong RLS

Sau đây là một số hạn chế áp dụng cho RLS:

  • Hàm vị ngữ phải được tạo bằng SCHEMABINDING . Nếu sự cố được tạo ra mà không có SCHEMABINDING và bạn cố gắng ràng buộc nó với một chính sách bảo mật, nó sẽ gây ra lỗi.
  • Không thể tạo các chế độ xem đã lập chỉ mục trên bảng có triển khai RLS.
  • Bảng trong bộ nhớ không được hỗ trợ cho RLS.
  • Chỉ mục toàn văn bản không được hỗ trợ.

Kết luận

Với tính năng RLS trong SQL Server 2016, bạn có thể cung cấp bảo mật cho bản ghi ở cấp cơ sở dữ liệu mà không cần thực hiện thay đổi ở cấp ứng dụng. Bạn hoàn thiện RLS bằng cách sử dụng một hàm vị từ và tính năng chính sách bảo mật mới bên cạnh mã hiện có của bạn mà không cần thay đổi mã DataManipulation Language (DML) trong cơ sở dữ liệu của bạn.

Sử dụng tab Phản hồi để đưa ra bất kỳ nhận xét hoặc đặt câu hỏi nào.

Tối ưu hóa môi trường của bạn với quản trị, quản lý và cấu hình chuyên gia

Dịch vụ ứng dụng của Rackspace (RAS) các chuyên gia cung cấp các dịch vụ chuyên nghiệp và được quản lý sau trên nhiều danh mục ứng dụng:

  • nền tảng Thương mại điện tử và Trải nghiệm Kỹ thuật số
  • Hoạch định Nguồn lực Doanh nghiệp (ERP)
  • Kinh doanh Thông minh
  • Quản lý quan hệ khách hàng của Salesforce (CRM)
  • Cơ sở dữ liệu
  • Lưu trữ Email và Năng suất

Chúng tôi cung cấp:

  • Chuyên môn không thiên vị :Chúng tôi đơn giản hóa và hướng dẫn hành trình hiện đại hóa của bạn, tập trung vào các khả năng mang lại giá trị tức thì.
  • Trải nghiệm cuồng tín ™:Chúng tôi kết hợp một Quy trình trước. Công nghệ thứ hai. Tiếp cận với hỗ trợ kỹ thuật chuyên dụng để cung cấp các giải pháp toàn diện.
  • Danh mục đầu tư vô song :Chúng tôi áp dụng nhiều kinh nghiệm về đám mây để giúp bạn lựa chọn và triển khai công nghệ phù hợp trên đám mây phù hợp.
  • Phân phối nhanh :Chúng tôi đáp ứng bạn ở nơi bạn đang ở trong hành trình và thành công vượt bậc với bạn.

Trò chuyện ngay bây giờ để bắt đầu.