Muistiinpano
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Tässä artikkelissa kuvataan, miten kolmannen osapuolen moottorikehittäjät voivat integroitua OneLake-tietoturvaan ja hakea tietoja OneLakesta samalla kun noudatetaan rivitason tietoturvaa (RLS) ja saraketason turvallisuutta (CLS). Integraatio käyttää valtuutettua moottorimallia, jossa moottorisi lukee dataa suoraan OneLakesta ja valvoo turvallisuuspolitiikkoja omassa laskentakerroksessaan.
Muistio
Tämä ominaisuus on osa Preview-julkaisua ja on tarkoitettu vain arviointi- ja kehitystarkoituksiin. Muutos saattaa perustua palautteeseen, eikä sitä suositella tuotantokäyttöön.
Yleiskatsaus
OneLake-turvallisuus määrittelee hienojakoiset käyttöoikeuksien hallintakäytännöt—mukaan lukien taulukko-, rivi- ja sarakketason tietoturvan—kun se on OneLakessa. Microsoft Fabricin moottorit, kuten Spark ja SQL-analytiikkapäätelaite, valvovat näitä käytäntöjä kyselyn aikana. Kuitenkin OneLaken turvallisuus takaa tarkkojen käyttöoikeuksien valvontapolitiikan valvonnan riippumatta siitä, miten dataan päästään käsiksi. Tämän seurauksena luvattomat ulkoiset pyynnöt lukea tiedostoja OneLakesta estetään, jotta tiedot eivät vuoda.
Valtuutettu moottorimalli ratkaisee tämän ongelman. Rekisteröit omistetun identiteetin (palvelupäähenkilö tai hallittu identiteetti), jolla on täysi lukuoikeus dataan ja joka voi myös lukea tietoturvametatietoja. Moottorisi käyttää tätä identiteettiä:
- Lue OneLaken raakadatatiedostot.
- Hae käyttäjän tehokkaat tietoturvakäytännöt kutsumalla Get authorized access -toimintoa päärajapintaan .
- Sovella palautetut rivi- ja sarakkesuodattimet omaan kyselyn suorituskerrokseensa.
- Palauta loppukäyttäjälle vain sallittu tieto.
Tämä lähestymistapa antaa moottorillesi täyden hallinnan kyselysuunnitteluun ja välimuistiin, samalla kun tietoturvavalvonta pysyy yhdenmukaisena Fabric-moottoreiden tarjoaman kanssa ja valtuutuksen hallinta siirtyy käyttäjän käsiin.
Edellytykset
Ennen kuin aloitat integraation, varmista, että sinulla on seuraavat ominaisuudet:
- Microsoft Entra -palvelupäähenkilö tai hallittu identiteetti, jota moottorisi käyttää OneLakeen. Vain Microsoft Entra -identiteetit ovat tuettuja.
- Työtilan jäsen (tai korkeampi) rooli moottorin identiteetille kohdetyötilassa. Tämä antaa henkilöllisyydelle tarvittavat oikeudet lukea OneLaken datatiedostoja ja tietoturvametatietoja.
- Fabric-kohde (lakehouse, peilattu tietokanta tai peilattu luettelo), jossa OneLake-turvallisuus on käytössä.
- OneLake-turvallisuusroolit on määritetty kyseiselle kohteelle kaikilla RLS- tai CLS-politiikoilla, joita haluat valvoa.
- Moottorin identiteetillä täytyy olla rajoittamaton lukuoikeus lukemiinsa taulukoihin. Jos RLS- tai CLS-käytännöt koskevat moottorin identiteettiä, API-kutsut palauttavat virheitä.
Arkkitehtuuri
Seuraava kaavio esittää valtuutetun moottorin integroinnin korkean tason valtuutuskulun.
┌──────────────┐ ┌──────────────────┐ ┌───────────┐
│ End user │──1──▶│ 3rd-party engine │──2──▶│ OneLake │
│ (query) │ │(service principal)│◀──3──│ (data + │
│ │◀──6──│ │──4──▶│ security)│
└──────────────┘ └──────────────────┘ └───────────┘
- Loppukäyttäjä lähettää kyselyn kolmannen osapuolen moottorille.
- Moottorin identiteetti autentikoituu OneLakeen ja lukee raakadatatiedostot (Delta parquet) OneLake-rajapintojen avulla.
- OneLake palauttaa pyydetyt tiedot.
- Moottori kutsuu
principalAccessAPI:n, välittäen loppukäyttäjän Microsoft Entra -objekti-ID:n, saadakseen käyttäjän tehokkaan pääsyn. - Moottori soveltaa palautettuja pääsysuodattimia (taulukkokäyttö, RLS-predikaatit, CLS-sarakkeiden listat) omaan laskentakerrokseensa dataan.
- Moottori palauttaa loppukäyttäjälle vain suodatetut, sallitut tulokset.
Vaihe 1: Aseta moottorin identiteetti
Moottorisi tarvitsee Microsoft Entra -identiteetin, jonka OneLake tunnistaa ja johon luottaa. Tämä identiteetti lukee datatiedostoja ja tietoturvametatietoja moottorisi puolesta.
Luo tai tunnista palvelupäähenkilö tai hallittu identiteetti Microsoft Entra ID:ssä moottorillesi. Lisätietoja on artikkelissa Sovelluksen ja palvelun päänimen objektit Microsoft Entra -tunnuksella.
Lisää identiteetti työtilan jäsenrooliin. Fabric-portaalissa mene työtilan asetuksiin ja lisää palvelupäähenkilö jäsenrooliin . Tämä antaa henkilöllisyyden:
- Lue pääsy kaikkiin OneLaken tietotiedostoihin kyseisen työtilan kohteiden osalta.
- Pääsy lukemaan OneLake-tietoturvaroolien metatietoja valtuutettujen moottorirajapintojen kautta.
Lisätietoja työtilan rooleista löytyy kohdasta Roolit työtiloissa.
Varmista, että henkilöllisyydellä on rajoittamaton pääsy. Moottorin identiteetillä täytyy olla täysi lukuoikeus jokaiseen kyselyyn tauluun. Jos jokin OneLake-turvallisuusrooli asettaa RLS- tai CLS-rajoituksia moottorin identiteettiin, datan lukeminen ja API-kutsut epäonnistuvat. Paras käytäntö on olla lisäämättä moottorin identiteettiä mihinkään OneLake-tietoturvarooleihin, joissa on RLS- tai CLS-rajoitteita.
Tärkeää
Voit peruuttaa moottorin käyttöoikeuden milloin tahansa poistamalla sen työtilaroolista. Pääsyn peruuttaminen astuu voimaan noin kahden minuutin kuluessa.
Vaihe 2: Lue tiedot OneLakesta
Kun moottorin identiteetti on konfiguroitu, moottorisi voi lukea datatiedostoja suoraan OneLakesta käyttäen standardeja Azure Data Lake Storage (ADLS) Gen2 -yhteensopivia rajapintoja.
OneLaken tiedot ovat saatavilla osoitteessa:
https://onelake.dfs.fabric.microsoft.com/{workspaceId}/{itemId}/Tables/{schema}/{tableName}/
Moottorisi autentikoituu Microsoft Entra OAuth 2.0 -asiakastunnuksen kautta, joka on hankittu kantajatunnisteella. Käytä OneLake-resurssiskooppia https://storage.azure.com/.default , kun pyydät tokenia.
Esimerkki: Tunnista ja lue dataa (Python)
from azure.identity import ClientSecretCredential
from azure.storage.filedatalake import DataLakeServiceClient
tenant_id = "<your-tenant-id>"
client_id = "<your-service-principal-client-id>"
client_secret = "<your-service-principal-secret>"
credential = ClientSecretCredential(tenant_id, client_id, client_secret)
service_client = DataLakeServiceClient(
account_url="https://onelake.dfs.fabric.microsoft.com",
credential=credential
)
# Access a specific item in a workspace
file_system_client = service_client.get_file_system_client("<workspace-id>")
directory_client = file_system_client.get_directory_client("<item-id>/Tables/dbo/Customers")
# List and read Delta parquet files
for path in directory_client.get_paths():
if path.name.endswith(".parquet"):
file_client = file_system_client.get_file_client(path.name)
downloaded = file_client.download_file()
data = downloaded.readall()
# Process the parquet data with your engine
Lisätietoja OneLake-rajapinnoista löytyy kohdasta OneLake-pääsy API-rajapintojen kanssa.
Vaihe 3: Hae käyttäjän tehokas pääsy
Raakadatan lukemisen jälkeen moottorisi täytyy selvittää, mitä kyselyn tekijä saa nähdä. Kutsu Get authorised access -palvelua päärajapintaa varten, jotta saat käyttäjän tehokkaan pääsyn kyseiseen kohteeseen.
Ohjelmointirajapinnan päätepiste
GET https://onelake.dfs.fabric.microsoft.com/v1.0/workspaces/{workspaceId}/artifacts/{artifactId}/securityPolicy/principalAccess
Pyynnön sisältö
{
"aadObjectId": "<end-user-entra-object-id>",
"inputPath": "Tables",
"maxResults": 500 //optional, default is 500
}
| Parametri | Tyyppi | Pakollinen | Description |
|---|---|---|---|
| aadObjectId | merkkijono | Kyllä | Microsoft Entra -objekti-ID loppukäyttäjälle, jonka pääsyn haluat tarkistaa. |
| inputPath | merkkijono | Kyllä | Joko Tables tai Files. Palauttaa käyttäjän pääsyn kyseiseen kohteen osaan. Useimmissa kyselymoottoreissa inputPath on Tables. |
| continuationToken | merkkijono | Ei | Käytetään jatkavien tulosten hakemaan, kun tulosjoukko ylittää maxResults. |
| maxResults | kokonaisluku | Ei | Maksimimäärät per sivu. Oletusarvo on 500. |
Näytevaste (vain RLS)
{
"identityETag": "3fc4dc476ded773e4cf43936190bf20fa9480a077b25edc0b4bbe247112542f6",
"metadataETag": "\"eyJhciI6IlwiMHg4R...\"",
"value": [
{
"path": "Tables/dbo/Customers",
"access": ["Read"],
"rows": "SELECT * FROM [dbo].[Customers] WHERE [customerId] = '123'",
"effect": "Permit"
},
{
"path": "Tables/dbo/Employees",
"access": ["Read"],
"rows": "SELECT * FROM [dbo].[Employees] WHERE [address] = '123'",
"effect": "Permit"
},
{
"path": "Tables/dbo/EmployeeTerritories",
"access": ["Read"],
"effect": "Permit"
}
]
}
Näytevaste (RLS ja CLS)
Kun sarakkeen tason turvallisuus määritetään taulukossa, vastaus sisältää taulukon columns , joka listaa vain ne sarakkeet, joihin käyttäjä saa käyttää. Tässä taulukossa olemattomat sarakkeet ovat käyttäjältä piilotettuja.
{
"identityETag": "79372bc169b00882d9abec3d404032131e96bc406e15c6766514723021e153eb",
"metadataETag": "\"eyJhciI6IlwiMHg4R...\"",
"value": [
{
"path": "Tables/dbo/Customers",
"access": ["Read"],
"columns": [
{
"name": "address",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "city",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "contactTitle",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "country",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "fax",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "phone",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "postalCode",
"columnEffect": "Permit",
"columnAction": ["Read"]
},
{
"name": "region",
"columnEffect": "Permit",
"columnAction": ["Read"]
}
],
"rows": "SELECT * FROM [dbo].[Customers] WHERE [customerID] = 'ALFKI'",
"effect": "Permit"
},
{
"path": "Tables/dbo/Employees",
"access": ["Read"],
"rows": "SELECT * FROM [dbo].[Employees] WHERE [address] = '123'",
"effect": "Permit"
}
]
}
Vastauksen ymmärtäminen
Vastaus sisältää taulukon objekteja PrincipalAccessEntry , joista jokainen edustaa taulua, johon käyttäjällä on pääsy. Taulut, joita ei ole vastauksessa, eivät ole käyttäjän käytettävissä.
| kenttä | Tyyppi | Description |
|---|---|---|
path |
merkkijono | Polku taululle, johon käyttäjä pääsee käsiksi, esimerkiksi Tables/dbo/Customers. |
access |
string[] | Myönnettyjen pääsytyyppien joukko. Tällä hetkellä vain Read tuetaan. |
columns |
objekti[] | Käyttäjällä on pääsy sarakkeen objektien taulukkoon. Jokainen objekti sisältää name (sarakkeen nimi), columnEffect (Permit), ja columnAction (["Read"]). Jos tämä kenttä puuttuu, CLS:ää ei koske ja kaikki sarakkeet ovat sallittuja. Jos ne ovat läsnä, palautetaan vain luetellut sarakkeet. |
rows |
merkkijono | T-SQL-lause SELECT , joka edustaa rivitason tietoturvasuodatinta. Vain tätä predikaattia vastaavat rivit tulee palauttaa käyttäjälle. Jos tämä kenttä puuttuu, RLS:ää ei koske ja kaikki rivit ovat sallittuja. |
effect |
merkkijono | Efektityyppi. Tällä hetkellä aina Permit. |
Tärkeää
Kenttä rows sisältää T-SQL-lausekkeen, jonka moottorisi täytyy jäsentää ja soveltaa suodatinpredikaattina. Lauseke käyttää SELECT * FROM [schema].[table] WHERE ... muotoa. Moottorisi täytyy poimia ehto WHERE ja soveltaa sitä palautettaviin tietoihin.
ETags välimuistiin
Vastaus sisältää kaksi ETag-arvoa, jotka mahdollistavat tehokkaan välimuistin:
-
identityETag: Edustaa käyttäjän identiteetin ja ryhmäjäsenyyksien nykytilaa. Tallenna käyttäjän käyttöoikeustulos välimuistiin ja käytä sitä uudelleen, kunnes tämä ETag muuttuu. -
metadataETag: Edustaa tuotteen turvallisuuskonfiguraatioiden nykytilaa. Välimuisti roolien metatiedot ja käytä niitä uudelleen, kunnes tämä ETag muuttuu.
Käytä näitä ETag-tiedostoja pyyntöotsikon If-None-Match kanssa välttääksesi muuttumattoman datan uudelleenhakeen. Tämä parantaa suorituskykyä monen käyttäjän välimuistissa.
Esimerkki: Fetch effective access (Python)
import requests
# Get a token for the OneLake DFS endpoint
token = credential.get_token("https://storage.azure.com/.default").token
workspace_id = "<workspace-id>"
artifact_id = "<artifact-id>"
user_object_id = "<end-user-entra-object-id>"
url = (
f"https://onelake.dfs.fabric.microsoft.com/v1.0/"
f"workspaces/{workspace_id}/artifacts/{artifact_id}/"
f"securityPolicy/principalAccess"
)
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
body = {
"aadObjectId": user_object_id,
"inputPath": "Tables"
}
response = requests.get(url, headers=headers, json=body)
access_data = response.json()
# The response contains the user's effective access
for entry in access_data["value"]:
print(f"Table: {entry['path']}, Access: {entry['access']}")
if "columns" in entry:
col_names = [col["name"] for col in entry["columns"]]
print(f" CLS permitted columns: {col_names}")
if "rows" in entry:
print(f" RLS filter: {entry['rows']}")
Vaihe 4: Käytä turvasuodattimia
Kun käyttäjä on saanut tehokkaan pääsyn, moottorisi on sovellettava tietoturvapolitiikkoja dataan ennen tulosten palauttamista. Tämä vaihe on ratkaisevan tärkeä—moottorisi vastaa politiikkojen oikeasta valvonnasta.
Taulukkotason suodatus
Palauta principalAccess tiedot vain tauluista, jotka näkyvät vastauksessa. Jos taulukkoa ei ole listattu, käyttäjällä ei ole siihen pääsyä eikä tietoja tulisi palauttaa.
# Build a set of accessible tables for the user
accessible_tables = {entry["path"] for entry in access_data["value"]}
# Before returning query results, verify the table is accessible
def is_table_accessible(table_path: str) -> bool:
return table_path in accessible_tables
Rivitason turvallisuussuodatus
Kun rows kenttä on läsnä pääsymerkinnässä, moottorisi täytyy jäsentää T-SQL-predikaatti ja soveltaa sitä suodattimena taulukon dataan. Arvo rows on lause SELECT , jossa on WHERE lause, joka määrittelee, mitkä rivit käyttäjä voi nähdä.
Tärkeää
Jos moottorisi ei pysty jäsentämään SQL-lauseita, kyselyt tauluista, joilla on ei-nollaominaisuus rows , epäonnistuvat virheellä eivätkä palauta dataa. Tämä varmistaa, että käyttäjille annetaan pääsy vain siihen, mitä he saavat nähdä.
Esimerkiksi seuraava RLS-suodatin:
SELECT * FROM [dbo].[Customers] WHERE [customerId] = '123' UNION SELECT * FROM [dbo].[Customers] WHERE [customerID] = 'ALFKI'
Moottorisi pitäisi poimia predikaatit ja soveltaa niitä datan suodattamiseen:
import sqlparse
def extract_rls_predicates(rls_expression: str) -> list:
"""
Parse the RLS T-SQL expression and extract WHERE clause predicates.
The expression may contain UNION of multiple SELECT statements.
"""
predicates = []
statements = rls_expression.split(" UNION ")
for stmt in statements:
parsed = sqlparse.parse(stmt)[0]
where_seen = False
where_clause = []
for token in parsed.tokens:
if where_seen:
where_clause.append(str(token).strip())
if token.ttype is sqlparse.tokens.Keyword and token.value.upper() == "WHERE":
where_seen = True
if where_clause:
predicates.append(" ".join(where_clause))
return predicates
def apply_rls_filter(dataframe, access_entry: dict):
"""Apply RLS filtering to a dataframe based on the access entry."""
if "rows" not in access_entry:
return dataframe # No RLS, return all rows
predicates = extract_rls_predicates(access_entry["rows"])
# Combine predicates with OR (UNION semantic)
combined_filter = " OR ".join(f"({p})" for p in predicates)
return dataframe.filter(combined_filter)
Tärkeää
Kun rows kenttä puuttuu pääsymerkinnästä, RLS ei koske kyseistä taulukkoa ja kaikki rivit tulisi palauttaa. Kun kenttä on läsnä, moottorin täytyy suodattaa data. Suodattamattoman datan palauttaminen taululle RLS:llä on tietoturvaloukkaus.
Sarakketason turvallisuussuodatus
Kun CLS on konfiguroitu taulukossa, vastaus principalAccess sisältää taulukon columns , joka nimenomaisesti listaa käyttäjälle sallitut sarakkeet. Jokainen sarakeobjekti sisältää:
| Ominaisuus | Tyyppi | Description |
|---|---|---|
name |
merkkijono | Sarakkeen nimi (kirjainkoon herkkä). |
columnEffect |
merkkijono | Vaikutus koski sarakkeeseen. Tällä hetkellä aina Permit. |
columnAction |
string[] | Sarakkeella sallitut toiminnot. Tällä hetkellä vain Read tuetaan. |
Jos columns kenttä puuttuu pääsymerkinnästä, CLS:ää ei koske ja kaikki taulukon sarakkeet ovat sallittuja. Jos kenttä columnson läsnä, moottorisi palauttaa vain luetellut sarakkeet.
def get_permitted_columns(access_entry: dict) -> list | None:
"""
Return the list of permitted column names for a table.
Returns None if no CLS applies (all columns are permitted).
"""
if "columns" not in access_entry:
return None # No CLS, all columns are permitted
return [
col["name"]
for col in access_entry["columns"]
if col.get("columnEffect") == "Permit"
and "Read" in col.get("columnAction", [])
]
def apply_cls_filter(dataframe, access_entry: dict):
"""Apply CLS filtering to a dataframe based on the access entry."""
permitted_columns = get_permitted_columns(access_entry)
if permitted_columns is None:
return dataframe # No CLS, return all columns
# Only keep columns that are in the permitted list
return dataframe.select(permitted_columns)
Tärkeää
Kun columns kenttä puuttuu pääsymerkinnästä, CLS:ää ei koske ja kaikki sarakkeet tulee palauttaa. Kun kenttä on läsnä, moottorin tulee palauttaa vain luetellut sarakkeet. Piilotettujen sarakkeiden palauttaminen on turvallisuusrikkomus.
Käsittelytaulukot ilman pääsyä
Jos käyttäjä kysyy taulua, joka ei näy vastauksessa principalAccess , moottorisi joutuu evätä pääsyn. Älä palaa suodattamattomien tietojen palauttamiseen.
def query_table(table_path: str, user_access: dict):
"""Query a table with OneLake security enforcement."""
# Find the user's access entry for this table
entry = next(
(e for e in user_access["value"] if e["path"] == table_path),
None
)
if entry is None:
raise PermissionError(
f"Access denied: user doesn't have permission to access {table_path}"
)
# Read the data from OneLake
data = read_table_from_onelake(table_path)
# Apply column-level security
data = apply_cls_filter(data, entry)
# Apply row-level security
data = apply_rls_filter(data, entry)
return data
Vaihe 5: Hoida välimuisti ja muutosten tunnistus
Tuotantotason integraatioissa, erityisesti moottoreissa, joissa on monen käyttäjän datavälimuistit, sinun täytyy käsitellä muutoksia tietoturvapolitiikoihin ja käyttäjäryhmien jäsenyyksiin.
Välimuistin turvallisuusmetatiedot
Käytä vastauksen identityETagprincipalAccess ja-arvoja metadataETag määrittääksesi, milloin välimuistissa oleva tietoturvatieto on vanhentunutta:
-
identityETag: Muuttuu, kun käyttäjän ryhmäjäsenyydet tai identiteettiominaisuudet päivitetään. Välimuistita käyttäjän tehokas käyttöoikeus, joka on näppäimistöllä(userId, identityETag). -
metadataETag: Muuttuu, kun OneLake-turvallisuusroolit tai -käytännöt päivitetään. Välimuistiroolien määritelmät on asetettu .(artifactId, metadataETag)
Kyselyt muutoksen varalta
Tarkista API principalAccess :sta säännöllisesti muutoksia. API tulisi tarkistaa ennen kyselyn suoritusta, jotta varmistetaan, ettei mikään ole muuttunut, sen sijaan että tuloksia tarjottaisiin suoraan välimuistista. Käytä aiemmin vastaanotettua If-None-Match otsikkoa ETag kaistanleveyden minimoimiseksi:
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json",
"If-None-Match": f'"{cached_etag}"'
}
response = requests.get(url, headers=headers, json=body)
if response.status_code == 304:
# Security hasn't changed, use cached data
pass
elif response.status_code == 200:
# Security has changed, update cache
new_access_data = response.json()
update_cache(user_id, new_access_data)
Viivettä koskevia huomioita
- Muutokset OneLake-turvallisuusroolimäärittelyihin vievät noin 5 minuuttia levitettäväksi.
- Microsoft Entra ID:n käyttäjäryhmäjäsenyyden muutokset heijastuvat OneLakessa noin tunnissa .
- Joillakin Fabric-moottoreilla on oma välimuistikerros, joten se saattaa vaatia lisäaikaa.
Suunnittele äänestysväliaikasi ja välimuisti TTL sen mukaan. Suositeltu lähestymistapa on kysely viiden minuutin välein tietoturvametatietojen muutoksista ja päivittää käyttäjäkohtainen pääsy jokaisessa kyselyssä tai lyhyemmällä ajalla.
Vaihe 6: Käsittele sivuttamista
API principalAccess tukee sivuttamista alkioille, joissa on useita taulukoita. Kun vastaus sisältää enemmän merkintöjä kuin maxResults, vastaus sisältää .continuationToken
all_entries = []
continuation_token = None
while True:
body = {
"aadObjectId": user_object_id,
"inputPath": "Tables",
"maxResults": 500
}
if continuation_token:
body["continuationToken"] = continuation_token
response = requests.get(url, headers=headers, json=body)
data = response.json()
all_entries.extend(data["value"])
# Check for continuation token in response
continuation_token = data.get("continuationToken")
if not continuation_token:
break
Virheenkäsittely
Käsittele seuraavat virhetilanteet integraatiossasi:
| HTTP-tila | Virhekoodi | Description | Suositeltu toiminto |
|---|---|---|---|
| 200 | - | Success. | Käsittele vastaus. |
| 404 | ItemNotFound | Työtilaa tai esinettä ei ole olemassa, tai moottorin identiteetti ei pääse siihen käsiksi. | Varmista työtilan ID ja artefaktitunnus. Vahvista, että moottorin identiteetti sisältää työtilan jäsenen pääsyn. |
| 412 | PreconditionFailed | Annettu ETag If-Match ei vastaa nykyistä resurssi-ETagia. |
Hae resurssi uudelleen ilman If-Match otsikkoa saadaksesi uusimman ETagin. |
| 429 | - | Nopeusraja ylittyy. | Odota otsikossa määriteltyä Retry-After kestoa ennen kuin yrität uudelleen. |
Suojauksen parhaat käytännöt
Noudata näitä parhaita käytäntöjä varmistaaksesi turvallisen integraation:
- Suojaa moottorin identiteettitiedot. Palvelupäämiehellä on kohonnut pääsy dataan OneLakessa. Tallenna tunnistetiedot turvallisesti palveluilla, kuten Azure Key Vault.
- Älä paljasta raakadataa loppukäyttäjille. Käytä aina API:n palauttamia turvasuodattimia ennen kuin palautat
principalAccessmitään tietoa. Valvonnan ohittaminen on turvallisuusrikkomus. - Tarkista RLS-predikaatit huolellisesti. Jäsennä ja sovella T-SQL-lauseketta
WHEREtarkasti. Virheellinen jäsentäminen voi johtaa datavuotoon. Jos jäsennysvirheitä ilmenee tai epätarkka syntaksikartoitus, epäonnistu kysely RLS-jäsennysvirheellä sen sijaan, että näyttäisit käyttäjälle osittaisia tai turvattomia tuloksia. - Käsittele puuttuvat taulukot pääsyn evättynä. Jos API-vastauksessa ei ole taulukkoa, käyttäjällä ei ole siihen pääsyä. Älä koskaan palaa suodattamattomiin tietoihin, OneLake-tietoturva käyttää aina oletuksena kieltämistä.
- Auditointioikeudet. Kirjaa, mitkä käyttäjät käyttävät mitäkin taulua ja mitä turvallisuuspolitiikkoja sovellettiin vaatimustenmukaisuuden ja vianetsinnän varmistamiseksi.
- Kysely turvallisuusmuutoksista. Käytä ETagsia muutosten tunnistamiseen ja välimuistissa olevien käytäntöjen nopeaan päivittämiseen.
Rajoitukset
- API
principalAccesson esikatseluvaiheessa ja voi muuttua palautteen perusteella. - Nykyään tuetaan
Readvain pääsyn tyyppi jaPermitvaikutus. - Moottorin identiteetillä täytyy olla rajoittamaton juuritason pääsy. Jos RLS tai CLS koskee moottorin identiteettiä, API-kutsut epäonnistuvat.
- RLS-predikaatit käyttävät T-SQL-syntaksia. Moottorisi vastaa predikaattien oikeasta jäsentämisestä ja soveltamisesta.
- Turvallisuuspolitiikan muutosten leviäminen kestää noin 5 minuuttia. Käyttäjäryhmän jäsenvaihdot kestävät noin tunnin.