A kiszolgáló nélküli SQL-készlet tárfiók-hozzáférésének szabályozása a Azure Synapse Analytics

Tip

Microsoft Fabric Data Warehouse egy nagyvállalati szintű relációs raktár egy Data Lake-alaprendszeren, jövőre kész architektúrával, beépített AI-vel és új funkciókkal. Ha még nem ismerkedik adattárházzal, kezdje a Fabric Data Warehouse. A meglévő dedikált SQL-készlet számítási feladatai frissíthetők Fabric az adatelemzés, a valós idejű elemzés és a jelentéskészítés új képességeinek eléréséhez.

A kiszolgáló nélküli SQL-készlet lekérdezése közvetlenül az Azure Storage-ből olvas be fájlokat. A fájlok Azure tárterületen való elérésére vonatkozó engedélyek két szinten vannak szabályozva:

  • Tárolási szint – A felhasználónak engedéllyel kell rendelkeznie a mögöttes tárolófájlok eléréséhez. A tárolási rendszergazdának engedélyeznie kell a Microsoft Entra azonosítónak a fájlok olvasását/írását, vagy létre kell hoznia egy megosztott hozzáférésű aláírás (SAS) kulcsot, amelyet a tárolási hozzáféréshez használnak.
  • SQL szolgáltatásszint – A felhasználónak engedélyt kellett adnia az adatok külső tábla használatával történő olvasására vagy a OPENROWSET függvény végrehajtására. További információ a szükséges engedélyekről ebben a szakaszban.

Ez a cikk a használható hitelesítő adatok típusait és a hitelesítő adatok keresésének módját ismerteti az SQL- és Microsoft Entra-felhasználók számára.

Tárolási engedélyek

A Synapse Analytics-munkaterület kiszolgáló nélküli SQL-készletei beolvashatják Azure Data Lake tárolóban tárolt fájlok tartalmát. A tárolási engedélyeket úgy kell konfigurálnia, hogy egy SQL-lekérdezést végrehajtó felhasználó elolvashassa a fájlokat. A fájlokhoz való hozzáférés engedélyezésének három módja van:

  • Role based access control (RBAC) lehetővé teszi, hogy szerepkört rendeljen Microsoft Entra felhasználóhoz abban a bérlőben, ahol a tároló található. Az olvasónak tagja kell lennie a Tárblobadat-olvasó, a Storage Blob-adatszolgáltató vagy a Tárblobadat-tulajdonos szerepkörnek a tárfiókban. A Azure tárolóban adatokat író felhasználónak a Storage Blob-adatok közreműködője vagy a Storage Blob-adattulajdonos szerepkör tagjának kell lennie. A Tártulajdonos szerepkör nem jelenti azt, hogy a felhasználó egyben Storage-adattulajdonos is.
  • Access Control listák (ACL) lehetővé teszik, hogy részletes Read(R), Write(W) és Execute(X) engedélyeket határozzon meg a Azure tár fájljain és könyvtáraiban. Az ACL hozzárendelhető Microsoft Entra felhasználókhoz. Ha az olvasók egy Azure Storage elérési útján szeretnének olvasni egy fájlt, akkor az Execute(X) ACL-nek a fájl elérési útjának minden mappáján, a Read(R) ACL-nek pedig a fájlon kell lennie. További információ az ACL-engedélyek tárolási rétegben való beállításáról.
  • Shared access signature (SAS) lehetővé teszi az olvasó számára, hogy az időkorlátos jogkivonat használatával hozzáférjen a Azure Data Lake tárban lévő fájlokhoz. Az olvasót még csak nem is kell hitelesíteni Microsoft Entra felhasználóként. Az SAS-jogkivonat tartalmazza az olvasónak adott engedélyeket, valamint a jogkivonat érvényességének időtartamát. Az SAS-jogkivonat jó választás az időkorlátos hozzáféréshez olyan felhasználók számára, amelyeknek nem is kell ugyanabban a Microsoft Entra bérlőben lenniük. Az SAS-jogkivonat definiálható a tárfiókban vagy adott könyvtárakban. További információt talál az Azure Storage erőforrások korlátozott hozzáféréséről megosztott hozzáférési aláírások használatával.

