Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Applies to: ✅Microsoft Fabric✅Azure Data Explorer✅Azure Monitor✅Microsoft Sentinel
Begränsningsinstruktionen begränsar uppsättningen tabell-/vyentiteter som är synliga för frågeinstruktioner som följer den. I en databas som till exempel innehåller två tabeller (A, B) kan programmet hindra resten av frågan från att komma åt B och endast "se" en begränsad form av tabell A med hjälp av en vy.
Begränsningssatsens huvudscenario är för mellannivåprogram som accepterar frågor från användare och vill tillämpa en säkerhetsmekanism på radnivå för dessa frågor.
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 == "..."). När den sista instruktionen läggs till begränsar den endast användarens åtkomst till den logiska modellen.
Note
Begränsningssatsen kan användas för att begränsa åtkomsten till entiteter i en annan databas eller ett annat kluster (jokertecken stöds inte i klusternamn).
Syntax
restrict
access
to
(
EntitySpecifiers)
Learn more about syntax conventions.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| EntitySpecifiers | string |
✔️ | En eller flera kommaavgränsade entitetsspecificerare. Möjliga värden är: – En identifierare som definieras av en let-instruktion som en tabellvy - En tabell- eller funktionsreferens som liknar en som används av en unionsinstruk – Ett mönster som definieras av en mönsterdeklaration |
Note
- Alla tabeller, tabellvyer eller mönster som inte anges av begränsningssatsen blir "osynliga" för resten av frågan.
- Let, set och tabular-instruktioner är sammanspända/avgränsade med ett semikolon, annars betraktas de inte som en del av samma fråga.
Examples
Exemplen i det här avsnittet visar hur du använder syntaxen för att komma igång.
The examples in this article use publicly available tables in the help cluster, such as the
StormEventstable in the Samples database.
The examples in this article use publicly available tables, such as the
Weathertable in the Weather analytics sample gallery. Du kan behöva ändra tabellnamnet i exempelfrågan för att matcha tabellen på din arbetsyta.
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);
Tabeller eller funktioner
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'
Hindra användare från att köra frågor mot andra användardata
Exemplet visar hur ett mellannivåprogram kan förbereda en användares fråga med en logisk modell som hindrar användaren från att köra frågor mot andra användares data.
// 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