SQL-detaljerede tilladelser i Microsoft Fabric

Gælder for: SQL Endpoint og Warehouse i Microsoft Fabric

Når de køreklare tilladelser, der leveres af tildeling til arbejdsområderoller eller tildelt via elementtilladelser, ikke er tilstrækkelige, er STANDARD SQL-konstruktioner tilgængelige til mere detaljeret kontrol.

For SQL Endpoint og Warehouse:

  • Sikkerhed på objektniveau kan administreres ved hjælp af syntaksen GRANT, REVOKE og DENY.
    • Du kan finde flere oplysninger i T-SQL-syntaksen for GRANT, REVOKE og DENY.
  • Brugere kan tildeles til SQL-roller, både brugerdefinerede og indbyggede databaseroller.

Vigtigt

Microsoft Fabric findes i øjeblikket i PRØVEVERSION. Disse oplysninger er relateret til et foreløbig produkt, der kan blive ændret væsentligt, før det udgives. Microsoft giver ingen garantier, udtrykt eller stiltiende, med hensyn til de oplysninger, der er angivet her.

Brugergranulære tilladelser

  • For at en bruger kan oprette forbindelse til databasen, skal brugeren tildeles en rolle i arbejdsområdet eller have tildelt elementet læsetilladelse . Uden tilladelsen Læs som minimum mislykkes forbindelsen.
  • Hvis du vil konfigurere en brugers detaljerede tilladelser, før du giver vedkommende tilladelse til at oprette forbindelse til lageret, kan tilladelserne først konfigureres i SQL. De kan derefter få adgang ved at tildele dem til en arbejdsområderolle eller tildele elementtilladelser.

Begrænsninger

  • CREATE USER kan ikke udføres eksplicit i øjeblikket. Når GRANT eller DENY udføres, oprettes brugeren automatisk.
  • Sikkerhed på rækkeniveau understøttes ikke i øjeblikket.
  • Dynamisk datamaskering understøttes ikke i øjeblikket.

Vis mine tilladelser

Når en bruger opretter forbindelse til SQL-forbindelsesstrengen, kan vedkommende få vist de tilladelser, der er tilgængelige for dem, ved hjælp af funktionen sys.fn_my_permissions .

Tilladelser, der er beregnet til brugerens database:

SELECT *
FROM sys.fn_my_permissions(NULL, "Database")

Tilladelser, der er beregnet til skemaer for brugeren:

SELECT *
FROM sys.fn_my_permissions("<schema-name>", "Schema")

Brugerens objektbaserede tilladelser:

SELECT *
FROM sys.fn_my_permissions("<schema-name>.<object-name>", "Object")

Vis tilladelser, der udtrykkeligt er tildelt til brugere

Når der er oprettet forbindelse via SQL-forbindelsesstrengen, kan en bruger med administratorrettigheder forespørge om de tilladelser, der er tildelt ved hjælp af systemvisninger. Dette viser ikke de brugere eller brugertilladelser, der gives til brugere ved at blive tildelt til arbejdsområderoller eller tildelte elementtilladelser.

SELECT DISTINCT pr.principal_id, pr.name, pr.type_desc, 
 pr.authentication_type_desc, pe.state_desc, pe.permission_name
FROM sys.database_principals AS pr
JOIN sys.database_permissions AS pe
 ON pe.grantee_principal_id = pr.principal_id;

Begræns rækkeadgang ved hjælp af visninger

Sikkerhed på rækkeniveau understøttes ikke i øjeblikket. Som en løsning kan visninger og systemfunktioner bruges til at begrænse en brugers adgang til dataene. Dette kan opnås på følgende måde:

  1. Giv brugeren skrivebeskyttet fabric-tilladelse – dette vil kun give brugeren CONNECT-tilladelser til lageret.

  2. Du kan også oprette en brugerdefineret rolle og føje brugeren til rollen, hvis du vil begrænse adgangen baseret på roller.

    CREATE ROLE PrivilegedRole
    
    ALTER ROLE PrivilegedRole ADD MEMBER [userOne@contoso.com]
    
  3. Opret en visning, der forespørger den tabel, du vil begrænse rækkeadgang for

  4. Tilføj en WHERE-delsætning i VIEW-definitionen ved hjælp af systemfunktionerne SUSER_SNAME() eller IS_ROLEMEMBER() for at filtrere baseret på brugernavn eller rollemedlemskab. Nedenfor er et eksempel på, hvordan du giver brugere adgang til bestemte rækker baseret på områdedata i rækken. Den første betingelse giver adgang til rækker i et bestemt område til en bestemt bruger, mens den anden betingelse giver adgang til rækker i et bestemt område til et hvilket som helst medlem af den brugerdefinerede rolle PrivilegedRole.

    CREATE VIEW dbo.RestrictedAccessTable as
    select *
    from dbo.SampleTable
    WHERE
    ( SUSER_SNAME() = 'userTwo@contoso.com' AND test_region = '<region_one_name>')
    OR
    ( IS_ROLEMEMBER('PrivilegedRole', SUSER_SNAME()) = 1 AND test_region = '<region_two_name')
    
  5. Tildel adgang til visningen:

    GRANT SELECT ON dbo.RestrictedAccessTable TO [userOne@contoso.com]
    

Næste trin