Másik lehetőségként a névtelen hozzáférés engedélyezésével nyilvánosan elérhetővé teheti fájljait. Ez a megközelítés NEM használható, ha nem nyilvános adatokkal rendelkezik.

Támogatott tárterület-engedélyezési típusok

A kiszolgáló nélküli SQL-készletbe bejelentkezett felhasználóknak engedélyezni kell a fájlok elérését és lekérdezését Azure Storage, ha a fájlok nem érhetők el nyilvánosan. A nem nyilvános tárterület eléréséhez négy hitelesítési típust használhat: felhasználói identitást, közös hozzáférésű jogosultságkódot, szolgáltatásnevet és felügyelt identitást.

Megjegyzés

Microsoft Entra átengedés az alapértelmezett viselkedés, amikor létrehoz egy munkaterületet.

Felhasználóidentitás, más néven "Microsoft Entra továbbítás", olyan engedélyezési típus, amelyben a kiszolgáló nélküli SQL-készletbe bejelentkezett Microsoft Entra felhasználó identitását használják az adathozzáférés engedélyezésére. Az adatok elérése előtt a Azure Storage rendszergazdának engedélyeket kell adnia a Microsoft Entra felhasználónak. Ahogy az adatbázis-felhasználók táblájának támogatott engedélyezési típusai is jelzik, az SQL-felhasználó típusa nem támogatott.

Fontos

Előfordulhat, hogy a kliens alkalmazások gyorsítótárban tárolhatnak egy Microsoft Entra hitelesítési jogkivonatot. A Power BI például gyorsítótárba helyezi a Microsoft Entra-jogkivonatokat, és egy órán keresztül újra felhasználja ugyanazt a jogkivonatot. A hosszú ideig futó lekérdezések meghiúsulhatnak, ha a jogkivonat a lekérdezés végrehajtásának közepén lejár. Ha a lekérdezés közepén lejáró Microsoft Entra hozzáférési jogkivonat által okozott lekérdezési hibákat tapasztal, érdemes lehet átváltani egy szolgáltatási részazonosítóra, kezelési identitásra vagy megosztott hozzáférési aláírásra.

Ahhoz, hogy az adatokhoz hozzáférjen, a Storage Blob Data Owner, a Storage Blob Data Contributor vagy a Storage Blob Data Reader szerepkör tagjának kell lennie. Másik lehetőségként részletes ACL-szabályokat is megadhat a fájlok és mappák eléréséhez. Még ha Ön is egy tárfiók tulajdonosa, akkor is hozzá kell adnia magát a Storage Blob-adatok egyik szerepköréhez. Az Azure Data Lake Store Gen2 hozzáférés-vezérléséről többet megtudhat a Hozzáférés-vezérlés az Azure Data Lake Storage Gen2-ben című cikkből.

Bérlők közötti forgatókönyvek

Ha Azure Storage a Synapse kiszolgáló nélküli SQL-készletétől eltérő bérlőben van, az ajánlott módszer a Szolgáltatásnév keresztüli engedélyezés. SAS-engedélyezés is lehetséges, míg a felügyelt identitás nem támogatott.

Engedélyezési típus Tűzfal által védett tároló nem tűzfallal védett tároló
SAS Támogatott Támogatott
Szolgáltatásfelelős Nem támogatott Támogatott

Megjegyzés

Ha az Azure Storage-t egy Azure Storage firewall védi, a Szolgáltatásalany nem támogatott.

Támogatott engedélyezési típusok adatbázis-felhasználók számára

Az alábbi táblázat Azure Storage különböző bejelentkezési metódusokhoz nyújt elérhető engedélyezési típusokat egy Azure Synapse Analytics kiszolgáló nélküli SQL-végponton:

Engedélyezés típusa SQL-felhasználó Microsoft Entra felhasználó Szolgáltatásnév
Felhasználói identitás Nem támogatott Támogatott Támogatott
SAS Támogatott Támogatott Támogatott
Szolgáltatásnév Támogatott Támogatott Támogatott
Kezelhető identitás Támogatott Támogatott Támogatott

Támogatott tárolók és engedélyezési típusok

Az engedélyezési típusok és Azure Storage típusok alábbi kombinációit használhatja:

