Omogočanje lastnih stavkov SQL
Prepustno pot potrebujete, če želite podatkovni zbirki pošiljati nepreverjene stavke, na primer iz prepustnih poizvedb (pass-through) v Accessu, ki spreminjajo shemo, uporabljajo začasne tabele ali vsebujejo več stavkov.
Za spoje in združevanja več tabel, funkcije in množične spremembe povezanih tabel prepustne poti ni treba omogočiti: te stavke prehod preveri glede na pravila klicatelja in jih izvede, če alias dovoljuje preverjene stavke (privzeta nastavitev); glejte Preverjeni stavki.
Pregled rešitve
Prepustno pot omogočite na dveh mestih: pri viru podatkov (stikalo Durchreiche (prepustna pot)
oziroma AllowPassThrough) in pri klicatelju. Kaj sme stavek narediti, določajo dovoljenja prijave, pod
katero se izvaja:
| Klicatelj | Dodatno potrebuje |
|---|---|
ključ storitve; račun Windows pri viru podatkov s Personen (osebe) = Service | pravilo, ki vir sql navaja izrecno (* ne zadošča) |
prijava SQL Server; račun Windows ali osebni ključ z vpisano prijavo SQL Server pri viru podatkov s Personen = Impersonate; izbrana identiteta podatkovne zbirke vrste Login ali Own | pravilo za vir podatkov, ki ni samo za branje; stavek se izvaja s pravicami lastne oziroma skupne prijave. Seznami objektov v pravilu (Objects) ga ne omejujejo; meja so le pravice te prijave |
Utemeljitev: Edina izjema: prepustna pot.
Izvedba
S skrbniško shrambo (aplikacija za upravljanje):
- Odprite Datenquellen (viri podatkov), označite vir podatkov, v obrazcu vklopite Durchreiche in se vrnite na seznam.
- Za klicatelje iz prve vrstice zgoraj: odprite Regeln (pravila), označite pravilo klicatelja in izberite Merkmal hinzufügen … (dodaj lastnost); ustvarite lastnost
resourcez vrednostjosql; pravilo ne sme biti samo za branje. Glejte „Ustvarjanje pravila“ (dokumentacija aplikacije za upravljanje). - Preverite: klicatelj s tem pravilom pošlje
POST /api/v1/cf/<alias>/sql.jsonz{"sql": "SELECT SUSER_SNAME() AS anmeldung"}in prejme200z imenom prijave, pod katero se je stavek izvedel. Ta preizkus potrdi, da deluje nepreverjena pot: v preverjenem stavku prehod zavrne funkcije, ki opisujejo prijavo,SELECT 1pa bi prešel tudi kot preverjen stavek. Za klicatelje iz druge vrstice velja isti preizkus z njihovo lastno prijavo; odgovor takrat navede to prijavo. Klicatelj brez ustreznega pravila prejme403.
Brez skrbniške shrambe (konfiguracijska datoteka): vpišite oba vnosa in znova zaženite prehod:
{
"Gateway": {
"Databases": [
{ "Name": "fachdaten", "Provider": "sqlserver", "ConnectionString": "…",
"AllowPassThrough": true }
],
"Security": {
"Clients": [
{ "Id": "auswertung", "Databases": [ "fachdaten" ],
"Resources": [ "views", "sql" ], "Verbs": [ "GET", "POST" ], "ReadOnly": false }
]
}
}
}
Če pravilo navaja sql in je hkrati samo za branje, se prehod ne zažene.
Izklop. Izklopite stikalo Durchreiche vira podatkov (oziroma odstranite AllowPassThrough).
S tem prepustno pot zaprete za vse klicatelje, tudi za tiste iz druge vrstice tabele: pri skrbniški
shrambi z naslednjo zahtevo, pri konfiguracijski datoteki po ponovnem zagonu. Če želite pot odvzeti
le posameznim klicateljem, odstranite sql iz njihovega pravila. To deluje le za klicatelje iz prve
vrstice tabele; klicateljem iz druge vrstice jo odvzamete le s stikalom ali s pravilom samo za branje.
Napotki
- Vir podatkov izberite premišljeno. Vsak prepuščeni stavek lahko naredi vse, kar sme prijava iz niza povezave vira: bere, piše in spreminja shemo. Pri viru podatkov, katerega prijava je lastnik sheme ali ima obsežna dovoljenja, prepustne poti ne vklopite.
Če se stavek izvaja pod identiteto osebe, ga omejuje le SQL Server. Za klicatelje iz druge vrstice zgornje tabele zadošča pravilo, ki ni samo za branje; vira
sqlni treba navesti. Tak klicatelj lahko pošilja poljuben SQL in doseže vse, kar sme prijava osebe v SQL Serverju, ne več in ne manj. Pravila prehoda odločajo le še o tem, ali sme pošiljati stavke, ne pa katere. Če želite pisanje omogočiti izključno prek procedur, osebam (ali vlogi podatkovne zbirke, katere člani so) dodelite ta nabor dovoljenj:Dovoljenje Namen GRANT SELECTna poglede, ki se berejobranje prek pogledov, tudi filtrirano po vrsticah (glejte Omejitev po vrsticah) GRANT EXECUTEna procedure, ki pišejopisanje le prek preverjanj procedure brez INSERT,UPDATE,DELETEna tabelahsicer prepuščeni stavek piše mimo procedur pogledi, procedure in tabele z istim lastnikom takrat SQL Server dovoljenj za tabele ne preveri še enkrat (veriženje lastništva); pogled in procedura dosežeta tabelo brez lastnega dovoljenja osebe brez CONTROLaliALTERna shemi, brezIMPERSONATEkdor sme spreminjati shemo ali zamenjati identiteto, lahko obide vse zgornje omejitve Preverite tudi, kaj že sme vloga
publicpodatkovne zbirke: vsako dovoljenje te vloge velja za vsako osebo. Zamenjava identitete tudi ne izključi dovoljenj, dodeljenih prek skupin: dovoljenja skupin Windows veljajo tudi po zamenjavi identitete. Skupina zdb_datawritervsakemu članu omogoči pisanje v vse tabele.- Besedilo stavka je zapisano v revizijski sledi, vrednosti parametrov pa ne.
- Če prehod ponuja naslov za lastne stavke, ga upravičenim klicateljem navede v dokumentu metapodatkov; gonilnik ODBC ga tako najde sam.
Sorodne teme
- „Povezava vira podatkov“ (dokumentacija aplikacije za upravljanje)
- „Nastavitev prepustnih poizvedb“ (dokumentacija gonilnika ODBC za OData)