Dela via


Deklarationssats för frågeparametrar

Gäller för: ✅Microsoft FabricAzure Data ExplorerAzure MonitorMicrosoft Sentinel

Frågor som skickas till Kusto kan innehålla en uppsättning namn- eller värdepar. Paren kallas frågeparametrar, tillsammans med själva frågetexten. Frågan kan referera till ett eller flera värden genom att ange namn och typ i en deklarationsuttryck för frågeparametrar.

Frågeparametrar har två huvudsakliga användningsområden:

  • Som en skyddsmekanism mot inmatningsattacker.
  • Som ett sätt att parametrisera frågor.

I synnerhet bör klientprogram som kombinerar användarindata i frågor som de sedan skickar till Kusto använda mekanismen för att skydda mot Kusto-motsvarigheten till SQL-inmatning attacker.

Deklarera frågeparametrar

Om du vill referera till frågeparametrar måste frågetexten eller funktionerna den använder först deklarera vilken frågeparameter den använder. För varje parameter innehåller deklarationen namn och skalär typ. Parametern kan också ha ett standardvärde. Standardvärdet används om begäran inte ger något konkret värde för parametern. Kusto parsar sedan frågeparameterns värde enligt dess normala parsningsregler för den typen.

Syntax

declare query_parameters ( Name1:Type1 [=DefaultValue1] [,...] );

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Krävs Beskrivning
Namn1 string ✔️ Namnet på en frågeparameter som används i frågan.
Type1 string ✔️ Motsvarande typ, till exempel string eller datetime. Värdena som tillhandahålls av användaren kodas som strängar. Lämplig parsningsmetod tillämpas på frågeparametern för att få ett starkt skrivet värde.
DefaultValue1 string Ett standardvärde för parametern. Det här värdet måste vara en literal av lämplig skalartyp.

Not

  • Precis som användardefinierade funktionerkan frågeparametrar av typen dynamic inte ha standardvärden.
  • Let, set och tabular-instruktioner är sammanspända/avgränsade med ett semikolon, annars betraktas de inte som en del av samma fråga.

Exempel

I hjälpklusterfinns det en Samples databas med en StormEvents tabell.

declare query_parameters(maxInjured:long = 90);
StormEvents 
| where InjuriesDirect + InjuriesIndirect > maxInjured
| project EpisodeId, EventType, totalInjuries = InjuriesDirect + InjuriesIndirect

utdata

EpisodeId EventType totalInjuries
12459 Vinterväder 137
10477 Överdriven värme 200
10391 Värme 187
10217 Överdriven värme 422
10217 Överdriven värme 519

Ange frågeparametrar i ett klientprogram

Namn och värden för frågeparametrar anges som string värden av programmet som gör frågan. Inget namn får upprepas.

Tolkningen av värdena görs enligt deklarationssatsen för frågeparametrar. Varje värde parsas som om det vore en literal i en frågas brödtext. Parsningen görs enligt den typ som anges av deklarationssatsen för frågeparametrar.

REST API

Frågeparametrar tillhandahålls av klientprogram via properties plats för begärandetextens JSON-objekt i en kapslad egenskapsväska med namnet Parameters. Här är till exempel brödtexten i ett REST API-anrop till Kusto som beräknar ålder för en viss användare, förmodligen genom att programmet ber om användarens födelsedag.

{
    "ns": null,
    "db": "myDB",
    "csl": "declare query_parameters(birthday:datetime); print strcat(\"Your age is: \", tostring(now() - birthday))",
    "properties": "{\"Options\":{},\"Parameters\":{\"birthday\":\"datetime(1970-05-11)\",\"courses\":\"dynamic(['Java', 'C++'])\"}}"
}

Kusto SDK:er

Information om hur du anger namn och värden för frågeparametrar när du använder Kusto klientbibliotekfinns i Använda frågeparametrar för att skydda användarens indata.

Kusto.Explorer

Om du vill ange de frågeparametrar som skickas när du skickar en begäran till tjänsten använder du Frågeparametrar ikonen "skiftnyckel" (ALT + P).