Engedélyezés típusa Blob Storage ADLS Gen1 ADLS Gen2
SAS Támogatott Nem támogatott Támogatott
Szolgáltatásnév Támogatott Támogatott Támogatott
Kezelhető identitás Támogatott Támogatott Támogatott
Felhasználói identitás Támogatott Támogatott Támogatott

Bérlők közötti forgatókönyvek

Ha Azure Storage egy másik bérlőben van, mint a Azure Synapse Analytics kiszolgáló nélküli SQL-készlet, az ajánlott módszer az engedélyezés szolgáltatásnévvel. Közös hozzáférésű jogosultságkód-engedélyezés is lehetséges. A felügyelt szolgáltatás identitása nem támogatott.

Engedélyezési típus Tűzfal által védett tároló nem tűzfallal védett tároló
SAS Támogatott Támogatott
Szolgáltatásnév Nem támogatott Támogatott

Megjegyzés

Ha az Azure Storage-t egy Azure Storage tűzfal védi, és az egy másik bérlőnél van, a service principal nem támogatott. Ehelyett használjon közös hozzáférésű jogosultságkódot (SAS).

Tűzfal által védett tároló

Egy erőforráspéldány-szabály létrehozásával konfigurálhatja a tárfiókokat egy adott kiszolgáló nélküli SQL-készlethez való hozzáférés engedélyezéséhez. A tűzfallal védett tároló elérésekor használja a felhasználói identitást vagy a felügyelt identitást.

Megjegyzés

A Azure Storage tűzfalfunkciója nyilvános előzetes verzióban érhető el, és minden nyilvános felhőrégióban elérhető.

Az alábbi táblázat tűzfallal védett Azure Storage engedélyezési típusokat biztosít a különböző bejelentkezési módszerekhez egy Azure Synapse Analytics kiszolgáló nélküli SQL-végponton:

Engedélyezés típusa SQL-felhasználó Microsoft Entra felhasználó Szolgáltatásnév
Felhasználói identitás Nem támogatott Támogatott Támogatott
SAS Nem támogatott Nem támogatott Nem támogatott
Szolgáltatásnév Nem támogatott Nem támogatott Nem támogatott
Kezelhető identitás Támogatott Támogatott Támogatott

A tűzfallal védett tárolók felhasználói identitáson keresztüli eléréséhez használhatja a Azure portált vagy az Az.Storage PowerShell-modult.

Azure Storage tűzfal konfigurációja Azure portálon keresztül

  1. Keresse meg a tárfiókját az Azure portálon.
  2. A fő navigációs menüben válassza a Beállítások területen a Hálózatkezelés lehetőséget.
  3. A Resource instances szakaszban adjon hozzá kivételt a Azure Synapse munkaterülethez.
  4. Válassza Microsoft.Synapse/workspacesForrás típusa.
  5. Válassza ki a munkaterület nevét példánynévként.
  6. Válassza az Mentésgombot.

Azure Storage tűzfalkonfiguráció a PowerShell-lel

