Restrict utasítás
A korlátozási utasítás korlátozza azokat a tábla-/nézet-entitásokat, amelyek láthatók az azt követő lekérdezési utasításokban. Például egy olyan adatbázisban, amely két táblát (A
, ) tartalmaz, B
az alkalmazás megakadályozhatja, hogy a lekérdezés többi része hozzáférjen B
, és csak egy nézettel "lát" egy korlátozott táblaformát A
.
A korlátozó utasítás fő forgatókönyve olyan középső szintű alkalmazások esetében van, amelyek fogadják a felhasználóktól érkező lekérdezéseket, és sorszintű biztonsági mechanizmust szeretnének alkalmazni ezekre a lekérdezésekre.
A középső szintű alkalmazás egy logikai modellel előtaggal adhatja elő a felhasználó lekérdezését. Ez a let utasításkészlet olyan nézeteket definiál, amelyek korlátozzák a felhasználó adatokhoz való hozzáférését, például ( T | where UserId == "..."
). Az utolsó utasítás hozzáadásakor a felhasználó csak a logikai modellhez való hozzáférését korlátozza.
Megjegyzés
A korlátozó utasítás egy másik adatbázisban vagy fürtben lévő entitásokhoz való hozzáférés korlátozására használható (a fürtnevek nem támogatják a helyettesítő karaktereket).
Syntax
restrict
access
to
(
EntitySpecifiers)
További információ a szintaxis konvenciókról.
Paraméterek
Név | Típus | Kötelező | Leírás |
---|---|---|---|
EntitySpecifiers | string |
✔️ | Egy vagy több vesszővel tagolt entitáskijelölő. Lehetséges értékek: – Egy let utasítás által táblázatos nézetként definiált azonosító – Tábla- vagy függvényhivatkozás, hasonló az egyesítő utasítás által használthoz – Mintadeklaráció által meghatározott minta |
Megjegyzés
- A korlátozási utasítás által nem megadott összes tábla, táblázatos nézet vagy minta "láthatatlanná" válik a lekérdezés többi része számára.
- A táblázatos utasítások összefűzhetők és pontosvesszővel elválaszthatók, ellenkező esetben nem lesznek ugyanannak a lekérdezésnek a részei.
Példák
Let utasítás
Az alábbi példa egy let utasítást használ, amely az utasítás előtt restrict
jelenik meg.
// Limit access to 'Test' let statement only
let Test = () { print x=1 };
restrict access to (Test);
Táblák vagy függvények
Az alábbi példa az adatbázis metaadataiban definiált táblákra vagy függvényekre mutató hivatkozásokat használ.
// 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);
Minták
Az alábbi példa helyettesítő karaktereket használ, amelyek egyeznek a let utasítások vagy táblák/függvények többszöröseivel.
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'
A felhasználó más felhasználói adatok lekérdezésének megakadályozása
Az alábbi példa bemutatja, hogy egy középső rétegbeli alkalmazás hogyan tudja elővenni egy felhasználó lekérdezését egy logikai modellel, amely megakadályozza, hogy a felhasználó lekérdezi a többi felhasználó adatait.
// 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
Ez a képesség nem támogatott az Azure Monitorban
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: