Κοινή χρήση μέσω


Ασφάλεια σε επίπεδο γραμμών στην αποθήκη δεδομένων Fabric

Ισχύει για: Τελικό σημείο ανάλυσης SQL και Αποθήκη στο Microsoft Fabric

Η ασφάλεια σε επίπεδο γραμμών (RLS) σάς επιτρέπει να χρησιμοποιήσετε την ιδιότητα μέλους ομάδας ή το περιβάλλον εκτέλεσης για να ελέγξετε την πρόσβαση σε γραμμές σε έναν πίνακα βάσης δεδομένων. Για παράδειγμα, μπορείτε να εξασφαλίσετε ότι οι εργαζόμενοι έχουν πρόσβαση μόνο στις γραμμές δεδομένων που σχετίζονται με το τμήμα τους. Ένα άλλο παράδειγμα είναι ο περιορισμός της πρόσβασης των πελατών σε δεδομένα μόνο στα δεδομένα που σχετίζονται με την εταιρεία τους σε μια πολυετή αρχιτεκτονική. Η δυνατότητα είναι παρόμοια με την ασφάλεια σε επίπεδο γραμμών στον SQL Server.

Ασφάλεια σε επίπεδο γραμμών στο επίπεδο δεδομένων

Η ασφάλεια σε επίπεδο γραμμών απλοποιεί τη σχεδίαση και κωδικοποίηση της ασφάλειας στην εφαρμογή σας. Η ασφάλεια σε επίπεδο γραμμών σάς βοηθά να εφαρμόσετε περιορισμούς στην πρόσβαση σε γραμμές δεδομένων.

Η λογική περιορισμού πρόσβασης είναι στο επίπεδο βάσης δεδομένων και όχι σε κανένα επίπεδο μεμονωμένης εφαρμογής. Η βάση δεδομένων εφαρμόζει τους περιορισμούς πρόσβασης κάθε φορά που επιχειρείται πρόσβαση σε δεδομένα, από οποιαδήποτε εφαρμογή ή πλατφόρμα αναφοράς, συμπεριλαμβανομένου του Power BI. Αυτό καθιστά το σύστημα ασφαλείας σας πιο αξιόπιστο και ανθεκτικό, μειώνοντας την επιφάνεια του συστήματος ασφαλείας σας. Η ασφάλεια σε επίπεδο γραμμών ισχύει μόνο για ερωτήματα σε ένα τελικό σημείο ανάλυσης Αποθήκης ή SQL στο Fabric. Τα ερωτήματα Power BI σε μια αποθήκη σε λειτουργία Direct Lake θα επιστρέψουν στη λειτουργία Direct Query για να συμμορφώνονται με την ασφάλεια σε επίπεδο γραμμών.

Περιορισμός πρόσβασης σε ορισμένες γραμμές σε συγκεκριμένους χρήστες

Υλοποιήστε το RLS χρησιμοποιώντας την πρόταση CREATE SECURITY POLICY Transact-SQL και κατηγορήματα που δημιουργήθηκαν ως ενσωματωμένες συναρτήσεις με τιμή πίνακα.

Η ασφάλεια σε επίπεδο γραμμών εφαρμόζεται σε κοινόχρηστη αποθήκη ή λίμνη, επειδή η υποκείμενη προέλευση δεδομένων δεν έχει αλλάξει.

Ασφάλεια σε επίπεδο γραμμών που βασίζεται σε κατηγόρημα

Η ασφάλεια σε επίπεδο γραμμών στην Αποθήκη δεδομένων Synapse Fabric υποστηρίζει ασφάλεια που βασίζεται σε κατηγόρημα. Τα κατηγορήματα φιλτραρίσματος φιλτράρουν σιωπηρά τις γραμμές που είναι διαθέσιμες για λειτουργίες ανάγνωσης.

Η πρόσβαση σε δεδομένα σε επίπεδο γραμμών σε έναν πίνακα περιορίζεται από ένα κατηγόρημα ασφαλείας που ορίζεται ως ενσωματωμένη συνάρτηση πίνακα-τιμής. Στη συνέχεια, η συνάρτηση καλείται και επιβάλλεται από μια πολιτική ασφαλείας. Για τα κατηγορήματα φίλτρου, η εφαρμογή δεν γνωρίζει γραμμές που φιλτράρονται από το σύνολο αποτελεσμάτων. Εάν φιλτράρονται όλες οι γραμμές, θα επιστραφεί ένα σύνολο null.

