Freigeben über


Restrict statement

Applies to: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Die Restrict-Anweisung beschränkt den Satz von Tabellen-/Ansichtsentitäten, die für Abfrageanweisungen sichtbar sind, die darauf folgen. Beispielsweise kann die Anwendung in einer Datenbank, die zwei Tabellen enthält (A, ), verhindern, Bdass der Rest der Abfrage auf sie zugreift B und nur eine eingeschränkte Form der Tabelle A mithilfe einer Ansicht "sehen".

Das Hauptszenario der Restrict-Anweisung ist für Anwendungen auf mittlerer Ebene, die Abfragen von Benutzern akzeptieren und einen Sicherheitsmechanismus auf Zeilenebene für diese Abfragen anwenden möchten. The middle-tier application can prefix the user's query with a logical model, a set of let statements to define views that restrict the user's access to data, for example ( T | where UserId == "..."). Wenn die letzte Anweisung hinzugefügt wird, schränkt sie den Zugriff des Benutzers nur auf das logische Modell ein.

Note

Die Restrict-Anweisung kann verwendet werden, um den Zugriff auf Entitäten in einer anderen Datenbank oder einem anderen Cluster einzuschränken (In Clusternamen werden keine Wildcards unterstützt).

Syntax

restrict access to ( EntitySpecifiers)

Learn more about syntax conventions.

Parameters

Name Type Required Description
EntitySpecifiers string ✔️ Mindestens eine durch Trennzeichen getrennte Entitätsbezeichner. Mögliche Werte sind:
- Ein Bezeichner, der von einer Let-Anweisung als tabellarische Ansicht definiert wird
- Ein Tabellen- oder Funktionsverweis, ähnlich einem, der von einer Union-Anweisung verwendet wird
- Ein Muster, das durch eine Musterdeklaration definiert ist

Note

  • Alle Tabellen, tabellarischen Ansichten oder Muster, die nicht durch die Restrict-Anweisung angegeben werden, werden für den Rest der Abfrage "unsichtbar".
  • Let, set, and tabular statements are strung together/separated by a semicolon, otherwise they aren't considered part of the same query.

Examples

Die Beispiele in diesem Abschnitt zeigen, wie Sie die Syntax verwenden, um Ihnen den Einstieg zu erleichtern.

The examples in this article use publicly available tables in the help cluster, such as the StormEvents table in the Samples database.

The examples in this article use publicly available tables, such as the Weather table in the Weather analytics sample gallery. Möglicherweise müssen Sie den Tabellennamen in der Beispielabfrage so ändern, dass er der Tabelle in Ihrem Arbeitsbereich entspricht.

Let statement

The example uses a let statement appearing before restrict statement.

// Limit access to 'Test' let statement only
let Test = () { print x=1 };
restrict access to (Test);

Tabellen oder Funktionen

The example uses references to tables or functions that are defined in the database metadata.

// 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);

Patterns

The example uses wildcard patterns that can match multiples of let statements or tables/functions.

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'

Benutzer am Abfragen anderer Benutzerdaten hindern

Das Beispiel zeigt, wie eine Anwendung auf mittlerer Ebene die Abfrage eines Benutzers mit einem logischen Modell vorangestellt werden kann, das verhindert, dass der Benutzer die Daten eines anderen Benutzers abfragt.

// 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