Příkaz restrict
Příkaz restrict omezuje sadu entit tabulky/zobrazení, které jsou viditelné pro příkazy dotazů, které za ním následují. Například v databázi, která obsahuje dvě tabulky (A
, B
), může aplikace zabránit přístupu B
zbytku dotazu a "zobrazit" pouze omezenou formu tabulky A
pomocí zobrazení.
Hlavní scénář příkazu restrict je pro aplikace střední vrstvy, které přijímají dotazy od uživatelů a chtějí u těchto dotazů použít mechanismus zabezpečení na úrovni řádků.
Aplikace střední vrstvy může k dotazu uživatele přidat předponu logický model, sadu příkazů let definujících zobrazení, která omezují přístup uživatele k datům, například ( T | where UserId == "..."
). Poslední přidávaný příkaz omezuje přístup uživatele pouze k logickému modelu.
Poznámka
Příkaz restrict se dá použít k omezení přístupu k entitám v jiné databázi nebo clusteru (zástupné é kódy se v názvech clusterů nepodporují).
Syntax
restrict
access
to
(
EntitySpecifiers)
Přečtěte si další informace o konvencích syntaxe.
Parametry
Název | Typ | Vyžadováno | Popis |
---|---|---|---|
EntitySpecifiers | string |
✔️ | Jeden nebo více specifikátorů entit oddělených čárkami. Možné hodnoty jsou: – Identifikátor definovaný příkazem let jako tabulkové zobrazení – Odkaz na tabulku nebo funkci, podobný odkazu používanému příkazem union – Vzor definovaný deklarací vzoru |
Poznámka
- Všechny tabulky, tabulková zobrazení nebo vzory, které nejsou určené příkazem restrict, se pro zbytek dotazu stanou "neviditelnými".
- Příkazy let, set a tabulkové příkazy jsou svázané nebo oddělené středníkem, jinak nebudou považovány za součást stejného dotazu.
Příklady
Příkaz let
Následující příklad používá příkaz let zobrazený před restrict
příkazem .
// Limit access to 'Test' let statement only
let Test = () { print x=1 };
restrict access to (Test);
Tabulky nebo funkce
Následující příklad používá odkazy na tabulky nebo funkce , které jsou definovány v metadatech databáze.
// 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);
Vzory
Následující příklad používá vzory zástupných znaků, které mohou odpovídat násobkům příkazů let nebo tabulek/funkcí.
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'
Zabránit uživateli v dotazování na jiná uživatelská data
Následující příklad ukazuje, jak aplikace střední vrstvy může před dotaz uživatele použít logický model, který uživateli brání v dotazování na data jiného uživatele.
// 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
Tato funkce není ve službě Azure Monitor podporována.
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro