Instructie Beperken
Van toepassing op: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel-
Met de instructie beperken wordt de set tabel-/weergave-entiteiten beperkt die zichtbaar zijn voor query-instructies die hierop volgen. In een database die bijvoorbeeld twee tabellen (A
, B
) bevat, kan de toepassing voorkomen dat de rest van de query toegang heeft tot B
en alleen een beperkte vorm van tabel A
weergeven met behulp van een weergave.
Het belangrijkste scenario van de restrict-instructie is voor toepassingen in de middelste laag die query's van gebruikers accepteren en een beveiligingsmechanisme op rijniveau willen toepassen op die query's.
De toepassing met de middelste laag kan de query van de gebruiker vooraf laten gaan door een logisch model, een set let-instructies die weergaven definiëren waarmee de toegang van de gebruiker tot gegevens wordt beperkt, bijvoorbeeld (T | where UserId == "..."
). Als de laatste instructie wordt toegevoegd, beperkt het de toegang van de gebruiker tot het logische model.
Notitie
De instructie beperken kan worden gebruikt om de toegang tot entiteiten in een andere database of cluster te beperken (jokertekens worden niet ondersteund in clusternamen).
Syntaxis
restrict
access
to
(
EntitySpecifiers-)
Meer informatie over syntaxisconventies.
Parameters
Naam | Type | Vereist | Beschrijving |
---|---|---|---|
EntitySpecifiers- | string |
✔️ | Een of meer door komma's gescheiden entiteitsaanduidingen. De mogelijke waarden zijn: - Een id die is gedefinieerd door een let-instructie als een tabellaire weergave - Een tabel- of functieverwijzing, vergelijkbaar met een verwijzing die wordt gebruikt door een samenvoegingsinstructie - Een patroon dat is gedefinieerd door een patroondeclaratie |
Notitie
- Alle tabellen, tabelweergaven of patronen die niet zijn opgegeven door de restrictie, worden 'onzichtbaar' voor de rest van de query.
- Laten, instellen en tabellaire instructies worden samengevoegd/gescheiden door een puntkomma, anders worden ze niet beschouwd als onderdeel van dezelfde query.
Voorbeelden
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt in de Help-cluster, zoals de
StormEvents
tabel in de Voorbeelden database.
In de voorbeelden in dit artikel worden openbaar beschikbare tabellen gebruikt, zoals de tabel
StormEvents
in de weather analytics voorbeeldgegevens.
Let-instructie
In het voorbeeld wordt een let-instructie gebruikt die wordt weergegeven voordat restrict
instructie wordt weergegeven.
// Limit access to 'Test' let statement only
let Test = () { print x=1 };
restrict access to (Test);
Tabellen of functies
In het voorbeeld worden verwijzingen gebruikt naar tabellen of functies die zijn gedefinieerd in de metagegevens van de database.
// Assuming the database that the query uses has table Table1 and Func1 defined in the metadata,
// and other database 'DB2' has Table2 defined in the metadata
restrict access to (database().Table1, database().Func1, database('DB2').Table2);
Patronen
In het voorbeeld worden jokertekenpatronen gebruikt die overeenkomen met veelvouden van instructies of tabellen/functies.
let Test1 = () { print x=1 };
let Test2 = () { print y=1 };
restrict access to (*);
// Now access is restricted to Test1, Test2 and no tables/functions are accessible.
// Assuming the database that the query uses has table Table1 and Func1 defined in the metadata.
// Assuming that database 'DB2' has table Table2 and Func2 defined in the metadata
restrict access to (database().*);
// Now access is restricted to all tables/functions of the current database ('DB2' is not accessible).
// Assuming the database that the query uses has table Table1 and Func1 defined in the metadata.
// Assuming that database 'DB2' has table Table2 and Func2 defined in the metadata
restrict access to (database('DB2').*);
// Now access is restricted to all tables/functions of the database 'DB2'
Voorkomen dat een gebruiker query's uitvoert op andere gebruikersgegevens
In het voorbeeld ziet u hoe een toepassing in de middelste laag de query van een gebruiker kan voorbereiden met een logisch model, waardoor de gebruiker geen query's kan uitvoeren op gegevens van andere gebruikers.
// Assume the database has a single table, UserData,
// with a column called UserID and other columns that hold
// per-user private information.
//
// The middle-tier application generates the following statements.
// Note that "username@domain.com" is something the middle-tier application
// derives per-user as it authenticates the user.
let RestrictedData = view () { Data | where UserID == "username@domain.com" };
restrict access to (RestrictedData);
// The rest of the query is something that the user types.
// This part can only reference RestrictedData; attempting to reference Data
// will fail.
RestrictedData | summarize MonthlySalary=sum(Salary) by Year, Month
// Restricting access to Table1 in the current database (database() called without parameters)
restrict access to (database().Table1);
Table1 | count
// Restricting access to Table1 in the current database and Table2 in database 'DB2'
restrict access to (database().Table1, database('DB2').Table2);
union
(Table1),
(database('DB2').Table2))
| count
// Restricting access to Test statement only
let Test = () { range x from 1 to 10 step 1 };
restrict access to (Test);
Test
// Assume that there is a table called Table1, Table2 in the database
let View1 = view () { Table1 | project Column1 };
let View2 = view () { Table2 | project Column1, Column2 };
restrict access to (View1, View2);
// When those statements appear before the command - the next works
let View1 = view () { Table1 | project Column1 };
let View2 = view () { Table2 | project Column1, Column2 };
restrict access to (View1, View2);
View1 | count
// When those statements appear before the command - the next access is not allowed
let View1 = view () { Table1 | project Column1 };
let View2 = view () { Table2 | project Column1, Column2 };
restrict access to (View1, View2);
Table1 | count