Installation et configuration du connecteur via des commandes SQL¶
Snowflake Connector pour ServiceNow® V2 est soumis aux Conditions de Snowflake Connector.
Cette rubrique décrit comment utiliser des commandes SQL pour installer et configurer le connecteur. Elle suppose que vous avez déjà effectué les procédures décrites dans Préparation de votre instance ServiceNow®.
Dans ce chapitre :
Installation de l”Snowflake Connector for ServiceNow®V2¶
La procédure suivante décrit comment installer le connecteur :
Connectez-vous à Snowsight en tant qu’utilisateur ayant le rôle ACCOUNTADMIN.
Dans le menu de navigation, sélectionnez Data Products » Marketplace.
Recherchez le Snowflake Connector for ServiceNow®V2, puis sélectionnez la vignette du connecteur.
Dans la page Snowflake Connector for ServiceNow®V2, sélectionnez Get.
Une boîte de dialogue s’affiche pour lancer la partie initiale du processus d’installation.
Dans la boîte de dialogue, configurez les éléments suivants :
Dans le champ Application name saisissez le nom de la base de données à utiliser comme base de données pour l’instance de connecteur. Cette base de données est créée automatiquement pour vous.
Dans le champ Warehouse used for installation sélectionnez l’entrepôt que vous souhaitez utiliser pour installer le connecteur.
Note
Il ne s’agit pas du même entrepôt que celui utilisé par le connecteur pour synchroniser les données depuis ServiceNow®. Dans une étape ultérieure, vous créerez un entrepôt distinct à cette fin.
Sélectionnez Get.
Une boîte de dialogue apparaît avec la notification :
Installing App After installation, an email will be sent to <e-mail_utilisateur>
. Pour poursuivre la configuration à l’aide de SQL, fermez la boîte de dialogue et accédez à Worksheets.
Configuration de OAuth¶
Note
Si vous prévoyez d’utiliser l’authentification de base au lieu de OAuth, vous pouvez ignorer cette section et continuer vers Création d’un objet secret
Vous pouvez configurer Snowflake Connector for ServiceNow®V2 afin qu’il utilise OAuth pour s’authentifier auprès de l’instance ServiceNow® :
Dans ServiceNow, vous devez configurer l’instance pour qu’elle prenne en charge l’utilisation de OAuth avec le flux d’accord de code.
Dans le Snowflake Connector for ServiceNow®V2 :
Le connecteur utilise une intégration de sécurité avec
TYPE = API_AUTHENTICATION
pour connecter Snowflake à l’instance ServiceNow®.L’intégration de sécurité spécifie l’ID de client OAuth ServiceNow, le secret de client et l’URL de point de terminaison pour l’authentification auprès de l’instance ServiceNow®.
Le connecteur utilise un objet secret Snowflake pour gérer les informations sensibles, y compris les informations d’authentification.
Dans le cas de l’utilisation de OAuth pour l’authentification, le connecteur stocke le jeton d’actualisation OAuth ServiceNow®, l’heure d’expiration du jeton d’actualisation et le nom de l’intégration de sécurité dans l’objet secret Snowflake.
Pour configurer le Snowflake Connector for ServiceNow®V2 de sorte à utiliser OAuth, procédez comme suit :
Configurez votre instance ServiceNow® de sorte à utiliser OAuth avec le flux d’octroi de code.
Si votre instance ServiceNow® utilise déjà le flux d’octroi de code OAuth et si vous souhaitez utiliser cette instance avec Snowflake Connector for ServiceNow®V2, notez l’ID de client, le secret de client et l’URL de point de terminaison qui correspond au jeton OAuth.
Pour plus d’informations, voir Gérer les jetons OAuth. Après avoir pris note de ces informations, créez une intégration de sécurité à l’étape suivante.
Si vous souhaitez utiliser une instance ServiceNow® différente, accédez à l’instance ou créez-la et configurez-la pour qu’elle utilise OAuth avec le flux d’octroi de code comme indiqué dans Configurer OAuth et Créer un point de terminaison pour l’accès des clients à l’instance.
Créez un registre d’applications dans ServiceNow® et utilisez-le pour configurer le connecteur.
Connectez-vous à votre instance ServiceNow®, puis sélectionnez Homepage.
Recherchez OAuth, puis sélectionnez Application Registry.
Sélectionnez New, puis sélectionnez Create an OAuth API endpoint for external clients.
Une page de configuration du registre d’applications s’affiche, comme le montre l’image suivante :
Dans ServiceNow, entrez un nom pour le registre d’applications OAuth dans le champ Name.
Si nécessaire, dans ServiceNow, mettez à jour les valeurs des champs Refresh Token Lifespan et Access Token Lifespan.
Snowflake recommande de fixer la durée de vie du jeton d’accès à au moins 600 secondes.
Pour la durée de vie du jeton d’actualisation, indiquez une valeur de 7776000 (90 jours).
Dans ServiceNow, sélectionnez Submit.
Le registre d’applications OAuth apparaît dans la liste des registres d’applications.
Dans ServiceNow, sélectionnez le registre d’applications que vous venez de créer.
Notez que ServiceNow® a généré des valeurs pour les champs Client ID et Client Secret. Vous utiliserez ces valeurs dans la section suivante lors de la création d’une intégration de sécurité.
Génération du jeton d’actualisation OAuth¶
Pour générer le jeton d’actualisation OAuth :
Assurez-vous d’avoir effectué les tâches décrites dans Installation de l”Snowflake Connector for ServiceNow®V2.
Envoyez une requête HTTP au point de terminaison
/oauth_token.do
de votre instance ServiceNow®, comme expliqué dans Exemple REST OAuth dans la documentation ServiceNow®.Par exemple, si vous utilisez curl pour envoyer la requête HTTP :
curl -d "grant_type=password" --data-urlencode "client_id=<client_id>" --data-urlencode "client_secret=<client_secret>" --data-urlencode "username=<username>" --data-urlencode "password=<password>" -X POST https://<instance_name>.service-now.com/oauth_token.do
Where
instance_name
Spécifie le nom de votre instance ServiceNow®.
client_id
etclient_secret
Spécifiez les valeurs que vous avez obtenues lors de la configuration du point de terminaison ServiceNow®.
username
etpassword
Spécifiez les identifiants de connexion de votre instance ServiceNow®.
Note
L’exemple ci-dessus utilise l’indicateur de ligne de commande
data-urlencode
dans curl pour encoder en URL le secret de client, le nom d’utilisateur et le mot de passe dans la requête HTTP envoyée à ServiceNow®.Si vous utilisez un autre outil pour envoyer la requête HTTP, assurez-vous que vous encodez ces valeurs en URL dans la requête.
Le corps de la réponse HTTP contient un objet JSON. Récupérer le jeton d’actualisation du champ
refresh_token
de cet objet :{"access_token":"abcd1234","refresh_token":"cdef567","scope":"useraccount","token_type":"Bearer","expires_in":1799}
Création d’objets essentiels¶
Création d’une intégration de sécurité (facultatif)¶
Une intégration de sécurité est un objet Snowflake qui fournit une interface entre Snowflake et un service OAuth 2.0 tiers.
Utilisez la commande CREATE SECURITY INTEGRATION pour créer une intégration de sécurité comme indiqué dans l’exemple suivant :
CREATE SECURITY INTEGRATION <name>
TYPE = API_AUTHENTICATION
AUTH_TYPE = OAUTH2
OAUTH_CLIENT_AUTH_METHOD = CLIENT_SECRET_POST
OAUTH_CLIENT_ID = '<client_id>'
OAUTH_CLIENT_SECRET = '<client_secret>'
OAUTH_TOKEN_ENDPOINT = 'https://<my_instance>.service-now.com/oauth_token.do'
ENABLED = TRUE;
Où :
name
Spécifie le nom de l’intégration de sécurité.
client_id
Spécifie la valeur du champ Client ID que vous avez obtenue auprès de ServiceNow® à la section précédente.
client_secret
Spécifie la valeur du champ Client Secret que vous avez obtenue auprès de ServiceNow® à la section précédente.
my_instance
Spécifie le nom de votre instance ServiceNow®. Il s’agit de la première partie du nom d’hôte de votre instance ServiceNow®. Par exemple, si l’URL de votre instance ServiceNow® est :
https://myinstance.service-now.comLe nom de votre instance serait
myinstance
.
Création d’un objet secret¶
Créez l’objet secret Snowflake que le Snowflake Connector for ServiceNow®V2 utilise pour l’authentification.
Snowflake recommande de stocker l’objet secret dans une base de données et un schéma dédiés. Notez que vous pouvez choisir n’importe quel rôle pour gérer le secret, et que vous pouvez choisir n’importe quelle base de données et n’importe quel schéma pour stocker le secret.
Pour créer un rôle personnalisé afin de gérer le secret, utilisez la commande CREATE ROLE. Pour plus d’informations sur les privilèges que vous pouvez accorder à un rôle, voir Privilèges de contrôle d’accès.
Les sections suivantes expliquent comment créer un objet secret stocké dans une base de données et un schéma distincts et géré par un rôle personnalisé.
Création d’un schéma pour les objets secrets¶
Tout d’abord, créez une base de données et un schéma pour stocker l’objet secret en exécutant les commandes CREATE DATABASE et CREATE SCHEMA. Les noms du schéma et de la base de données doivent être des identificateurs d’objets valides.
Par exemple, pour créer la base de données secretsdb
et le schéma apiauth
pour l’objet secret, exécutez les commandes suivantes :
USE ROLE accountadmin; CREATE DATABASE secretsdb; CREATE SCHEMA apiauth;
Création d’un rôle personnalisé pour gérer le secret (facultatif)¶
Ensuite, créez un rôle personnalisé pour gérer le secret (en supposant que vous ne voulez pas utiliser un rôle existant) et accordez au rôle les privilèges nécessaires pour créer le secret.
En utilisant le rôle système USERADMIN, exécutez la commande CREATE ROLE pour créer un rôle personnalisé afin de gérer le secret. Par exemple, pour créer le rôle personnalisé
secretadmin
pour la gestion du secret, exécutez les commandes suivantes :USE ROLE useradmin; CREATE ROLE secretadmin;
En utilisant le rôle système SECURITYADMIN, exécutez la commande GRANT <privilèges> TO ROLE pour accorder les privilèges suivants au rôle personnalisé :
USAGE sur la base de données que vous avez créée pour le secret
USAGE et CREATE SECRET sur le schéma que vous avez créé pour le secret
USAGE sur l’intégration de sécurité que vous avez créée précédemment
Par exemple :
USE ROLE securityadmin; GRANT USAGE ON DATABASE secretsdb TO ROLE secretadmin; GRANT USAGE ON SCHEMA secretsdb.apiauth TO role secretadmin; GRANT CREATE SECRET ON SCHEMA secretsdb.apiauth TO role secretadmin; GRANT USAGE ON INTEGRATION servicenow_oauth TO role secretadmin;
À l’aide du rôle système USERADMIN, exécutez la commande GRANT <privilèges> TO ROLE pour accorder le rôle personnalisé à l’utilisateur qui crée le secret. Par exemple, pour accorder le rôle à l’utilisateur
servicenow_secret_owner
, exécutez les commandes suivantes :USE ROLE useradmin; GRANT ROLE secretadmin TO user servicenow_secret_owner;
Création d’un secret¶
Ensuite, créez un secret pour permettre à Snowflake de s’authentifier auprès de l’instance ServiceNow® en utilisant OAuth avec le flux d’octroi de code.
Note
Si vous prévoyez d’utiliser l’authentification de base au lieu de OAuth, consultez la note ci-dessous.
Pour créer un objet secret, exécutez la commande CREATE SECRET avec les paramètres suivants :
Définissez
TYPE
surOAUTH2
.Définissez
OAUTH_REFRESH_TOKEN
comme étant le jeton d’actualisation OAuth que vous avez récupéré dans Génération du jeton d’actualisation OAuth.Définissez
OAUTH_REFRESH_TOKEN_EXPIRY_TIME
sur l’horodatage d’expiration du jeton d’actualisation dans le fuseau horaire UTC. Vous pouvez le calculer en ajoutant la durée de vie du jeton de ServiceNow® à la date d’émission du jeton. Par défaut, le jeton expire dans 100 jours.Attribuez à
API_AUTHENTICATION
le nom de l’intégration de sécurité que vous avez créée dans Création d’objets essentiels :Par exemple, pour créer un secret nommé
service_now_creds_oauth_code
qui utilise l’intégration de sécurité nomméeservicenow_oauth
, exécutez les commandes suivantes :USE ROLE secretadmin; USE SCHEMA secretsdb.apiauth; CREATE SECRET servicenow_creds_oauth_code TYPE = OAUTH2 OAUTH_REFRESH_TOKEN = '34n;vods4nQsdg09wee4qnfvadH' OAUTH_REFRESH_TOKEN_EXPIRY_TIME = '2022-01-06 20:00:00' API_AUTHENTICATION = servicenow_oauth;
Pour modifier les propriétés d’un secret existant (par exemple, pour mettre à jour le jeton d’actualisation OAuth), utilisez la commande ALTER SECRET.
Note
Si vous prévoyez d’utiliser l’authentification de base (plutôt que OAuth), exécutez la commande CREATE SECRET pour créer un secret avec
TYPE
défini surPASSWORD
. DéfinissezUSERNAME
etPASSWORD
comme le nom d’utilisateur et le mot de passe de l’utilisateur ServiceNow® que vous prévoyez d’utiliser pour vous authentifier auprès de l’instance ServiceNow®. Par exemple :USE ROLE secretadmin; USE SCHEMA secretsdb.apiauth; CREATE SECRET servicenow_creds_pw TYPE = PASSWORD USERNAME = 'jsmith1' PASSWORD = 'W3dr@fg*7B1c4j';
Si l’authentification multifactorielle est activée pour cet utilisateur, vous devez fournir le jeton MFA ainsi que le mot de passe comme décrit dans API REST dans la documentation ServiceNow®.
Création d’un entrepôt¶
Snowflake recommande de créer un entrepôt dédié au connecteur. Un entrepôt dédié permet une meilleure gestion des coûts et un meilleur suivi des ressources. Pour faciliter le suivi des ressources, vous pouvez éventuellement ajouter une ou plusieurs balises à l’entrepôt dédié.
Pour l’entrepôt du connecteur, Snowflake recommande d’utiliser un entrepôt de grande taille.
Pour créer un entrepôt de grande taille nommé servicenow_conn_warehouse
, exécutez la commande suivante :
USE ROLE accountadmin;
CREATE WAREHOUSE servicenow_conn_warehouse WAREHOUSE_SIZE = LARGE;
Attention
Assurez-vous que l’entrepôt est en mesure d’exécuter une requête pendant au moins 3 heures. Cela peut être affecté par une valeur de paramètre qui peut être définie à la fois sur l’entrepôt utilisé par le connecteur et sur le compte (la valeur du compte est prioritaire). Pour vérifier les valeurs actuelles, exécutez :
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' FOR ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' FOR WAREHOUSE <connector_warehouse>;
Si les deux valeurs sont au moins égales à 10800
(c’est-à-dire, 3 heures), aucune modification n’est nécessaire. Sinon, selon les besoins, exécutez :
ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS = 10800;
ALTER WAREHOUSE <connector_warehouse> SET STATEMENT_TIMEOUT_IN_SECONDS = 10800;
Si le délai d’expiration approprié n’est pas fourni, cela entraînera des échecs d’ingestion de données.
Création d’une base de données et d’un schéma pour les données ServiceNow®¶
Ensuite, créez une base de données et un schéma pour les données ServiceNow®. Snowflake Connector for ServiceNow®V2 ingère les données ServiceNow® dans cette base de données et ce schéma.
Lors de la création de la base de données et du schéma, notez les points suivants :
Les noms du schéma et de la base de données doivent être des identificateurs d’objets valides.
Pour contrôler l’accès aux données ServiceNow® ingérées dans Snowflake, vous pouvez accorder les privilèges sur le schéma aux rôles qui devraient être autorisés à accéder aux données.
Pour créer la base de données et le schéma, exécutez les commandes CREATE DATABASE et CREATE SCHEMA.
Par exemple, pour créer la base de données dest_db
et le schéma dest_schema
pour les données ServiceNow®, exécutez les commandes suivantes :
USE ROLE accountadmin;
CREATE DATABASE dest_db;
CREATE SCHEMA dest_schema;
Note
Si vous réinstallez le connecteur, vous pouvez réutiliser le schéma que vous avez créé pour l’installation précédente du connecteur. Ceci est possible si l’installation précédente du connecteur a déjà chargé des données et que vous souhaitez continuer à charger des données dans les mêmes tables.
Pour continuer à charger des données, ne modifiez pas le schéma avant de réinstaller le connecteur. Ne modifiez pas les définitions des tables créées par l’installation précédente du connecteur.
Le connecteur exporte périodiquement la configuration et l’état du connecteur vers une table __CONNECTOR_STATE_EXPORT
du schéma, qui peut être utilisée ultérieurement pour récupérer la configuration du connecteur lors d’une réinstallation. Par ailleurs, si la table d’exportation n’est pas présente ou si elle a été supprimée manuellement, vous pouvez toujours appeler ultérieurement la procédure stockée ENABLE_TABLES pour réactiver les tables précédemment ingérées. La procédure stockée vérifie que tous les objets requis existent déjà et ne tente pas de les recréer. Il n’y a donc aucun risque de perdre des données déjà ingérées.
Création d’une règle de réseau pour communiquer avec l’instance ServiceNow®¶
Ensuite, pour autoriser le trafic sortant de votre compte vers votre instance ServiceNow®, créez une règle de réseau. Exécutez la commande CREATE NETWORK RULE avec la syntaxe suivante :
CREATE NETWORK RULE <name>
MODE = 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ('<servicenow_instance_name>.service-now.com');
Où :
name
Spécifie le nom de la règle de réseau. Le nom doit être un identificateur d’objet valide.
VALUE_LIST = ('servicenow_instance_name.service-now.com')
Spécifie la liste des instances ServiceNow® autorisées auxquelles une requête peut être envoyée.
Note
Si vous avez créé le secret avec un rôle personnalisé, vous devez en outre accorder dessus le privilège USAGE à ACCOUNTADMIN
avant de créer la règle de réseau :
USE ROLE secretadmin;
GRANT USAGE ON SECRET secretsdb.apiauth.<secret_name> TO ROLE ACCOUNTADMIN;
Création d’une intégration d’accès externe pour communiquer avec l’instance ServiceNow®¶
Ensuite, créez une intégration d’accès externe pour communiquer avec l’instance ServiceNow®. Exécutez la commande CREATE EXTERNAL ACCESS INTEGRATION avec la syntaxe suivante :
CREATE EXTERNAL ACCESS INTEGRATION <integration_name>
ALLOWED_NETWORK_RULES = (<network_rule_name>)
ALLOWED_AUTHENTICATION_SECRETS = (<secret_name>)
ENABLED = TRUE;
Où :
integration_name
Spécifie le nom de l’intégration d’accès externe. Le nom doit être un identificateur d’objet valide. Le nom doit être unique parmi les intégrations API de votre compte.
ALLOWED_NETWORK_RULES = (network_rule_name)
Spécifie la règle de réseau permettant l’accès à votre instance ServiceNow®. Cela limite l’utilisation de cette intégration aux instances avec les URLs spécifiées dans la règle de réseau.
Définissez cela sur le nom de la règle de réseau que vous avez créée dans Création d’une règle de réseau pour communiquer avec l’instance ServiceNow®.
ALLOWED_AUTHENTICATION_SECRETS = (secret_name)
Spécifie la liste des noms des secrets dont l’utilisation est autorisée dans le cadre de l’intégration d’API.
Indiquez le nom de l’objet secret que vous avez créé dans Création d’un objet secret.
ENABLED = TRUE
Spécifie si cette intégration API est activée ou désactivée. Si l’intégration API est désactivée, aucune fonction externe qui en dépend ne fonctionne.
TRUE
Permet l’exécution de l’intégration en fonction des paramètres spécifiés dans l’intégration de définition.
FALSE
Suspend l’intégration pour la maintenance. Toute intégration entre Snowflake et un service tiers échoue.
Par exemple, pour créer l’intégration d’accès externe nommée servicenow_external_access_integration
, exécutez la commande suivante :
USE ROLE accountadmin; CREATE EXTERNAL ACCESS INTEGRATION servicenow_external_access_integration ALLOWED_NETWORK_RULES = (secretsdb.apiauth.servicenow_network_rule) ALLOWED_AUTHENTICATION_SECRETS = (secretsdb.apiauth.servicenow_creds_pw) ENABLED = TRUE
Configuration de la journalisation du connecteur¶
Le Snowflake Connector for ServiceNow®V2 utilise des tables d’événements pour stocker les journaux d’erreurs du connecteur. Pour mettre en place une table d’événement, suivez le guide Configuration d’une table d’événements.
Important
Il est vivement recommandé d’activer le partage de journaux. Cela vous sera d’une aide précieuse en cas de dépannage dans des cas difficiles.
Configuration du connecteur installé¶
Pour configurer le connecteur :
Créez une base de données pour l’instance de connecteur en utilisant Snowsight. Pour plus d’informations sur la création de la base de données, consultez Installation et configuration du connecteur avec Snowsight.
Naviguez jusqu’à la feuille de calcul SQL.
Connectez-vous en tant qu’utilisateur ayant le rôle ACCOUNTADMIN. Par exemple :
USE ROLE ACCOUNTADMIN;
Accordez tous les privilèges requis au connecteur à la base de données qui sert d’instance du connecteur.
EXECUTE TASK sur le compte
EXECUTE MANAGED TASK sur le compte
USAGE sur la base de données que vous avez créée pour les données ServiceNow®
USAGE, CREATE TABLE et CREATE VIEW sur le schéma que vous avez créé pour les données ServiceNow®
USAGE sur l’intégration d’accès externe que vous avez créée pour ServiceNow®
USAGE sur la base de données que vous avez créée pour le secret
READ sur le secret que vous avez créé
Par exemple, pour accorder les privilèges suivants au connecteur nommé
my_connector_servicenow
:EXECUTE TASK sur le compte
EXECUTE MANAGED TASK sur le compte
USAGE sur l’entrepôt
servicenow_conn_warehouse
USAGE sur la base de données
dest_db
USAGE, CREATE TABLE et CREATE VIEW sur le schéma
dest_db.dest_schema
USAGE sur l’intégration
servicenow_external_access_integration
USAGE sur la base de données
secretsdb
USAGE sur le schéma
secretsdb.apiauth
READ sur le secret
secretsdb.apiauth.servicenow_creds_oauth_code secret
Exécutez les commandes suivantes :
USE ROLE accountadmin; GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION my_connector_servicenow; GRANT EXECUTE MANAGED TASK ON ACCOUNT TO APPLICATION my_connector_servicenow; GRANT USAGE ON WAREHOUSE servicenow_conn_warehouse TO APPLICATION my_connector_servicenow; GRANT USAGE ON DATABASE dest_db TO APPLICATION my_connector_servicenow; GRANT USAGE ON SCHEMA dest_db.dest_schema TO APPLICATION my_connector_servicenow; GRANT CREATE TABLE ON SCHEMA dest_db.dest_schema TO APPLICATION my_connector_servicenow; GRANT CREATE VIEW ON SCHEMA dest_db.dest_schema TO APPLICATION my_connector_servicenow; GRANT USAGE ON INTEGRATION servicenow_external_access_integration TO APPLICATION my_connector_servicenow; GRANT USAGE ON DATABASE secretsdb TO APPLICATION my_connector_servicenow; GRANT USAGE ON SCHEMA secretsdb.apiauth TO APPLICATION my_connector_servicenow; GRANT READ ON SECRET secretsdb.apiauth.servicenow_creds_oauth_code TO APPLICATION my_connector_servicenow;
Transférer la possession des tables et des vues dans le schéma de destination (facultatif)
Si le connecteur a été réinstallé et que le schéma de destination précédent est réutilisé, la possession de toutes les tables et vues du schéma de destination doit être transférée au connecteur. Le connecteur nécessite un privilège de possession pour gérer les droits sur les objets du schéma et pour recréer les vues aplaties lorsque le schéma de la table ingérée est modifié.
Pour transférer la possession, appelez la fonction
SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION
.USE ROLE accountadmin; CALL SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION(<connector_app>, true, <destination_database>, <destination_schema>);
SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION
est une fonction système fournie par Snowflake qui permet de transférer à l’application la possession des tables et des vues d’une base de données ou d’un schéma spécifié. Seule la possession des tables et des vues normales est transférée, c’est-à-dire que les tables dynamiques, les tables externes, les vues matérialisées, etc., ne changeront pas de propriétaire.Cette fonction présente la signature suivante :
SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION(<to_app>, <should_copy_grants>, <from_database>, <from_schema>)
Où :
to_app
Spécifie le nom de l’application à laquelle la possession des objets doit être transférée.
should_copy_grants
Si
TRUE
, copiez les droits existants ; sinon, révoquez-les. La copie des droits nécessite l’autorisationMANAGE GRANTS
sur l’appelant.from_database
Nom de la base de données contenant les objets qui doivent changer de propriétaire.
from_schema
(Facultatif) Nom du schéma contenant les objets qui doivent changer de propriétaire. Si aucun schéma n’est spécifié, la possession est transférée sur les tables et les vues de tous les schémas de la base de données fournie. Les objets des schémas gérés sont omis lors du transfert de possession.
Pour exécuter la fonction, l’appelant doit remplir l’une des conditions suivantes :
Disposer de l’autorisation
MANAGE GRANTS
(par exemple, du rôle ACCOUNTADMIN ou SECURITYADMIN), ouContenir le rôle de propriétaire de l’instance d’application et le rôle de propriétaire de tous les objets afin de transférer la possession. Les objets sans propriétaire sont omis par la fonction.
Par exemple, pour transférer la possession, le connecteur qui :
A été installé en tant qu’application nommée
my_connector_servicenow
Utilise le schéma nommé
dest_db.dest_schema
pour les données ServiceNow® dans Snowflake
Exécutez la commande suivante :
USE ROLE accountadmin; CALL SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION('my_connector_servicenow', true, 'dest_db', 'dest_schema');
Si nécessaire, accordez le rôle d’application
DATA_READER
au rôle précédemment propriétaire des données afin d’éviter toute perturbation des pipelines existants qui utilisent les données :GRANT APPLICATION ROLE <connector_app>.DATA_READER TO ROLE <previous_data_owner_role>;
Notez que le rôle d’application
DATA_READER
n’aura aucun droit sur les tables et les vues du schéma de destination tant que la procédureCONFIGURE_CONNECTOR
n’aura pas été exécutée.Exécutez la commande USE DATABASE pour utiliser la base de données pour le connecteur. Par exemple :
USE DATABASE my_connector_servicenow;
Configurez le connecteur en utilisant la commande CALL pour appeler la procédure stockée nommée
CONFIGURE_CONNECTOR
:CALL CONFIGURE_CONNECTOR({ 'warehouse': '<warehouse_name>', 'destination_database': '<dest_db>', 'destination_schema': '<dest_schema>' })
Où :
warehouse_name
Spécifie le nom de l’entrepôt pour le connecteur.
Le nom de l’entrepôt doit être un identificateur d’objet valide.
dest_db
Spécifie le nom de la base de données des données ServiceNow® dans Snowflake (la base de données que vous avez précédemment créée).
Le nom de la base de données doit être un identificateur d’objet valide.
dest_schema
Spécifie le nom du schéma des données ServiceNow® dans Snowflake (le schéma que vous avez précédemment créé).
Le nom du schéma doit être un identificateur d’objet valide.
Par exemple, pour configurer le connecteur qui :
Utilise l’entrepôt
servicenow_conn_warehouse
.Utilise le schéma nommé
dest_db.dest_schema
pour les données ServiceNow® dans Snowflake
Exécutez la commande suivante :
CALL CONFIGURE_CONNECTOR({ 'warehouse': 'servicenow_conn_warehouse', 'destination_database': 'dest_db', 'destination_schema': 'dest_schema' });
Si le connecteur a été correctement démarré, cette procédure stockée renvoie la réponse suivante :
{ "responseCode": "OK", "message": "Connector successfully configured.", }
Note
Une fois le connecteur démarré, il n’est pas possible de renommer l’entrepôt, la base de données de destination ni le schéma de destination transmis pour le connecteur. Le connecteur les référence par leur nom. Par conséquent, toute tentative de suppression ou de modification du nom de ces objets coupe le connecteur et l’empêche de fonctionner.
Au lieu de renommer l’entrepôt, utilisez la procédure stockée UPDATE_WAREHOUSE pour modifier l’entrepôt utilisé par le connecteur.
Configurez la connexion à l’instance ServiceNow® en utilisant la commande CALL pour appeler la procédure stockée nommée
SET_CONNECTION_CONFIGURATION
:CALL SET_CONNECTION_CONFIGURATION({ 'service_now_url': '<servicenow_base_url>', 'secret': '<secret_name>', 'external_access_integration': '<external_access_integration_name>' })
Où :
servicenow_base_url
Spécifie l’URL de l’instance ServiceNow® que le connecteur doit utiliser. L’URL doit avoir le format suivant :
https://<servicenow_instance_name>.service-now.com
secret_name
Spécifie le nom complet de l’objet secret contenant les identifiants de connexion pour s’authentifier auprès de ServiceNow® (le secret que vous avez précédemment créé).
Vous devez spécifier le nom complet de l’objet secret au format suivant :
<database_name>.<schema_name>.<secret_name>
Les noms de la base de données, du schéma et du secret doivent être des identificateurs d’objets valides.
external_access_integration_name
Spécifie le nom de l”intégration d’accès externe pour ServiceNow® (l’intégration d’accès externe que vous avez précédemment créée).
Le nom de l’intégration doit être un identificateur d’objet valide.
Par exemple, pour configurer la connexion à une instance ServiceNow® qui :
Possède l’URL
https://myinstance.service-now.com
.Utilise le secret stocké dans
secretsdb.apiauth.servicenow_creds_oauth_code
.Utilise l’intégration d’accès externe nommée
servicenow_external_access_integration
.
Exécutez la commande suivante :
CALL SET_CONNECTION_CONFIGURATION({ 'service_now_url': 'https://myinstance.service-now.com', 'secret': 'SECRETSDB.APIAUTH.SERVICENOW_CREDS_OAUTH_CODE', 'external_access_integration': 'SERVICENOW_API_INTEGRATION' });
Si la connexion a été correctement configurée, cette procédure stockée renvoie la réponse suivante :
{ "responseCode": "OK", "message": "Test request to ServiceNow® succeeded.", }
Note
Une fois le connecteur configuré, il n’est pas possible de modifier le nom du secret ni de l’intégration d’accès externe transmis. Le connecteur les référence par leur nom. Par conséquent, toute tentative de suppression ou de modification du nom de ces objets coupe le connecteur et l’empêche de fonctionner.
Finalisez la configuration du connecteur en utilisant la commande CALL pour appeler la procédure stockée nommée
FINALIZE_CONNECTOR_CONFIGURATION
:CALL FINALIZE_CONNECTOR_CONFIGURATION({ 'journal_table': '<name_of_journal_table>', 'table_name': '<name_of_audited_table>', 'sys_id': '<sys_id_of_audited_entry>' })
Où :
name_of_journal_table
Spécifie le nom de la table qui contient des informations sur les enregistrements supprimés. Reportez-vous à Préparation de votre instance ServiceNow® pour plus d’informations.
Notez que les informations sur les enregistrements supprimés ne sont disponibles que pour les tables que vous avez configurées pour propager les enregistrements supprimés.
Pour empêcher la propagation des enregistrements supprimés, spécifiez
null
pour cet argument.name_of_audited_table
(facultatif) Spécifie le nom de la table auditée qui doit être présente dans la table de journal et à laquelle le connecteur doit avoir accès. Lors de la validation de l’accès à la table de journal, le connecteur recherche les entrées d’audit liées à cette table. Fournissez cette option lorsqu’une requête auprès de ServiceNow® aboutit, mais ne donne aucun résultat, faisant échouer la procédure. Assurez-vous que l’utilisateur ServiceNow® du connecteur a accès à toutes les entrées de la table spécifiée.
Cette option ne peut pas être utilisée avec le paramètre
sys_id
.sys_id_of_audited_entry
(facultatif) Spécifie la valeur
sys_id
de l’entrée d’une table auditée qui doit être présente dans la table de journal et à laquelle le connecteur doit avoir accès. Lors de la validation de l’accès à la table de journal, le connecteur recherche les entrées d’audit liées à cette valeursys_id
. Fournissez cette option lorsqu’une requête auprès de ServiceNow® aboutit, mais ne donne aucun résultat, faisant échouer la procédure. Assurez-vous que l’utilisateur ServiceNow® du connecteur a accès à l’entrée spécifiée.Cette option ne peut pas être utilisée avec le paramètre
table_name
.
Si le connecteur a été correctement démarré, cette procédure stockée renvoie la réponse suivante :
{ "responseCode": "OK", }
Lors de la finalisation de la configuration du connecteur, ce dernier tentera de vérifier si un état de connecteur précédemment exporté est présent dans le schéma de destination. Si la table
__CONNECTOR_STATE_EXPORT
est présente et accessible par le connecteur, ce dernier tentera d’importer l’état. Lorsque l’importation se termine correctement, la table d’exportation est supprimée. Si une erreur se produit lors de l’importation, il est possible de réexécuter la procédureFINALIZE_CONNECTOR_CONFIGURATION
après avoir corrigé l’erreur. Si vous ne souhaitez pas importer l’état ou si vous ne voulez pas corriger l’erreur d’importation, transférez la possession de la table depuis le connecteur et supprimez la table.
La base de données nouvellement créée est une instance du connecteur et contient les éléments suivants :
Procédures stockées que vous utilisez pour configurer le connecteur. Pour plus d’informations, voir Configuration de l’ingestion de données à l’aide d’instructions SQL.
Vues contenant les messages enregistrés et les statistiques pour le connecteur. Pour plus d’informations, voir À propos de la surveillance du connecteur.
Rôles d’application du connecteur¶
En tant qu’application native, Snowflake Connector for ServiceNow®V2 définit des rôles d’application. Ils peuvent être consultés à la section Contrôle d’accès basé sur les rôles des connecteurs.
Prochaines étapes¶
Après avoir installé et configuré le connecteur, effectuez les étapes décrites dans Configuration de l’ingestion de données pour vos données ServiceNow®.