CREATE AUTHENTICATION POLICY¶
Crée une nouvelle politique d’authentification dans le schéma actuel ou spécifié ou remplace une politique d’authentification existante. Vous pouvez utiliser des politiques d’authentification pour définir des contrôles d’authentification et des exigences de sécurité pour les comptes ou les utilisateurs.
Cette commande prend en charge les variantes suivantes :
CREATE OR ALTER AUTHENTICATION POLICY : crée une politique d’authentification si elle n’existe pas, ou modifie une politique d’authentification existante.
- Voir aussi :
ALTER AUTHENTICATION POLICY, DESCRIBE AUTHENTICATION POLICY, DROP AUTHENTICATION POLICY, SHOW AUTHENTICATION POLICIES, CREATE OR ALTER <objet>
Syntaxe¶
CREATE [ OR REPLACE ] AUTHENTICATION POLICY [ IF NOT EXISTS ] <name>
[ AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ CLIENT_TYPES = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ CLIENT_POLICY = ( <client_type> = ( MINIMUM_VERSION = '<version>' ) [ , ... ] ) ]
[ SECURITY_INTEGRATIONS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ MFA_ENROLLMENT = { 'REQUIRED' | 'REQUIRED_PASSWORD_ONLY' } ]
[ MFA_POLICY= ( <list_of_properties> ) ]
[ PAT_POLICY = ( <list_of_properties> ) ]
[ WORKLOAD_IDENTITY_POLICY = ( <list_of_properties> ) ]
[ COMMENT = '<string_literal>' ]
Syntaxe des variantes¶
CREATE OR ALTER AUTHENTICATION POLICY¶
Crée une nouvelle politique d’authentification si elle n’existe pas encore, ou modifie une politique d’authentification existante pour la rendre conforme à celle définie dans l’instruction. Une instruction CREATE OR ALTER AUTHENTICATIONPOLICY suit les règles syntaxiques d’une instruction CREATE AUTHENTICATIONPOLICY et présente les mêmes limitations qu’une instruction ALTER AUTHENTICATION POLICY.
CREATE OR ALTER AUTHENTICATION POLICY <name>
[ AUTHENTICATION_METHODS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ CLIENT_TYPES = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ CLIENT_POLICY = ( <client_type> = ( MINIMUM_VERSION = '<version>' ) [ , ... ] ) ]
[ SECURITY_INTEGRATIONS = ( '<string_literal>' [ , '<string_literal>' , ... ] ) ]
[ MFA_ENROLLMENT = { 'REQUIRED' | 'REQUIRED_PASSWORD_ONLY' | 'OPTIONAL' } ]
[ MFA_POLICY= ( <list_of_properties> ) ]
[ PAT_POLICY = ( <list_of_properties> ) ]
[ WORKLOAD_IDENTITY_POLICY = ( <list_of_properties> ) ]
[ COMMENT = '<string_literal>' ]
Paramètres requis¶
nameSpécifie l”identificateur d’une politique d’authentification.
De plus, l’identificateur doit commencer par un caractère alphabétique et ne peut pas contenir d’espaces ou de caractères spéciaux à moins que toute la chaîne d’identificateur soit délimitée par des guillemets doubles (par exemple,
"My object"). Les identificateurs entre guillemets doubles sont également sensibles à la casse.Pour plus d’informations, voir Exigences relatives à l’identificateur.
Paramètres facultatifs¶
AUTHENTICATION_METHODS = ( 'string_literal' [ , 'string_literal' , ... ] )Prudence
La restriction par méthode d’authentification peut avoir des conséquences inattendues, telles que le blocage des connexions de pilotes ou des intégrations de tiers.
Liste des méthodes d’authentification autorisées lors de la connexion. Ce paramètre accepte une ou plusieurs des valeurs suivantes :
ALLAutorise toutes les méthodes d’authentification.
SAMLPermet des intégrations de sécurité SAML2. Si
SAMLest présent, une option de connexion SSO apparaît. SiSAMLn’est pas présent, l’option de connexion SSO n’apparaît pas.PASSWORDPermet aux utilisateurs de s’authentifier à l’aide d’un nom d’utilisateur et d’un mot de passe.
OAUTHAutorise External OAuth.
KEYPAIRPROGRAMMATIC_ACCESS_TOKENPermet aux utilisateurs de s’authentifier à l’aide d’un jeton d’accès programmatique.
WORKLOAD_IDENTITYPermet aux utilisateurs de s’authentifier via la fédération d’identités de charge de travail.
Par défaut :
ALL.CLIENT_TYPES = ( 'string_literal' [ , 'string_literal' , ... ] )Liste des clients qui peuvent s’authentifier auprès de Snowflake.
Si un client tente de se connecter et qu’il ne correspond pas à l’une des valeurs valides de
CLIENT_TYPESénumérées ci-dessous, la tentative de connexion échoue.Si vous avez défini
MFA_ENROLLMENTsurREQUIRED, vous devez inclureSNOWFLAKE_UIdans la listeCLIENT_TYPESpour permettre aux utilisateurs de s’inscrire à MFA.Si vous souhaitez exclure
SNOWFLAKE_UIde la listeCLIENT_TYPES, vous devez définirMFA_ENROLLMENTsurOPTIONAL.The
CLIENT_TYPESproperty of an authentication policy is a best-effort method to block user logins based on specific clients. It should not be used as the sole control to establish a security boundary. Notably, it does not restrict access to the Snowflake REST APIs.Ce paramètre accepte une ou plusieurs des valeurs suivantes :
ALLAutorise tous les clients à s’authentifier.
SNOWFLAKE_UISnowsight ou Classic Console, les interfaces Web de Snowflake.
Prudence
If
SNOWFLAKE_UIis not included in theCLIENT_TYPESlist whileMFA_ENROLLMENTis set toREQUIRED, orMFA_ENROLLMENTis unspecified, MFA enrollment doesn’t work.DRIVERSLes pilotes permettent d’accéder à Snowflake à partir d’applications écrites dans des langages pris en charge. Par exemple, les pilotes Go, JDBC, .NET et Snowpipe Streaming.
Prudence
Si
DRIVERSn’est pas inclus dans la listeCLIENT_TYPES, l’ingestion automatisée peut cesser de fonctionner.SNOWFLAKE_CLIUn client de ligne de commande pour se connecter à Snowflake et pour gérer des charges de travail centrées sur les développeurs et des opérations SQL.
SNOWSQLUn client de ligne de commande pour se connecter à Snowflake.
Par défaut :
ALL.
CLIENT_POLICY = client_type = ( MINIMUM_VERSION = 'version' )Spécifie une politique dans la politique d’authentification qui définit la version minimale autorisée pour chaque type de client spécifié.
Si CLIENT_TYPES est vide, contient
ALL, ou contientDRIVERS, le paramètre CLIENT_POLICY accepte un ou plusieurs des clients de pilote suivants (et une chaîne de version spécifique). Pour tout client de pilote non spécifié, la politique autorise implicitement toute version de ce client.Si CLIENT_TYPES contient une autre valeur, telle que
SNOWFLAKE_CLI, et ne contient pas égalementDRIVERS, la spécification de l’un des types de clients suivants entraîne une erreur. Vous ne pouvez pas créer (ou modifier) une politique d’authentification telle que les paramètres CLIENT_TYPES et CLIENT_POLICY ne soient pas compatibles.client_typeUne ou plusieurs valeurs de type de client valides. Il s’agit d’un ensemble de valeurs différent de celles que le paramètre CLIENT_TYPES accepte. N’utilisez pas de guillemets simples pour ces valeurs.
JDBC_DRIVER(Pilote Snowflake JDBC)ODBC_DRIVER(Pilote Snowflake ODBC)PYTHON_DRIVER(Pilote Snowflake Python)JAVASCRIPT_DRIVER(Pilote Snowflake Javascript)C_DRIVER(Pilote Libsnowflakeclient C)GO_DRIVER(Pilote Snowflake Go)PHP_DRIVER(Pilote Snowflake PHP PDO)DOTNET_DRIVER(Pilote Snowflake .NET )SQL_API(SQL API)SNOWPIPE_STREAMING_CLIENT_SDK(Snowpipe Streaming Client SDK)PY_CORE(Pilote Snowflake Python Core)SPROC_PYTHON(Procédure stockée Python Snowflake)PYTHON_SNOWPARK(Pilote Snowflake Python Snowpark)SQL_ALCHEMY(Snowflake SQLAlchemy)SNOWPARK(Snowpark)SNOWFLAKE_CLIENT(Snowflake Client SDK)
'version'La version minimale acceptée pour chaque type de client spécifié : une séquence de trois chiffres, délimitée par des points et entre guillemets simples. Par exemple,
'1.0.0'ou'3.14.1'. Les tentatives d’authentification avec des versions de clients inférieures sont bloquées lorsque cette politique est en vigueur pour un compte ou un utilisateur.
La propriété CLIENT_POLICY d’une politique d’authentification est une méthode optimale pour bloquer les connexions utilisateurs en fonction de versions de clients spécifiques. Elle ne doit pas être utilisée comme seul contrôle pour établir une limite de sécurité.
SECURITY_INTEGRATIONS = ( 'string_literal' [ , 'string_literal' , ... ] )Liste des intégrations de sécurité auxquelles la politique d’authentification est associée. Ce paramètre n’a aucun effet lorsque
SAMLouOAUTHne figurent pas dans la listeAUTHENTICATION_METHODS.Toutes les valeurs de la liste
SECURITY_INTEGRATIONSdoivent être compatibles avec les valeurs de la listeAUTHENTICATION_METHODS. Par exemple, siSECURITY_INTEGRATIONScontient une intégration de sécurité SAML et queAUTHENTICATION_METHODScontientOAUTH, vous ne pouvez pas créer la politique d’authentification.ALLAffiche toutes les intégrations de sécurité.
Par défaut :
ALL.MFA_ENROLLMENT = { 'REQUIRED' | 'REQUIRED_PASSWORD_ONLY' | 'OPTIONAL' }Determines whether a user must enroll in multi-factor authentication. If this value is used, then the
CLIENT_TYPESparameter must includeSNOWFLAKE_UI, because Snowsight is the only place users can enroll in multi-factor authentication (MFA).Il est possible pour la valeur du paramètre
MFA_ENROLLMENTd’êtreREQUIRED_SNOWFLAKE_UI_PASSWORD_ONLY. Cette valeur fait partie de l’obsolescence graduelle de Snowflake des mots de passe à facteur unique et ne peut pas être définie directement. Si vous exécutez une commande DESCRIBE AUTHENTICATION POLICY etMFA_ENROLLMENT = 'REQUIRED_SNOWFLAKE_UI_PASSWORD_ONLY, les utilisateurs de mots de passe doivent s’inscrire à MFA s’ils utilisent Snowsight.REQUIREDLes utilisateurs humains qui utilisent un mot de passe ou une authentification unique (SSO) doivent s’inscrire à l’authentification multifactorielle (MFA).
REQUIRED_PASSWORD_ONLYTous les utilisateurs humains qui utilisent l’authentification par mot de passe doivent s’inscrire à la MFA, quel que soit le client qu’ils utilisent. Les utilisateurs utilisant l’authentification SSO n’ont pas l’obligation de s’inscrire.
OPTIONALConservé pour la rétrocompatibilité uniquement.
Par défaut :
OPTIONAL. Pour la rétrocompatibilité, vous pouvez créer une politique d’authentification sans spécifier de valeurMFA_ENROLLMENT, mais la valeur réelle appliquée ne sera pasOPTIONALcar Snowflake s’apprête à exiger la MFA pour tous les utilisateurs humains. Pour déterminer quelle valeur est appliquée pour une politique d’authentification existante, exécutez la commande DESCRIBE AUTHENTICATION POLICY.
MFA_POLICY= ( list_of_properties )Specifies the policies that affect how multi-factor authentication (MFA) is enforced. Set this to a space-delimited list of one or more of the following properties and values:
ALLOWED_METHODS = ( { 'ALL' | 'PASSKEY' | 'TOTP' | 'OTP' | 'DUO' } [ , { 'PASSKEY' | 'TOTP' | 'OTP' | 'DUO' } ... ] )Specifies the multi-factor authentication (MFA) methods that users can use as a second factor of authentication. You can specify more than one method as a comma-delimited list.
ALLLes utilisateurs peuvent utiliser une clé d’accès, une application d’authentificateur ou Duo comme deuxième facteur d’authentification.
PASSKEYLes utilisateurs peuvent utiliser une clé de sécurité comme deuxième facteur d’authentification.
TOTPLes utilisateurs peuvent utiliser une application d’authentificateur comme deuxième facteur d’authentification.
OTPUser can use a one-time passcode as their second factor of authentication. For more information, see Configuration des administrateurs pour l’accès d’urgence.
DUOLes utilisateurs peuvent utiliser Duo comme deuxième facteur d’authentification.
Par défaut :
ALL.ENFORCE_MFA_ON_EXTERNAL_AUTHENTICATION = { 'ALL' | 'NONE' }Spécifie si l’authentification multifactorielle (MFA) est requise lorsque les utilisateurs s’authentifient avec une authentification unique (SSO). Pour exiger la MFA, spécifiez
ALL.Default:
NONE
PAT_POLICY = ( list_of_properties )Spécifie les politiques pour les jetons d’accès programmatiques. Cet ensemble correspond à une liste délimitée par des espaces d’une ou plusieurs des propriétés et valeurs suivantes :
DEFAULT_EXPIRY_IN_DAYS = number_of_daysSpécifie le délai d’expiration par défaut (en jours) d’un jeton d’accès programmatique. Vous pouvez spécifier une valeur de 1 pour le délai d’expiration maximal (que vous pouvez spécifier en définissant MAX_EXPIRY_IN_DAYS).
Le délai d’expiration par défaut est de 15 jours.
Pour plus d’informations, voir Définition du délai d’expiration par défaut.
MAX_EXPIRY_IN_DAYS = number_of_daysSpécifie le nombre maximal de jours pouvant être définis pour le délai d’expiration d’un jeton d’accès programmatique. Vous pouvez spécifier une valeur à partir du délai d’expiration par défaut (que vous pouvez spécifier en définissant DEFAULT_EXPIRY_IN_DAYS) sur 365.
Le délai d’expiration maximal par défaut est de 365 jours.
Note
S’il existe des jetons d’accès programmatique dont le délai d’expiration dépasse le nouveau délai d’expiration maximal, les tentatives d’authentification avec ces jetons échoueront.
Par exemple, supposons que vous génériez un jeton d’accès programmatique nommé
my_tokenavec un délai d’expiration de 7 jours. Si vous modifiez ultérieurement le délai d’expiration maximal de tous les jetons pour le porter à 2 jours, l’authentification avecmy_tokenéchouera car le délai d’expiration du jeton dépasse le nouveau délai d’expiration maximal.Pour plus d’informations, voir Définition du délai d’expiration maximal.
NETWORK_POLICY_EVALUATION = { ENFORCED_REQUIRED | ENFORCED_NOT_REQUIRED | NOT_ENFORCED }Spécifie comment les exigences de la politique réseau sont traitées pour les jetons d’accès programmatiques.
Par défaut, un utilisateur doit être soumis à une politique réseau avec une ou plusieurs règles réseau pour générer ou utiliser des jetons d’accès programmatiques :
Les utilisateurs de services (avec TYPE=SERVICE) doivent être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.
Les utilisateurs humains (avec TYPE=PERSON) doivent être soumis à une politique réseau leur permettant d’utiliser des jetons d’accès programmatiques.
Pour annuler ce comportement, donnez à cette propriété l’une des valeurs suivantes :
ENFORCED_REQUIRED(comportement par défaut)L’utilisateur doit être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.
Si l’utilisateur est soumis à une politique réseau, celle-ci est appliquée lors de l’authentification.
ENFORCED_NOT_REQUIREDL’utilisateur ne doit pas être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.
Si l’utilisateur est soumis à une politique réseau, celle-ci est appliquée lors de l’authentification.
NOT_ENFORCEDL’utilisateur ne doit pas être soumis à une politique réseau pour générer et utiliser des jetons d’accès programmatiques.
Si l’utilisateur est soumis à une politique réseau, celle-ci n’est pas appliquée lors de l’authentification.
Par exemple :
PAT_POLICY=( DEFAULT_EXPIRY_IN_DAYS=30 MAX_EXPIRY_IN_DAYS=365 NETWORK_POLICY_EVALUATION = ENFORCED_NOT_REQUIRED );
WORKLOAD_IDENTITY_POLICY = ( list_of_properties )Spécifie les politiques pour la fédération d’identité de charge de travail. Définissez une liste délimitée par des espaces contenant une ou plusieurs des propriétés et valeurs suivantes :
ALLOWED_PROVIDERS = ( { ALL | AWS | AZURE | GCP | OIDC } [ , { AWS | AZURE | GCP | OIDC } ... ] )Spécifie les fournisseurs d’identité de charge de travail autorisés par la politique d’authentification lors de l’authentification de l’identité de charge de travail. Si ce paramètre est omis, tous les fournisseurs d’identité de charge de travail sont autorisés.
ALLLes utilisateurs peuvent s’authentifier auprès de n’importe quel fournisseur d’identité de charge de travail pris en charge et configuré.
AWSLes utilisateurs peuvent s’authentifier avec un rôle ou utilisateur AWS IAM.
AZURELes utilisateurs peuvent s’authentifier avec un jeton d’accès ID Azure Entra.
GCPLes utilisateurs peuvent s’authentifier avec un jeton ID signé Google.
OIDCLes utilisateurs peuvent s’authentifier avec un jeton ID provenant d’un fournisseur OIDC configuré.
ALLOWED_AWS_ACCOUNTS = ( 'string_literal' [ , 'string_literal' , ... ] )Spécifie la liste des IDs de compte AWS autorisés par la politique d’authentification lors de l’authentification de l’identité de la charge de travail de type
AWS.Par défaut, lorsqu’un utilisateur de service Snowflake dispose d’une
WORKLOAD_IDENTITYde typeAWS, alors le ARN peut référencer n’importe quel compte AWS. Si ce paramètre est défini, alors seuls les ARNs des IDs du compte AWS spécifié sont autorisés à s’authentifier.Chaque élément doit être une chaîne de 12 chiffres représentant l4ID de compte AWS.
Pour plus d’informations, consultez Voir les identificateurs de compte AWS.
ALLOWED_AZURE_ISSUERS = ( 'string_literal' [ , 'string_literal' , ... ] )Spécifie la liste des émetteurs d’ID Azure Entra autorisés par la politique d’authentification lors de l’authentification de l’identité de la charge de travail de type
AZURE.Par défaut, lorsqu’un utilisateur de service Snowflake dispose d’une
WORKLOAD_IDENTITYde typeAZURE, l’émetteur peut être n’importe quel ID Entra du client. Si ce paramètre est défini, seuls les jetons Azure des émetteurs spécifiés sont autorisés à s’authentifier.Chaque élément doit être une URL d’autorité valide au format suivant :
https://login.microsoftonline.com/tenantId/v2.0
ALLOWED_OIDC_ISSUERS = ( 'string_literal' [ , 'string_literal' , ... ] )Spécifie la liste des émetteurs OIDC autorisés par la politique d’authentification lors de l’authentification de l’identité de la charge de travail de type
OIDC.Par défaut, lorsqu’un utilisateur de service Snowflake dispose d’une
WORKLOAD_IDENTITYde typeOIDC, l’émetteur peut être n’importe quel émetteur OIDC valide. Si ce paramètre est défini, alors seuls les jetons des émetteurs OIDC spécifiés sont autorisés à s’authentifier.Chaque élément doit être une URL HTTPS valide qui contient les composants de schéma, d’hôte et, éventuellement, de numéro de port et de chemin, mais aucun composant de requête ou de fragment. L’URL ne doit pas contenir d’espaces et ne doit pas dépasser 2 048 caractères.
Par exemple :
WORKLOAD_IDENTITY_POLICY=( ALLOWED_PROVIDERS = (AWS, AZURE, GCP, OIDC) ALLOWED_AWS_ACCOUNTS = ('123456789012', '210987654321') ALLOWED_AZURE_ISSUERS = ('https://login.microsoftonline.com/8c7832f5-de56-4d9f-ba94-3b2c361abe6b/v2.0', 'https://login.microsoftonline.com/9ebd1ec9-9a78-4429-8f53-5cf870a812d1/v2.0') ALLOWED_OIDC_ISSUERS = ('https://my.custom.oidc.issuer/', 'https://another.custom/oidc/issuer') );
COMMENT = 'string_literal'Spécifie une description de la politique.
Exigences en matière de contrôle d’accès¶
Un rôle utilisé pour exécuter cette opération doit au minimum disposer des privilèges suivants :
Privilège |
Objet |
Remarques |
|---|---|---|
CREATE AUTHENTICATION POLICY |
Schéma |
|
OWNERSHIP |
Politique d’authentification |
|
Le privilège USAGE relatif à la base de données et au schéma parents est exigé pour effectuer des opérations sur tout objet d’un schéma. Notez qu’un rôle doté d’un privilège quelconque sur un schéma permet à ce rôle de résoudre le schéma. Par exemple, un rôle doté du privilège CREATE sur un schéma peut créer des objets sur ce schéma sans également avoir le privilège USAGE attribué sur ce schéma.
Pour obtenir des instructions sur la création d’un rôle personnalisé avec un ensemble spécifique de privilèges, voir Création de rôles personnalisés.
Pour des informations générales sur les rôles et les privilèges accordés pour effectuer des actions SQL sur des objets sécurisables, voir Aperçu du contrôle d’accès.
Notes sur l’utilisation¶
Après avoir créé une politique d’authentification, vous devez utiliser la commande ALTER ACCOUNT ou ALTER USER pour la définir sur un compte ou un utilisateur avant que Snowflake n’applique la politique.
Si vous souhaitez mettre à jour une politique d’authentification existante et que vous avez besoin de voir la définition de la politique, exécutez la commande DESCRIBE AUTHENTICATION POLICY ou la fonction GET_DDL.
The OR REPLACE and IF NOT EXISTS clauses are mutually exclusive. They can’t both be used in the same statement.
Les instructions CREATE OR REPLACE <objet> sont atomiques. En d’autres termes, lorsqu’un objet est remplacé, l’ancien objet est supprimé et le nouvel objet est créé dans une seule transaction.
Examples¶
Créez une politique d’authentification nommée restrict_client_types_policy qui n’autorise l’accès que via Snowsight ou Classic Console :
CREATE AUTHENTICATION POLICY restrict_client_types_policy
CLIENT_TYPES = ('SNOWFLAKE_UI')
COMMENT = 'Auth policy that only allows access through the web interface';
Paramétrez l’authentification multifactorielle et mettez à jour la liste des clients :
CREATE OR ALTER AUTHENTICATION POLICY restrict_client_types_policy
MFA_ENROLLMENT = REQUIRED
CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI');
Créez une politique d’authentification qui inclut une politique client. La politique client définit la version minimale de deux clients de pilotes spécifiques :
CREATE AUTHENTICATION POLICY two_driver_policy
CLIENT_TYPES = ('DRIVERS')
CLIENT_POLICY = (
GO_DRIVER = (MINIMUM_VERSION = '1.14.1'),
JDBC_DRIVER = (MINIMUM_VERSION = '3.25.0')
)
COMMENT = 'JDBC and Go Driver minimum versions';
La tentative suivante de création d’une politique d’authentification échoue car le paramètre CLIENT_POLICY spécifie les pilotes qui ne sont pas autorisés par le paramètre CLIENT_TYPES :
CREATE AUTHENTICATION POLICY go_driver_policy_test
CLIENT_TYPES = ('SNOWFLAKE_UI', 'SNOWFLAKE_CLI')
CLIENT_POLICY = (GO_DRIVER = (MINIMUM_VERSION = '1.14.1'));
004800 (22023): Authentication policy can not contain CLIENT_POLICY of 'GO_DRIVER' without including 'DRIVERS' in CLIENT_TYPES.
Pour plus d’exemples, voir Politiques d’authentification.