Az alábbi lépéseket követve konfigurálhatja a tárfiókot, és kivételt adhat hozzá a Azure Synapse munkaterülethez.

  1. Nyissa meg a PowerShellt, vagy telepítse a PowerShellt.

  2. Telepítse az Az.Storage modul és az Az.Synapse modul legújabb verzióit, például a következő szkriptben:

    Install-Module -Name Az.Storage -RequiredVersion 3.4.0
    Install-Module -Name Az.Synapse -RequiredVersion 0.7.0
    

    Fontos

    Győződjön meg arról, hogy legalább a 3.4.0-s verziót használja. Az Az.Storage-verziót a következő paranccsal ellenőrizheti:

    Get-Module -ListAvailable -Name Az.Storage | Select Version
    
  3. Csatlakozás a Azure-bérlőhöz:

    Connect-AzAccount
    
  4. Változók definiálása a PowerShellben:

    • Erőforráscsoport neve – ezt Azure portálon találja a tárfiók Overview.
    • Fiók neve – a tűzfalszabályok által védett tárfiók neve.
    • Bérlőazonosító – ezt a Azure portálon találja a Microsoft Entra IDProperties alatt, Tenant tulajdonságok.
    • Munkaterület neve – A Azure Synapse munkaterület neve.
        $resourceGroupName = "<resource group name>"
        $accountName = "<storage account name>"
        $tenantId = "<tenant id>"
        $workspaceName = "<Azure Synapse workspace name>"
    
        $workspace = Get-AzSynapseWorkspace -Name $workspaceName
        $resourceId = $workspace.Id
        $index = $resourceId.IndexOf("/resourceGroups/", 0)
        # Replace G with g - /resourceGroups/ to /resourcegroups/
        $resourceId = $resourceId.Substring(0,$index) + "/resourcegroups/" ` 
            + $resourceId.Substring($index + "/resourceGroups/".Length)
    
        $resourceId
    

    Fontos

    A PowerShell-szkript által visszaadott értéknek $resourceid meg kell egyeznie a sablonnal: /subscriptions/{subscription-id}/resourcegroups/{resource-group}/providers/Microsoft.Synapse/workspaces/{name-of-workspace} Fontos kisbetűvel írni a resourcegroups-t.

  5. Adjon hozzá egy Azure tárfiók hálózati szabályát:

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
            TenantId = $tenantId 
            ResourceId = $resourceId
        }
    
        Add-AzStorageAccountNetworkRule @parameters
    
  6. Ellenőrizze, hogy a tárfiók hálózati szabálya alkalmazva lett-e a tárfiók tűzfalán. Az alábbi PowerShell-szkript az $resourceid előző lépések változóját hasonlítja össze a tárfiók hálózati szabályának kimenetével.

        $parameters = @{
            ResourceGroupName = $resourceGroupName
            Name = $accountName
        }
    
        $rule = Get-AzStorageAccountNetworkRuleSet @parameters
        $rule.ResourceAccessRules | ForEach-Object { 
            if ($_.ResourceId -cmatch "\/subscriptions\/(\w\-*)+\/resourcegroups\/(.)+") { 
                Write-Host "Storage account network rule is successfully configured." -ForegroundColor Green
                $rule.ResourceAccessRules
            } else {
                Write-Host "Storage account network rule is not configured correctly. Remove this rule and follow the steps in detail." -ForegroundColor Red
                $rule.ResourceAccessRules
            }
        }
    

Hitelesítő adatok

A Azure Storage található fájl lekérdezéséhez a kiszolgáló nélküli SQL-készlet végpontjának olyan hitelesítő adatokra van szüksége, amely tartalmazza a hitelesítési adatokat. Kétféle hitelesítő adatot használunk:

  • A kiszolgálószintű hitelesítő adatok a függvény használatával OPENROWSET végrehajtott alkalmi lekérdezésekhez használatosak. A hitelesítő adatok nevének meg kell egyeznie a tár URL-címével.
  • Külső táblákhoz adatbázis-hatókörű hitelesítő adatokat használunk. Külső táblahivatkozások DATA SOURCE a tároló eléréséhez használandó hitelesítő adatokkal.

Engedélyek megadása hitelesítő adatok kezeléséhez

Hitelesítő adatok kezelésének engedélyezése:

  • Ahhoz, hogy a felhasználó kiszolgálószintű hitelesítő adatokat hozzon létre vagy elvetjen, a rendszergazdának engedélyt kell adnia a ALTER ANY CREDENTIAL főadatbázisban való bejelentkezésre. Például:

    GRANT ALTER ANY CREDENTIAL TO [login_name];
    
  • Ahhoz, hogy egy felhasználó létrehozhasson vagy elvetjen egy adatbázis-hatókörű hitelesítő adatot, a rendszergazdának meg kell adnia az CONTROL adatbázis engedélyét a felhasználói adatbázisban lévő adatbázis-felhasználónak. Például:

    GRANT CONTROL ON DATABASE::[database_name] TO [user_name];
    

Hitelesítő adatok használatára vonatkozó engedélyek megadása

A külső tárolóhoz hozzáférő adatbázis-felhasználóknak rendelkezniük kell a hitelesítő adatok használatára való jogosultsággal. A hitelesítő adatok használatához a felhasználónak rendelkeznie kell egy REFERENCES adott hitelesítő adat engedélyével.

Ha kiszolgálószintű hitelesítő adatokhoz szeretne engedélyt adni REFERENCES egy bejelentkezéshez, használja a következő T-SQL-lekérdezést a főadatbázisban:

GRANT REFERENCES ON CREDENTIAL::[server-level_credential] TO [login_name];

Ha adatbázis-hatókörű hitelesítő adatokra szeretne engedélyt adni REFERENCES egy adatbázis-felhasználó számára, használja a következő T-SQL-lekérdezést a felhasználói adatbázisban:

GRANT REFERENCES ON DATABASE SCOPED CREDENTIAL::[database-scoped_credential] TO [user_name];

Kiszolgálószintű hitelesítő adatok

A kiszolgálószintű hitelesítő adatok akkor használatosak, ha egy SQL-bejelentkezési hívás a tárfiók fájljainak olvasása nélkül OPENROWSET működikDATA_SOURCE.

A kiszolgálószintű hitelesítő adatok nevének meg kell egyeznie az Azure Storage alap URL-címével, opcionálisan egy tárolónévvel kiegészítve. A rendszer hozzáad egy hitelesítő adatot a CREATE CREDENTIAL futtatásával. Meg kell adnia az argumentumot CREDENTIAL NAME .

Megjegyzés

Az FOR CRYPTOGRAPHIC PROVIDER argumentum nem támogatott.

A kiszolgálószintű HITELESÍTŐ ADATOK nevének meg kell egyeznie a következő formátummal: <prefix>://<storage_account_path>[/<container_name>]. A tárfiók elérési útjait az alábbi táblázat ismerteti:

Külső adatforrás Prefix Tárfiók elérési útja
Azure Blob Storage https <storage_account>.blob.core.windows.net
Azure Data Lake Storage Gen1 https <storage_account>.azuredatalakestore.net/webhdfs/v1
Azure Data Lake Storage Gen2 https <storage_account>.dfs.core.windows.net

A kiszolgálószintű hitelesítő adatok ezután a következő hitelesítési típusok használatával férhetnek hozzá Azure tárolóhoz:

Microsoft Entra felhasználók bármely fájlt hozzáférhetnek Azure tárterületen, ha a Storage Blob Data Owner, a Storage Blob Data Contributor vagy a Storage Blob Data Reader szerepkör tagjai. Microsoft Entra a felhasználóknak nincs szükségük hitelesítő adatokra a tárterület eléréséhez.

A hitelesített SQL-felhasználók nem használhatják Microsoft Entra hitelesítést a tárterület eléréséhez. A tárterületet egy adatbázis hitelesítő adatain keresztül érhetik el felügyelt identitással, SAS-kulcssal, szolgáltatásnévvel, vagy ha nyilvános hozzáférés van a tárhoz.

Adatbázis-hatókörű hitelesítő

Az adatbázis-hatókörű hitelesítő adatok akkor használatosak, amikor bármely jogosult hívja a OPENROWSET függvényt DATA_SOURCE vagy választ adatokat olyan külső táblából, amelyek nem férnek hozzá a nyilvános fájlokhoz. Az adatbázis hatókörébe tartozó hitelesítő adatoknak nem kell egyeznie a tárfiók nevével, a tároló helyét meghatározó ADATFORRÁSban hivatkoznak rá.

Az adatbázis-hatókörű hitelesítő adatok a következő hitelesítési típusok használatával teszik lehetővé Azure tárterület elérését:

Microsoft Entra felhasználók bármely fájlt hozzáférhetnek Azure tárterületen, ha tagjai a Storage Blob-adatok tulajdonosának, a Storage Blob-adatszolgáltatónak vagy a Storage Blob-adatolvasó szerepkörnek. Microsoft Entra a felhasználóknak nincs szükségük hitelesítő adatokra a tárterület eléréséhez.

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
)

A hitelesített SQL-felhasználók nem használhatják Microsoft Entra hitelesítést a tárterület eléréséhez. A tárterületet egy adatbázis hitelesítő adatain keresztül érhetik el felügyelt identitással, SAS-kulcssal, szolgáltatásnévvel, vagy ha nyilvános hozzáférés van a tárhoz.

Az adatbázis hatókörébe tartozó hitelesítő adatok külső adatforrásokban vannak használva annak meghatározásához, hogy milyen hitelesítési módszert használnak a tár eléréséhez:

CREATE EXTERNAL DATA SOURCE mysample
WITH (    LOCATION   = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>',
          CREDENTIAL = <name of database scoped credential> 
)

Példák

Nyilvánosan elérhető adatforrás elérése

A következő szkripttel hozzon létre egy táblát, amely hozzáfér a nyilvánosan elérhető adatforráshoz.

CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat]
       WITH ( FORMAT_TYPE = PARQUET)
GO
CREATE EXTERNAL DATA SOURCE publicData
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<public_container>/<path>' )
GO

CREATE EXTERNAL TABLE dbo.userPublicData ( [id] int, [first_name] varchar(8000), [last_name] varchar(8000) )
WITH ( LOCATION = 'parquet/user-data/*.parquet',
       DATA_SOURCE = [publicData],
       FILE_FORMAT = [SynapseParquetFormat] )

Az adatbázis-felhasználó az adatforrásból beolvassa a fájlok tartalmát az adatforrásra hivatkozó külső tábla vagy OPENROWSET függvény használatával:

SELECT TOP 10 * FROM dbo.userPublicData;
GO
SELECT TOP 10 * FROM OPENROWSET(BULK 'parquet/user-data/*.parquet',
                                DATA_SOURCE = 'mysample',
                                FORMAT='PARQUET') as rows;
GO

Adatforrás elérése hitelesítő adatokkal

Módosítsa a következő szkriptet úgy, hogy létrehozzon egy külső táblát, amely SAS-jogkivonattal, Microsoft Entra felhasználó identitásával vagy a munkaterület felügyelt identitásával fér hozzá Azure tárterülethez.

-- Create master key in databases with some password (one-off per database)
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<strong password>'
GO

-- Create databases scoped credential that use Managed Identity, SAS token or service principal. User needs to create only database-scoped credentials that should be used to access data source:

CREATE DATABASE SCOPED CREDENTIAL WorkspaceIdentity
WITH IDENTITY = 'Managed Identity'
GO
CREATE DATABASE SCOPED CREDENTIAL SasCredential
WITH IDENTITY = 'SHARED ACCESS SIGNATURE', SECRET = 'sv=2019-10-1********ZVsTOL0ltEGhf54N8KhDCRfLRI%3D'
GO
CREATE DATABASE SCOPED CREDENTIAL SPNCredential WITH
IDENTITY = '**44e*****8f6-ag44-1890-34u4-22r23r771098@https://login.microsoftonline.com/**do99dd-87f3-33da-33gf-3d3rh133ee33/oauth2/token' 
, SECRET = '.7OaaU_454azar9WWzLL.Ea9ePPZWzQee~'
GO
-- Create data source that one of the credentials above, external file format, and external tables that reference this data source and file format:

CREATE EXTERNAL FILE FORMAT [SynapseParquetFormat] WITH ( FORMAT_TYPE = PARQUET)
GO

CREATE EXTERNAL DATA SOURCE mysample
WITH ( LOCATION = 'https://<storage_account>.dfs.core.windows.net/<container>/<path>'
-- Uncomment one of these options depending on authentication method that you want to use to access data source:
--,CREDENTIAL = WorkspaceIdentity 
--,CREDENTIAL = SasCredential 
--,CREDENTIAL = SPNCredential
)

CREATE EXTERNAL TABLE dbo.userData ( [id] int, [first_name] varchar(8000), [last_name] varchar(8000) )
WITH ( LOCATION = 'parquet/user-data/*.parquet',
       DATA_SOURCE = [mysample],
       FILE_FORMAT = [SynapseParquetFormat] );

Az adatbázis-felhasználó az adatforrásból beolvassa a fájlok tartalmát az adatforrásra hivatkozó külső tábla vagy OPENROWSET függvény használatával:

SELECT TOP 10 * FROM dbo.userdata;
GO
SELECT TOP 10 * FROM OPENROWSET(BULK 'parquet/user-data/*.parquet', DATA_SOURCE = 'mysample', FORMAT='PARQUET') as rows;
GO

Ezekkel a cikkekkel megtudhatja, hogyan kérdezhet le különböző mappatípusokat, fájltípusokat, és hogyan hozhat létre és használhat nézeteket: