Triển khai bảo mật cấp hàng
Bảo mật cấp hàng (RLS) hạn chế hàng dữ liệu mà người dùng cá nhân có thể xem khi họ truy vấn mô hình ngữ nghĩa. Bạn xác định RLS bằng cách tạo các vai trò có chứa biểu thức bộ lọc DAX. Khi người dùng được gán cho một vai trò, Power BI sẽ đánh giá biểu thức bộ lọc cho mỗi hàng và chỉ trả về các hàng mà biểu thức đánh giá là TRUE.
Nếu không có vai trò, bất kỳ người dùng nào có quyền truy vấn vào mô hình ngữ nghĩa sẽ thấy tất cả dữ liệu. RLS áp dụng cho tất cả các đường dẫn tiêu thụ: báo cáo Power BI, báo cáo được phân trang, trò chuyện Copilot và tác nhân dữ liệu Fabric. Điều này có nghĩa là cấu hình bảo mật của bạn bảo vệ dữ liệu một cách nhất quán bất kể người dùng truy cập dữ liệu đó bằng cách nào.
Hiểu cách RLS hoạt động với lược đồ sao
RLS hoạt động tốt nhất với các thiết kế lược đồ sao trong đó các bảng thứ nguyên liên quan đến các bảng dữ liệu thông qua các mối quan hệ mô hình. Bạn tạo biểu thức bộ lọc trên bảng thứ nguyên và Power BI truyền các bộ lọc đó đến bảng dữ liệu thông qua các mối quan hệ. Cách tiếp cận này hiệu quả hơn so với lọc trực tiếp các bảng dữ liệu vì bảng thứ nguyên thường chứa ít hàng hơn nhiều.
Ví dụ: hãy xem xét mô hình có bảng thứ nguyên Khu vực và bảng dữ liệu Bán hàng . Khi bạn áp dụng bộ lọc RLS cho bảng Region cho "Trung Tây", Power BI làm theo các bước sau:
- Lọc bảng Khu vực , dẫn đến một hàng hiển thị (đối với Trung Tây).
- Sử dụng mối quan hệ mô hình để truyền bộ lọc đến các bảng thứ nguyên có liên quan như State, dẫn đến chỉ các trạng thái thuộc khu vực Trung Tây.
- Truyền bộ lọc đến bảng dữ liệu Bán hàng thông qua các mối quan hệ của nó, dẫn đến chỉ có bản ghi bán hàng cho các tiểu bang Trung Tây.
Việc lan truyền bộ lọc này có nghĩa là bạn chỉ cần viết một bộ lọc trên một bảng thứ nguyên. Các mối quan hệ mô hình xử lý phần còn lại, tự động lọc tất cả các bảng liên quan.
Mẹo
Lọc bảng thứ nguyên, không phải bảng dữ liệu. Các mối quan hệ mô hình truyền các bộ lọc thứ nguyên sang bảng dữ liệu một cách hiệu quả, mang lại hiệu suất truy vấn nhanh hơn.
Tạo vai trò bảo mật
Bạn tạo vai trò trong Power BI Desktop từ tab Modeling bằng cách chọn Quản lý vai trò. Bạn cũng có thể tạo và quản lý vai trò trong trải nghiệm mô hình web Fabric. Mỗi vai trò có một tên duy nhất và một hoặc nhiều biểu thức bộ lọc DAX được áp dụng cho các bảng cụ thể.
Để tạo vai trò trong Power BI Desktop:
- Trên tab Mô hình hóa , chọn Quản lý vai trò.
- Chọn Mới để tạo vai trò.
- Đặt tên cho vai trò (ví dụ: "Bán hàng theo khu vực").
- Chọn bảng bạn muốn lọc.
- Nhập biểu thức bộ lọc DAX. Bạn có thể sử dụng giao diện thả xuống mặc định cho các bộ lọc đơn giản hoặc chuyển sang trình soạn thảo DAX cho các biểu thức sử dụng các hàm như
USERPRINCIPALNAME(). - Chọn Lưu.
Vai trò không có quy tắc cung cấp quyền truy cập vào tất cả các hàng trong tất cả các bảng. Cấu hình này hữu ích cho các vai trò quản trị viên cần quyền truy cập dữ liệu không hạn chế. Bạn cũng có thể tạo một vai trò với biểu thức FALSE() để chặn quyền truy cập vào tất cả các hàng trong một bảng cụ thể. Điều này hữu ích khi người dùng sẽ thấy dữ liệu tổng hợp nhưng không phải bản ghi cấp chi tiết.
Sử dụng bảo mật động với USERPRINCIPALNAME()
Bảo mật động là cách tiếp cận được đề xuất cho hầu hết các tình huống. Thay vì tạo vai trò riêng biệt cho từng người dùng hoặc nhóm, bạn tạo một vai trò duy nhất với biểu thức DAX đánh giá danh tính của người dùng đã đăng nhập.
Hàm trả USERPRINCIPALNAME() về địa chỉ email của người dùng đã xác thực ở user@domain.com định dạng. Bạn sử dụng hàm này để so khớp người dùng hiện tại với một cột trong mô hình dữ liệu của mình.
-- Filter the Salesperson table to the current user
[SalesPersonEmail] = USERPRINCIPALNAME()
Biểu thức này lọc bảng thứ nguyên Nhân viên bán hàng thành hàng khớp với người dùng đã đăng nhập. Vì bảng Nhân viên bán hàng liên quan đến bảng dữ liệu Bán hàng , nên chỉ dữ liệu bán hàng của người dùng đó mới hiển thị.
Bảo mật động thay đổi quy mô vì thêm hoặc xóa người dùng là thay đổi dữ liệu chứ không phải thay đổi mô hình. Bạn không cần phải tạo vai trò mới hoặc xuất bản lại mô hình ngữ nghĩa khi các thành viên trong nhóm thay đổi.
Hãy xem xét một tổ chức có 50 nhân viên bán hàng trên năm khu vực. Với RLS tĩnh, bạn sẽ cần năm vai trò riêng biệt, mỗi khu vực một vai trò. Với RLS động, bạn tạo một vai trò và một biểu thức bộ lọc. Dữ liệu xác định hàng mà mỗi người dùng nhìn thấy.
Triển khai mẫu bảng bảo mật
Đối với các tình huống ủy quyền phức tạp hơn, hãy tạo một bảng bảo mật chuyên dụng ánh xạ người dùng đến các phân vùng dữ liệu như khu vực, phòng ban hoặc trung tâm chi phí. Bảng bảo mật nối với bảng thứ nguyên trong mô hình của bạn và bộ lọc RLS tham chiếu đến bảng bảo mật.
-- Filter through a security table that maps users to regions
CONTAINS(
SecurityTable,
SecurityTable[UserEmail], USERPRINCIPALNAME(),
SecurityTable[Region], [Region]
)
Mẫu này ánh xạ mỗi người dùng đến một hoặc nhiều khu vực trong bảng bảo mật. Khi người dùng đăng nhập, Power BI đánh giá hàm CONTAINS dựa trên bảng bảo mật và chỉ trả về các hàng khớp với khu vực được chỉ định của họ.
Mẫu bảng bảo mật mang lại một số lợi thế:
- Quản lý tập trung. Tất cả ánh xạ người dùng với dữ liệu đều nằm trong một bảng.
- Nhiệm vụ đa giá trị. Một người dùng có thể ánh xạ đến nhiều khu vực hoặc phòng ban.
- Cập nhật theo hướng dữ liệu. Thay đổi quyền truy cập yêu cầu cập nhật dữ liệu bảng bảo mật, không phải định nghĩa mô hình.
Để triển khai mẫu này, hãy thêm bảng bảo mật vào mô hình của bạn và tạo mối quan hệ giữa bảng bảo mật và bảng thứ nguyên có liên quan. Sau đó, tạo một vai trò với biểu thức bộ lọc CONTAINS . Khi bạn làm mới dữ liệu, mọi thay đổi đối với bảng bảo mật sẽ có hiệu lực ngay lập tức mà không cần phát hành lại mô hình.
Hiểu các quy tắc RLS tĩnh
Quy tắc tĩnh sử dụng biểu thức DAX tham chiếu đến các giá trị hằng số thay vì danh tính người dùng. Ví dụ: bạn có thể tạo quy tắc giới hạn vai trò chỉ ở khu vực Trung Tây:
-- Static filter: only Midwest data is visible
[Region] = "Midwest"
Quy tắc tĩnh rất đơn giản để tạo và hiểu. Chúng hoạt động tốt khi bạn có một số lượng phân vùng dữ liệu nhỏ, cố định hiếm khi thay đổi. Tuy nhiên, chúng không mở rộng quy mô. Mỗi khu vực hoặc phân vùng dữ liệu mới yêu cầu một vai trò mới hoặc quy tắc cập nhật và bạn cần xuất bản lại mô hình ngữ nghĩa để các thay đổi có hiệu lực.
Lưu ý
Quy tắc động với USERPRINCIPALNAME() là cách tiếp cận được khuyến nghị cho hầu hết các mô hình sản xuất. Chỉ sử dụng các quy tắc tĩnh cho các tình huống nhỏ, cố định trong đó số lượng phân vùng không có khả năng tăng lên.
Tìm hiểu USERNAME() so với USERPRINCIPALNAME()
Cả hai hàm đều trả về danh tính của người dùng đã đăng nhập, nhưng chúng khác nhau về định dạng:
| Hàm | Power BI dành cho Máy để bàn | Dịch vụ Power BI |
|---|---|---|
USERNAME() |
DOMAIN\username |
user@domain.com |
USERPRINCIPALNAME() |
user@domain.com |
user@domain.com |
USERNAME() trả về các định dạng khác nhau tùy thuộc vào môi trường.
USERPRINCIPALNAME() luôn trả về định dạng tên chính của người dùng. Sử dụng USERPRINCIPALNAME() để đảm bảo tính nhất quán khi thử nghiệm trong Máy tính để bàn và triển khai cho dịch vụ.
Lưu ý
RLS tĩnh: Đối với các tình huống nhỏ, cố định, bạn có thể mã hóa cứng các bộ lọc như [Region] = "West". Quy tắc tĩnh rất đơn giản nhưng không mở rộng. Mỗi khu vực mới đều yêu cầu cập nhật vai trò hoặc quy tắc mới. Quy tắc động với USERPRINCIPALNAME() là cách tiếp cận được khuyến nghị cho hầu hết các mô hình sản xuất.
Xem xét DirectQuery với đăng nhập một lần
Khi nguồn dữ liệu DirectQuery của bạn hỗ trợ đăng nhập một lần (SSO), cơ sở dữ liệu nguồn có thể thực thi bảo mật cấp hàng của riêng nó. Power BI chuyển danh tính của người dùng đến nguồn dữ liệu và cơ sở dữ liệu đánh giá bảo mật dựa trên danh tính đó. Trong trường hợp này, bạn không cần phải xác định vai trò RLS trong mô hình ngữ nghĩa.
Lưu ý
Khi bạn sử dụng SSO với DirectQuery, nguồn dữ liệu sẽ kiểm soát việc thực thi bảo mật. Để biết chi tiết, hãy xem Bảo mật cấp hàng với Power BI.
Tối ưu hóa hiệu suất RLS
Biểu thức bộ lọc DAX phức tạp có thể ảnh hưởng đến tốc độ truy vấn. Thực hiện theo các phương pháp sau để giữ các truy vấn nhanh chóng:
- Lọc bảng thứ nguyên. Các mối quan hệ truyền bộ lọc đến bảng dữ liệu hiệu quả hơn so với lọc bảng dữ liệu trực tiếp.
- Tránh LOOKUPVALUE. Thay vào đó, hãy sử dụng mối quan hệ mô hình để lan truyền bộ lọc.
- Kiểm tra với dữ liệu thực tế. Một bộ lọc hoạt động tốt trên một tập dữ liệu nhỏ có thể chậm lại với dữ liệu quy mô sản xuất.
- Đo lường tác động của RLS. Sử dụng Performance Analyzer trong Power BI Desktop để so sánh thời lượng truy vấn có và không thực thi RLS.
Mẹo
Sử dụng Copilot để tạo biểu thức bộ lọc DAX cho vai trò RLS. Ví dụ: yêu cầu Copilot tạo bộ lọc bảng bảo mật bằng cách sử dụng USERPRINCIPALNAME() cho mô hình dữ liệu cụ thể của bạn.