Ενσωμάτωση αναφοράς με RLS

ΙΣΕΙ ΓΙΑ: Τα δεδομένα ανήκουν στην εφαρμογή, τα δεδομένα ανήκουν στον χρήστη

Αυτό το άρθρο εξηγεί πώς μπορείτε να ενσωματώσετε περιεχόμενο Power BI που χρησιμοποιεί το RLS σε μια τυπική εφαρμογή power BI όπου τα δεδομένα ανήκουν σε μια εφαρμογή.

Προαπαιτούμενα στοιχεία

Για μια λεπτομερή επεξήγηση σχετικά με τον τρόπο ρύθμισης του RLS, ανατρέξτε στο θέμα Ασφάλεια σε επίπεδο γραμμών (RLS) με το Power BI.

Όταν ορίζετε τους ρόλους RLS, να θυμάστε ότι η παράσταση DAX που χρησιμοποιείτε προσδιορίζει εάν το μοντέλο RLS είναι στατικό ή δυναμικό.

Πότε να χρησιμοποιείτε στατική και δυναμική ασφάλεια

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

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

Η δυναμική ασφάλεια χρησιμοποιεί μια συνάρτηση DAX (username() ή userprincipalname()) για να ορίσει τους ρόλους. Η δυναμική ασφάλεια παρέχει μεγαλύτερη ευελιξία και σας επιτρέπει να διαχειρίζεστε τα δεδομένα σας χρησιμοποιώντας λιγότερους ρόλους και λιγότερη συντήρηση.

Στατική ασφάλεια

Με τους στατικούς ρόλους, μεταβιβάζετε τον ρόλο στο Power BI όταν δημιουργείτε ένα διακριτικό ενσωμάτωσης και ο χρήστης βλέπει δεδομένα σύμφωνα με αυτόν τον ρόλο. Για να δημιουργήσετε στατικούς ρόλους ασφαλείας, εισαγάγετε μια σταθερή τιμή στο φίλτρο DAX.

Για παράδειγμα, μπορείτε να ορίσετε τον ρόλο των Ανατολικών Η.Π.Α. ως [Region] = "East"

Στιγμιότυπο οθόνης που δείχνει πώς μπορείτε να ορίσετε έναν στατικό ρόλο R L S.

Ας υποθέσουμε ότι john@contoso.com είναι ένας χρήστης της εφαρμογής σας. Θέλετε να δώσετε στον Γιάννη πρόσβαση σε δεδομένα από τον ρόλο " Ανατολικές Η.Π.Α .". Για να ενσωματώσετε μια αναφορά για john@contoso.comτο , δημιουργήστε ένα διακριτικό ενσωμάτωσης χρησιμοποιώντας τον ρόλο Ανατολικών Η.Π.Α . Τα δεδομένα που προκύπτουν φιλτράρονται για [Region] = "East".

Σημείωμα

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

Δυναμική ασφάλεια

Η δυναμική ασφάλεια χρησιμοποιεί τη συνάρτηση DAX (username() ή userprincipalname()) για να ορίσει τον ρόλο.

Στο σενάριο τα δεδομένα ανήκουν στον χρήστη, το μοντέλο RLS φιλτράρει αυτόματα τα δεδομένα με βάση τους ρόλους του συγκεκριμένου χρήστη. Στην περίπτωση που τα δεδομένα ανήκουν στην εφαρμογή, το Power BI δεν γνωρίζει τα ονόματα χρηστών των πελατών του ISV, επομένως μπορείτε να χρησιμοποιήσετε τη username() συνάρτηση για να φιλτράρετε δυναμικά τα δεδομένα.

Δημιουργήστε έναν ρόλο στο Power BI Desktop χρησιμοποιώντας τη συνάρτηση username(). Για παράδειγμα, μπορείτε να δημιουργήσετε έναν ρόλο που ονομάζεται CountryDynamic και να τον ορίσετε ως [CountryRegionCode] = username()

Στιγμιότυπο οθόνης που δείχνει πώς μπορείτε να δημιουργήσετε έναν δυναμικό ρόλο R L S.

Ας υποθέσουμε ότι θέλετε να παραχωρήσετε στον χρήστη σας, jane@contoso.com, πρόσβαση σε δεδομένα για τη Γαλλία. Όταν δημιουργείτε ένα διακριτικό ενσωμάτωσης για jane@contoso.comτο , μεταβιβάζετε τη συμβολοσειρά Γαλλία ως όνομα χρήστη στον ρόλο CountryDynamic. Τα δεδομένα σας φιλτράρονται σύμφωνα με το [CountryRegionCode] = Γαλλία.