Τα κατηγορήματα φίλτρου εφαρμόζονται κατά την ανάγνωση δεδομένων από τον βασικό πίνακα. Επηρεάζουν όλες τις λειτουργίες λήψης: SELECT, DELETEκαι UPDATE. Οι χρήστες δεν μπορούν να επιλέξουν ή να διαγράψουν γραμμές που φιλτράρονται. Ο χρήστης δεν μπορεί να ενημερώσει τις γραμμές που φιλτράρονται. Ωστόσο, είναι δυνατή η ενημέρωση των γραμμών με τέτοιο τρόπο ώστε να φιλτράρονται στη συνέχεια.

Το κατηγόρημα φίλτρου και οι πολιτικές ασφαλείας έχουν την ακόλουθη συμπεριφορά:

  • Μπορείτε να ορίσετε μια συνάρτηση κατηγόρου που ενώνεται με έναν άλλο πίνακα ή/και καλεί μια συνάρτηση. Εάν η πολιτική ασφαλείας έχει δημιουργηθεί με SCHEMABINDING = ON το (προεπιλογή), τότε η σύνδεση ή η συνάρτηση είναι προσβάσιμη από το ερώτημα και λειτουργεί όπως αναμένεται χωρίς πρόσθετους ελέγχους δικαιωμάτων.

  • Μπορείτε να υποβάλετε ένα ερώτημα σε σχέση με έναν πίνακα που έχει καθορισμένο κατηγόρημα ασφαλείας, αλλά είναι απενεργοποιημένο. Τυχόν γραμμές που φιλτράρονται ή αποκλείονται δεν επηρεάζονται.

  • Εάν ένας χρήστης dbo, ένα μέλος του db_owner ρόλου ή ο κάτοχος του πίνακα υποβάλει ερώτημα σε έναν πίνακα στον οποίο έχει οριστεί και ενεργοποιηθεί μια πολιτική ασφαλείας, οι γραμμές φιλτράρονται ή αποκλείονται, όπως ορίζεται από την πολιτική ασφαλείας.

  • Οι προσπάθειες τροποποίησης του σχήματος ενός πίνακα που συνδέεται με μια πολιτική ασφαλείας συνδεδεμένη με σχήμα θα έχουν ως αποτέλεσμα σφάλμα. Ωστόσο, οι στήλες στις οποίες δεν αναφέρεται το κατηγόρημα μπορούν να τροποποιηθούν.

  • Οι προσπάθειες προσθήκης κατηγορήματος σε έναν πίνακα που έχει ήδη ένα καθορισμένο για την καθορισμένη λειτουργία έχουν ως αποτέλεσμα σφάλμα. Αυτό θα συμβεί είτε το κατηγόρημα είναι ενεργοποιημένο είτε όχι.

  • Οι προσπάθειες τροποποίησης μιας συνάρτησης, η οποία χρησιμοποιείται ως κατηγόρημα σε έναν πίνακα μέσα σε μια πολιτική ασφαλείας συνδεδεμένη με σχήμα, θα έχουν ως αποτέλεσμα ένα σφάλμα.

  • Ο ορισμός πολλών ενεργών πολιτικών ασφαλείας που περιέχουν κατηγορήματα που δεν αλληλεπικαλύπτονται, είναι επιτυχής.

Τα κατηγορήματα φίλτρου έχουν την ακόλουθη συμπεριφορά:

  • Καθορίστε μια πολιτική ασφαλείας που φιλτράρει τις γραμμές ενός πίνακα. Η εφαρμογή δεν γνωρίζει τις γραμμές που φιλτράρονται για SELECTτις λειτουργίες , UPDATEκαι DELETE . Συμπεριλαμβανομένων των καταστάσεων όπου όλες οι γραμμές φιλτράρονται. Η εφαρμογή μπορεί να INSERT γραμμές, ακόμα και αν θα φιλτραριστούν κατά τη διάρκεια οποιασδήποτε άλλης λειτουργίας.

Δικαιώματα

Η δημιουργία, τροποποίηση ή απόθεση πολιτικών ασφαλείας απαιτεί το ALTER ANY SECURITY POLICY δικαίωμα. Η δημιουργία ή η απόθεση μιας πολιτικής ασφαλείας απαιτεί ALTER δικαιώματα στο σχήμα.

Επιπλέον, απαιτούνται τα ακόλουθα δικαιώματα για κάθε κατηγόρημα που προστίθεται:

  • SELECT και REFERENCES δικαιώματα για τη συνάρτηση που χρησιμοποιείται ως κατηγόρημα.

  • REFERENCES δικαίωμα στον πίνακα προορισμού που συνδέεται στην πολιτική.

  • REFERENCES δικαίωμα σε κάθε στήλη από τον πίνακα προορισμού που χρησιμοποιείται ως ορίσματα.

Οι πολιτικές ασφαλείας ισχύουν για όλους τους χρήστες, συμπεριλαμβανομένων των χρηστών dbo στη βάση δεδομένων. Οι χρήστες Dbo μπορούν να τροποποιήσουν ή να αποσύρουν πολιτικές ασφαλείας, ωστόσο, οι αλλαγές τους στις πολιτικές ασφαλείας μπορούν να ελεγχθούν. Εάν μέλη των ρόλων, όπως Διαχείριση istrator, Member ή Contributor πρέπει να δουν όλες τις γραμμές για την αντιμετώπιση προβλημάτων ή την επικύρωση δεδομένων, η πολιτική ασφαλείας πρέπει να συνταχθεί για να επιτραπεί αυτό.

Εάν δημιουργείται μια πολιτική ασφαλείας με SCHEMABINDING = OFFτο , τότε για να υποβάλλουν ερώτημα στον πίνακα προορισμού, οι χρήστες πρέπει να έχουν το SELECT δικαίωμα ή EXECUTE στη συνάρτηση κατηγόρημα καθώς και οποιουσδήποτε πρόσθετους πίνακες, προβολές ή συναρτήσεις που χρησιμοποιούνται εντός της συνάρτησης κατηγόρημα. Εάν δημιουργηθεί μια πολιτική ασφαλείας με SCHEMABINDING = ON την (προεπιλογή), αυτοί οι έλεγχοι δικαιωμάτων παρακάμπτουν όταν οι χρήστες υποβάλλουν ερώτημα στον πίνακα προορισμού.

Ζητήματα ασφαλείας: επιθέσεις παράθεσης καναλιών

Εξετάστε και προετοιμαστείτε για τα ακόλουθα δύο σενάρια.

Κακόβουλη διαχείριση πολιτικής ασφαλείας

Είναι σημαντικό να παρατηρήσετε ότι ένας κακόβουλος διαχειριστής πολιτικής ασφαλείας, με επαρκή δικαιώματα για να δημιουργήσει μια πολιτική ασφαλείας πάνω από μια ευαίσθητη στήλη και έχοντας δικαίωμα δημιουργίας ή τροποποίησης ενσωματωμένων συναρτήσεων με τιμές πίνακα, μπορεί να συμπληρώνεται με έναν άλλο χρήστη που έχει επιλέξει δικαιώματα σε έναν πίνακα για την εκτέλεση εκπλήρωσης δεδομένων, δημιουργώντας κακόβουλα ενσωματωμένες συναρτήσεις με τιμές πίνακα που έχουν σχεδιαστεί για να χρησιμοποιούν επιθέσεις παράπλευρου καναλιού για τη συγκέντρωση δεδομένων. Τέτοιες επιθέσεις θα απαιτούσαν συμπαιγνία (ή υπερβολικά δικαιώματα που παραχωρούνται σε έναν κακόβουλο χρήστη) και πιθανότατα θα απαιτούσαν αρκετές επαναλήψεις σχετικά με την τροποποίηση της πολιτικής (απαιτώντας άδεια για την κατάργηση του κατηγόρου για να σπάσει η σύνδεση σχήματος), την τροποποίηση των ενσωματωμένων συναρτήσεων σε τιμή πίνακα και την επανειλημμένη εκτέλεση δηλώσεων επιλογής στον πίνακα προορισμού. Συνιστούμε να περιορίσετε τα δικαιώματα ανάλογα με τις ανάγκες και να παρακολουθείτε για οποιαδήποτε ύποπτη δραστηριότητα. Θα πρέπει να παρακολουθείται δραστηριότητα όπως η συνεχής αλλαγή πολιτικών και ενσωματωμένων συναρτήσεων με τιμή πίνακα που σχετίζονται με την ασφάλεια σε επίπεδο γραμμών.

Προσεκτικά δημιουργημένα ερωτήματα

Είναι δυνατή η πρόκληση διαρροής πληροφοριών χρησιμοποιώντας προσεκτικά κατασκευασμένα ερωτήματα που χρησιμοποιούν σφάλματα για την αποπλήρωση δεδομένων. Για παράδειγμα, SELECT 1/(SALARY-100000) FROM PAYROLL WHERE NAME='John Doe'; θα ενημερώσει έναν κακόβουλο χρήστη ότι ο μισθός του John Doe είναι ακριβώς $100,000. Παρόλο που υπάρχει ένα κατηγόρημα ασφαλείας για την αποτροπή ενός κακόβουλου χρήστη να ζητήσει απευθείας το μισθό άλλων ατόμων, ο χρήστης μπορεί να καθορίσει πότε το ερώτημα επιστρέφει μια εξαίρεση διαίρεσης με το μηδέν.

Παραδείγματα

Μπορούμε να επιδείξουμε την ασφάλεια σε επίπεδο γραμμών αποθήκης και το τελικό σημείο ανάλυσης SQL στο Microsoft Fabric.

Το παρακάτω παράδειγμα δημιουργεί δείγματα πινάκων που θα λειτουργούν με την Warehouse in Fabric, αλλά στο τελικό σημείο ανάλυσης SQL χρησιμοποιούν υπάρχοντες πίνακες. Στο τελικό σημείο ανάλυσης SQL, δεν CREATE TABLEμπορείτε , αλλά μπορείτε να CREATE SCHEMAκάνετε , CREATE FUNCTIONκαι CREATE SECURITY POLICY.

Σε αυτό το παράδειγμα, δημιουργήστε πρώτα ένα σχήμα sales, έναν πίνακα sales.Orders.

CREATE SCHEMA sales;
GO

-- Create a table to store sales data
CREATE TABLE sales.Orders (
    SaleID INT,
    SalesRep VARCHAR(100),
    ProductName VARCHAR(50),
    SaleAmount DECIMAL(10, 2),
    SaleDate DATE
);

-- Insert sample data
INSERT INTO sales.Orders (SaleID, SalesRep, ProductName, SaleAmount, SaleDate)
VALUES
    (1, 'Sales1@contoso.com', 'Smartphone', 500.00, '2023-08-01'),
    (2, 'Sales2@contoso.com', 'Laptop', 1000.00, '2023-08-02'),
    (3, 'Sales1@contoso.com', 'Headphones', 120.00, '2023-08-03'),
    (4, 'Sales2@contoso.com', 'Tablet', 800.00, '2023-08-04'),
    (5, 'Sales1@contoso.com', 'Smartwatch', 300.00, '2023-08-05'),
    (6, 'Sales2@contoso.com', 'Gaming Console', 400.00, '2023-08-06'),
    (7, 'Sales1@contoso.com', 'TV', 700.00, '2023-08-07'),
    (8, 'Sales2@contoso.com', 'Wireless Earbuds', 150.00, '2023-08-08'),
    (9, 'Sales1@contoso.com', 'Fitness Tracker', 80.00, '2023-08-09'),
    (10, 'Sales2@contoso.com', 'Camera', 600.00, '2023-08-10');

Δημιουργήστε ένα Security σχήμα, μια συνάρτηση Security.tvf_securitypredicateκαι μια πολιτική SalesFilterασφαλείας .

-- Creating schema for Security
CREATE SCHEMA Security;
GO
 
-- Creating a function for the SalesRep evaluation
CREATE FUNCTION Security.tvf_securitypredicate(@SalesRep AS nvarchar(50))
    RETURNS TABLE
WITH SCHEMABINDING
AS
    RETURN SELECT 1 AS tvf_securitypredicate_result
WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'manager@contoso.com';
GO
 
-- Using the function to create a Security Policy
CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE Security.tvf_securitypredicate(SalesRep)
ON sales.Orders
WITH (STATE = ON);
GO

Επόμενο βήμα