Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Applies to : SQL Server 2016 (13.x) et versions ultérieures
Azure SQL Database
Azure SQL Managed Instance
SQL analytics endpoint in Microsoft Fabric
Warehouse dans Microsoft Fabric
SQL dans Microsoft Fabric
Crée une stratégie de sécurité pour sécurité au niveau de la croissance dans le Moteur de base de données SQL.
La sécurité au niveau des lignes dans Fabric Data Warehouse fonctionne de la même façon que d’autres produits SQL Moteur de base de données. Pour plus d’informations et des exemples de sécurité au niveau des lignes dans Fabric Data Warehouse ou le point de terminaison d’analytique SQL, consultez Sécurité au niveau durow dans Fabric entreposage de données.
conventions de syntaxe Transact-SQL
Syntax
CREATE SECURITY POLICY [schema_name. ] security_policy_name
{ ADD [ FILTER | BLOCK ] } PREDICATE tvf_schema_name.security_predicate_function_name
( { column_name | expression } [ , ...n] ) ON table_schema_name. table_name
[ <block_dml_operation> ] , [ , ...n]
[ WITH ( STATE = { ON | OFF } [,] [ SCHEMABINDING = { ON | OFF } ] ) ]
[ NOT FOR REPLICATION ]
[;]
<block_dml_operation>
[ { AFTER { INSERT | UPDATE } }
| { BEFORE { UPDATE | DELETE } } ]
Arguments
security_policy_name
Nom de la stratégie de sécurité. Les noms de stratégie de sécurité doivent respecter les règles pour les identificateurs et être uniques dans la base de données et son schéma.
schema_name
Nom du schéma auquel appartient la stratégie de sécurité. schema_name est obligatoire en raison de la liaison de schéma.
[ FILTRE | BLOCK ]
Type de prédicat de sécurité pour la fonction à lier à la table cible.
- Les prédicats
FILTERfiltrent de manière silencieuse les lignes disponibles pour les opérations de lecture. - Les prédicats
BLOCKbloquent de façon explicite les opérations d’écriture qui violent la fonction de prédicat.
tvf_schema_name.security_predicate_function_name
Fonction de valeur de table inline qui sera utilisée comme prédicat et qui sera appliquée aux requêtes sur une table cible. Au plus un prédicat de sécurité peut être défini pour une opération DML particulière sur une table donnée. La fonction de valeur de table inline doit avoir été créée à l'aide de l'option SCHEMABINDING.
{ column_name | expression }
Nom de la colonne ou expression servant de paramètre dans la fonction de prédicat de sécurité. N’importe quelle colonne de la table cible peut être utilisée. Une expression ne peut inclure que des constantes, des fonctions scalaires intégrées, des opérateurs et des colonnes de la table cible. Vous devez spécifier un nom de colonne ou une expression pour chaque paramètre de la fonction.
table_schema_name.table_name
Table cible à laquelle le prédicat de sécurité sera appliqué. Plusieurs stratégies de sécurité désactivées peuvent cibler une même table pour une opération DML particulière, mais une seule peut être activée à un moment donné.
block_dml_operation
Opération DML particulière pour laquelle le prédicat BLOCK est appliqué.
AFTER spécifie que le prédicat est évalué sur les valeurs des lignes après l’exécution de l’opération DML (INSERT ou UPDATE).
BEFORE spécifie que le prédicat est évalué sur les valeurs des lignes avant l’exécution de l’opération DML (UPDATE ou DELETE). Si aucune opération n’est spécifiée, le prédicat s’applique à toutes les opérations.
[ ÉTAT = { ON | OFF } ]
Permet à la stratégie de sécurité d'appliquer ses prédicats de sécurité sur les tables cibles, ou l'empêche d'effectuer cette opération. Sauf indication contraire, la stratégie de sécurité en cours de création est activée.
[ SCHEMABINDING = { ON | OFF } ]
Indique si toutes les fonctions de prédicat de la stratégie doivent être créées avec l’option SCHEMABINDING. Par défaut, ce paramètre est défini sur ON et toutes les fonctions doivent être créées avec SCHEMABINDING.
NON POUR LA RÉPLICATION
Indique que la stratégie de sécurité ne doit pas être exécutée quand un agent de réplication modifie l'objet cible. Pour plus d’informations, consultez Control the Behavior of Triggers and Constraints During Synchronization (Replication Transact-SQL Programming).
[ table_schema_name. table_name
Table cible à laquelle le prédicat de sécurité sera appliqué. Plusieurs stratégies de sécurité désactivées peuvent cibler une même table, mais une seule peut être activée à un moment donné.
Remarks
Quand vous utilisez des fonctions de prédicat avec des tables optimisées en mémoire, vous devez inclure SCHEMABINDING et utiliser l’indicateur de compilation WITH NATIVE_COMPILATION.
Les prédicats BLOCK sont évalués après l’exécution de l’opération DML correspondante. Par conséquent, il est dangereux qu’une READ UNCOMMITTED requête puisse voir les valeurs temporaires qui seront restaurées.
Permissions
Nécessite l’autorisation et ALTER l’autorisation ALTER ANY SECURITY POLICY sur le schéma.
En outre, les autorisations suivantes sont requises pour chaque prédicat ajouté :
Les autorisations
SELECTetREFERENCESsur la fonction utilisée en tant que prédicat.L’autorisation
REFERENCESsur la table cible liée à la stratégie.Autorisation
REFERENCESsur chaque colonne de la table cible utilisée comme argument.
Examples
Les exemples suivants illustrent l’utilisation de la syntaxe CREATE SECURITY POLICY. Pour obtenir un exemple de scénario de stratégie de sécurité complet, reportez-vous à Sécurité au niveau des lignes.
A. Créer une stratégie de sécurité
La syntaxe suivante crée une stratégie de sécurité avec un prédicat de filtre pour la table dbo.Customer et laisse la stratégie de sécurité désactivée.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate]([CustomerId])
ON [dbo].[Customer];
B. Créer une stratégie qui affecte plusieurs tables
La syntaxe suivante crée une stratégie de sécurité avec trois prédicats de filtre sur trois tables différentes et active la stratégie de sécurité.
CREATE SECURITY POLICY [FederatedSecurityPolicy]
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([CustomerId])
ON [dbo].[Customer],
ADD FILTER PREDICATE [rls].[fn_securitypredicate1]([VendorId])
ON [dbo].[ Vendor],
ADD FILTER PREDICATE [rls].[fn_securitypredicate2]([WingId])
ON [dbo].[Patient]
WITH (STATE = ON);
C. Créer une stratégie avec plusieurs types de prédicats de sécurité
Ajout d’un prédicat FILTER et d’un prédicat BLOCK à la table dbo.Sales.
CREATE SECURITY POLICY rls.SecPol
ADD FILTER PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales,
ADD BLOCK PREDICATE rls.tenantAccessPredicate(TenantId) ON dbo.Sales AFTER INSERT;