Autorizzazioni granulari SQL in Microsoft Fabric
Si applica a: Endpoint SQL e Warehouse in Microsoft Fabric
Quando le autorizzazioni predefinite fornite dall'assegnazione ai ruoli dell'area di lavoro o concesse tramite autorizzazioni di elemento non sono sufficienti, i costrutti SQL standard sono disponibili per un controllo più granulare.
Per endpoint SQL e Warehouse:
- La sicurezza a livello di oggetto può essere gestita usando la sintassi GRANT, REVOKE e DENY.
- Gli utenti possono essere assegnati a ruoli SQL, sia ruoli di database personalizzati che predefiniti.
Importante
Microsoft Fabric è attualmente in ANTEPRIMA. Queste informazioni si riferiscono a un prodotto di versione preliminare che può essere modificato sostanzialmente prima che venga rilasciato. Microsoft non garantisce alcuna garanzia, espressa o implicita, rispetto alle informazioni fornite qui.
Autorizzazioni granulari dell'utente
- Per consentire a un utente di connettersi al database, l'utente deve essere assegnato a un ruolo Area di lavoro o assegnato l'autorizzazione Lettura elemento. Senza autorizzazioni di lettura almeno, la connessione ha esito negativo.
- Se si desidera configurare le autorizzazioni granulari di un utente prima di consentire la connessione al warehouse, è prima possibile configurare le autorizzazioni all'interno di SQL. È quindi possibile concedere l'accesso assegnandoli a un ruolo area di lavoro o concedendole le autorizzazioni per gli elementi.
Limitazioni
- L'utente CREATE non può essere eseguito in modo esplicito. Quando GRANT o DENY viene eseguito, l'utente verrà creato automaticamente.
- La sicurezza a livello di riga non è attualmente supportata.
- Il mascheramento di dati dinamico non è attualmente supportato.
Visualizzare le autorizzazioni personali
Quando un utente si connette alla stringa di connessione SQL, può visualizzare le autorizzazioni disponibili per loro usando la funzione sys.fn_my_permissions .
Autorizzazioni con ambito database dell'utente:
SELECT *
FROM sys.fn_my_permissions(NULL, "Database")
Autorizzazioni con ambito dello schema dell'utente:
SELECT *
FROM sys.fn_my_permissions("<schema-name>", "Schema")
Autorizzazioni con ambito oggetto dell'utente:
SELECT *
FROM sys.fn_my_permissions("<schema-name>.<object-name>", "Object")
Visualizzare le autorizzazioni concesse in modo esplicito agli utenti
Quando si è connessi tramite la stringa di connessione SQL, un utente con autorizzazioni elevate può eseguire query sulle autorizzazioni concesse usando le viste di sistema. Ciò non mostra gli utenti o le autorizzazioni utente assegnate agli utenti assegnandole ai ruoli dell'area di lavoro o alle autorizzazioni di elemento assegnate.
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;
Limitare l'accesso alle righe usando le viste
La sicurezza a livello di riga non è attualmente supportata. Come soluzione alternativa, le visualizzazioni e le funzioni di sistema possono essere usate per limitare l'accesso di un utente ai dati. Questa operazione può essere ottenuta nel modo seguente:
Fornire all'utente solo l'autorizzazione di lettura di Fabric: consentirà loro le autorizzazioni CONNECT solo per il Warehouse.
Facoltativamente, creare un ruolo personalizzato e aggiungere l'utente al ruolo, se si vuole limitare l'accesso in base ai ruoli.
CREATE ROLE PrivilegedRole ALTER ROLE PrivilegedRole ADD MEMBER [userOne@contoso.com]
Creare una visualizzazione che esegue una query sulla tabella per cui si vuole limitare l'accesso alle righe
Aggiungere una clausola WHERE all'interno della definizione VIEW usando le funzioni di sistema SUSER_SNAME() o IS_ROLEMEMBER() per filtrare in base al nome utente o all'appartenenza al ruolo. Di seguito è riportato un esempio di fornire l'accesso a determinate righe agli utenti in base ai dati dell'area all'interno della riga. La prima condizione fornisce l'accesso alle righe, di un'area specifica, a un utente specifico, mentre la seconda condizione fornisce l'accesso alle righe, di un'area specifica, a qualsiasi membro del ruolo personalizzato 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')
Concedere l'accesso alla visualizzazione:
GRANT SELECT ON dbo.RestrictedAccessTable TO [userOne@contoso.com]