{
    "accessLevel": "View",
    "identities": [
        {
            "username": "France",
            "roles": [ "CountryDynamic"],
            "datasets": [ "fe0a1aeb-f6a4-4b27-a2d3-b5df3bb28bdc" ]
        }
    ]
}

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

Δημιουργία διακριτικού ενσωμάτωσης

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

  • όνομα χρήστη (απαιτείται) – Εάν οι ρόλοι είναι δυναμικοί, η συμβολοσειρά ονόματος χρήστη χρησιμοποιείται ως φίλτρο. Για στατικούς ρόλους, το όνομα χρήστη δεν επηρεάζει το RLS και μπορεί να είναι οποιαδήποτε συμβολοσειρά. Μπορεί να παρατίθεται μόνο ένα όνομα χρήστη.
  • ρόλοι (απαιτείται) – Οι ρόλοι που χρησιμοποιούνται κατά την εφαρμογή κανόνων ασφάλειας σε επίπεδο γραμμών. Εάν μεταβιβάζονται περισσότεροι από ένας ρόλοι, θα πρέπει να μεταβιβαστούν ως πίνακας συμβολοσειρών.
  • σύνολο δεδομένων (απαιτείται) – Το σύνολο δεδομένων που εφαρμόζεται για το στοιχείο που ενσωματώνετε.

Τώρα, μπορείτε να ενσωματώσετε την αναφορά στην εφαρμογή σας. Η αναφορά φιλτράρει τα δεδομένα σύμφωνα με το RLS που εφαρμόζεται.

public EmbedToken GetEmbedToken(Guid reportId, IList<Guid> datasetIds, [Optional] Guid targetWorkspaceId)
    {
        PowerBIClient pbiClient = this.GetPowerBIClient();

       // Defines the user identity and roles.
        var rlsIdentity = new EffectiveIdentity(
            username: "France",
            roles: new List<string>{ "CountryDynamic" },
            datasets: datasetIds.Select(id => id.ToString()).ToList());
        );
       
        // Create a request for getting an embed token for the rls identity defined above
        var tokenRequest = new GenerateTokenRequestV2(
            reports: new List<GenerateTokenRequestV2Report>() { new GenerateTokenRequestV2Report(reportId) },
            datasets: datasetIds.Select(datasetId => new GenerateTokenRequestV2Dataset(datasetId.ToString())).ToList(),
            targetWorkspaces: targetWorkspaceId != Guid.Empty ? new List<GenerateTokenRequestV2TargetWorkspace>() { new GenerateTokenRequestV2TargetWorkspace(targetWorkspaceId) } : null,
            identities: new List<EffectiveIdentity> { rlsIdentity }
        );

        // Generate an embed token
        var embedToken = pbiClient.EmbedToken.GenerateToken(tokenRequest);

        return embedToken;
    }

Ζητήματα προς εξέταση και περιορισμοί

  • Ανάλογα με τις ρυθμίσεις σας, ίσως χρειαστεί να κάνετε αρκετά βήματα για να μπορέσετε να δημιουργήσετε ένα διακριτικό ενσωμάτωσης. Για πληροφορίες σχετικά με τα διαφορετικά σενάρια, ανατρέξτε στο θέμα Ενσωμάτωση αναφοράς που χρησιμοποιεί δυνατότητες ασφαλείας.
  • Ο χρήστης που δημιουργεί το διακριτικό ενσωμάτωσης πρέπει να είναι μέλος ή διαχειριστής και στους δύο χώρους εργασίας (ο χώρος εργασίας συνόλου δεδομένων και ο χώρος εργασίας αναφοράς).
  • Κατά τη δημιουργία του διακριτικού ενσωμάτωσης, πρέπει να παρέχετε ένα όνομα χρήστη και έναν ρόλο. Εάν δεν το κάνετε, θα προκύψει ένα από τα ακόλουθα συμβάντα, ανάλογα με το εάν το διακριτικό δημιουργείται από την κύρια υπηρεσία ή τον κύριο χρήστη:
    • Για μια κύρια υπηρεσία, η δημιουργία διακριτικών αποτυγχάνει.
    • Για έναν κύριο χρήστη, η δημιουργία διακριτικών είναι επιτυχής, αλλά τα δεδομένα δεν φιλτράρονται (επιστρέφονται όλα τα δεδομένα).

Έχετε περισσότερες ερωτήσεις; Δοκιμάστε το Κοινότητα Power BI.