Deklarationssats för frågeparametrar

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 deklarationsinstrukment 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-inmatningsattacker .

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

declarequery_parameters(Namn1:Type1 [=DefaultValue1] [,...] );

Läs mer om syntaxkonventioner.

Parametrar

Namn Typ Obligatorisk Beskrivning
Namn1 string ✔️ Namnet på en frågeparameter som används i frågan.
Typ 1 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 typifierat värde.
DefaultValue1 string Ett standardvärde för parametern . Det här värdet måste vara en literal av lämplig skalärtyp.

Anteckning

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

Exempel

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

Resultat

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 värden av programmet som string 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 brödtexten i en fråga. Parsningen görs enligt den typ som anges av deklarationssatsen för frågeparametrar.

REST-API

Frågeparametrar tillhandahålls av klientprogram via properties platsen för begärandetextens JSON-objekt i en kapslad egenskapsuppsättning 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-klientbibliotek finns i Använda frågeparametrar för att skydda användarindata.

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ågeparametrarnas skiftnyckelikon (ALT + P).

Den här funktionen stöds inte i Azure Monitor