SQL コマンドを使用したコネクタのインストールおよび構成¶
Snowflake Connector for ServiceNow® は、 Snowflake Connector Terms の対象となります。
このトピックでは、 SQL コマンドを使用してコネクタをインストールおよび構成する方法について説明します。 ServiceNow®インスタンスの準備 で説明されているプロシージャをすでに実行していることを前提としています。
このトピックの内容:
Snowflake Connector for ServiceNow® のインストール¶
次の手順では、コネクタをインストールする方法について説明します。
ACCOUNTADMIN ロールを持つユーザーとして Snowsight にサインインします。
ナビゲーションメニューで Data Products » Marketplace を選択します。
Snowflake Connector for ServiceNow® を検索し、コネクタのタイルを選択します。
Snowflake Connector for ServiceNow® のページで、 Get を選択します。
これにより、インストールプロセスの最初の部分を開始するために使用するダイアログが表示されます。
ダイアログで、次のように構成します。
Application name フィールドに、コネクタインスタンスのデータベースとして使用するデータベースの名前を入力します。このデータベースは自動的に作成されます。
Warehouse used for installation フィールドで、コネクタのインストールに使用するウェアハウスを選択します。
注釈
これは、コネクタが ServiceNow®からのデータを同期するために使用するウェアハウスとは異なります。後のステップで、この目的のために別のウェアハウスを作成します。
Get を選択します。
ダイアログが通知とともに表示されます:
Installing App After installation, an email will be sent to <user_email>
。これでダイアログを閉じることができます。SQL を使用して構成を続行するには、'Snowflake Connector for ServiceNow' がインストールされ、使用できるようになったことを示す電子メールを受信するまで待ち
、その後、 Worksheets に進みます。
OAuth の設定¶
注釈
OAuth の代わりに基本認証を使用する予定がある場合は、このセクションをスキップして シークレットオブジェクトの作成 に進みます。
Snowflake Connector for ServiceNow® を構成して、 ServiceNow®インスタンスへの認証に OAuth を使用するようにできます。サポートされている OAuth フローには2つあります。
クライアント認証情報の付与(推奨): Washington DC リリース 以降で利用可能。クライアント認証情報は、マシン間の統合に広く受け入れられている認証標準であり、手動でトークンを更新するメンテナンスは必要ありません。
認証コード付与フロー: この認証コードは、サポートされるすべての ServiceNow®リリースで利用可能ですが、この認証コードでは、 OAuth トークンの有効期限(通常は3か月ごと)前に手動で更新する必要があります。
クライアント認証情報付与フローによる OAuth の設定¶
ServiceNow®インスタンスへの認証にクライアント認証情報付与フローで OAuth を使用するように Snowflake Connector for ServiceNow® を構成するには、以下を実行します。
ServiceNow®では、 クライアント認証情報付与フロー で OAuth の使用をサポートするようにインスタンスを設定する必要があります。
Snowflake Connector for ServiceNow® 内:
コネクタは、
TYPE = API_AUTHENTICATION
とのセキュリティ統合を使用して、Snowflakeを ServiceNow®インスタンスに接続します。セキュリティ統合は、ServiceNow®インスタンスを認証するための ServiceNow® OAuth クライアント ID、クライアントシークレット、およびエンドポイント URL を指定します。
コネクタは、Snowflakeシークレットオブジェクトを使用して、認証情報などの機密情報を管理します。
認証に OAuth を使用する場合、コネクタは ServiceNow® OAuth スコープとセキュリティ統合名をSnowflakeシークレットオブジェクトに保存します。
ServiceNow® インスタンスがすでに OAuth クライアント認証情報付与フローを使用しており、そのインスタンスを Snowflake Connector for ServiceNow® で使用したい場合は、 OAuth トークンに対応するクライアント ID、クライアントシークレット、およびエンドポイント URL を確認してください。詳細については、 OAuth トークンを管理する をご参照ください。この情報を確認したら、 必要なオブジェクトの作成 に進みます。
クライアント認証情報付与フローで OAuth を使用する ServiceNow®インスタンスの構成¶
Set up OAuth に示すように、認証コード付与フローで OAuth を使用するようにインスタンスを構成します。
クライアントがインスタンス にアクセスするためのエンドポイントを作成し、それを使用してコネクタを構成します。
ServiceNow®インスタンスにログインし、 Homepage を選択します。
sys_properties.list を検索します。
テーブルで
glide.oauth.inbound.client.credential.grant_type.enabled
という名前のプロパティを検索し、それがtrue
に設定されていることを確認します。注釈
プロパティが存在しない場合は、それを作成します。 New ボタンをクリックし、新規プロパティの以下のフィールドを入力します。
Name を
glide.oauth.inbound.client.credential.grant_type.enabled
に設定します。Type を
true | false
に設定します。Value を
true
に設定します。
System OAuth を検索し、 Application Registry を選択します。
New を選択してから、 Create an OAuth API endpoint for external clients を選択します。
ServiceNow®で、 Name フィールドに OAuth アプリケーションレジストリの名前を入力します。
ServiceNow®で、 OAuth Application User フィールドでコネクタを認証するユーザーを選択します。ユーザーは ServiceNow®インスタンスの準備 にリストされている権限を持つ必要があります。
注釈
フォームに OAuth Application User フィールドがない場合は、画面左上の Additional actions メニューを開いてください。 Configure > Form builder メニューから選択します。フォームの
Default
表示にない OAuth Application User フィールドを追加します。フォームを Save してページを更新し、続行します。ServiceNow®で、 Submit を選択します。
OAuth アプリケーションレジストリがアプリケーションレジストリのリストに表示されます。
ServiceNow®で、先ほど作成したアプリケーションレジストリを選択します。
ServiceNow®が Client ID フィールドと Client Secret フィールドの値を生成したことに注意してください。これらの値は、 セキュリティ統合 を作成するときに使用します。
必須オブジェクトの作成¶
セキュリティ統合の作成(オプション)¶
注釈
OAuth の代わりに基本認証を使用する予定がある場合は、このセクションをスキップして シークレットオブジェクトの作成 に進みます。
セキュリティ統合は、Snowflakeとサードパーティ OAuth 2.0サービス間のインターフェイスを提供するSnowflakeオブジェクトです。
クライアント認証情報付与フローによる OAuth セキュリティ統合の作成¶
次の例に示すように、 CREATE SECURITY INTEGRATION コマンドを使用してセキュリティ統合を作成します。
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://<servicenow_instance>.service-now.com/oauth_token.do'
OAUTH_GRANT = 'CLIENT_CREDENTIALS'
OAUTH_ALLOWED_SCOPES = ('useraccount')
ENABLED = TRUE;
条件:
name
セキュリティ統合の名前を指定します。名前は、使用するアカウントの統合間において一意である必要があります。
client_id
ServiceNow® エンドポイントのセットアップ時に取得した Client ID フィールドの値を指定します。
client_secret
ServiceNow® エンドポイントのセットアップ時に取得した Client Secret フィールドの値を指定します。
servicenow_instance_name
ServiceNow®インスタンスの名前を指定します。これは ServiceNow®インスタンスのホスト名の最初の部分です。たとえば、 ServiceNow®インスタンスへの URL が次の場合です。
https://myinstance.service-now.comインスタンスの名前は
myinstance
になります。
シークレットオブジェクトの作成¶
Snowflake Connector for ServiceNow® が認証に使用するSnowflakeシークレットオブジェクトを作成します。
Snowflakeは、シークレットオブジェクトを専用のデータベースとスキーマに格納することをお勧めします。任意のロールを選択してシークレットを管理できること、また任意のデータベースとスキーマを選択してシークレットを格納できることに注意してください。
シークレットを管理するカスタムロールを作成するには、 CREATE ROLE コマンドを使用します。ロールに付与できる権限については、 アクセス制御権限 をご参照ください。
次のセクションでは、別のデータベースとスキーマに格納され、カスタムロールによって管理されるシークレットオブジェクトを作成する方法について説明します。
シークレットオブジェクトのスキーマの作成¶
まず、 CREATE DATABASE コマンドと CREATE SCHEMA コマンドを実行して、シークレットオブジェクトを格納するデータベースとスキーマを作成します。スキーマとデータベースの名前は、有効な オブジェクト識別子 である必要があります。
たとえば、シークレットオブジェクトのデータベース secretsdb
とスキーマ apiauth
を作成するには、次のコマンドを実行します。
USE ROLE accountadmin; CREATE DATABASE secretsdb; CREATE SCHEMA apiauth;
シークレットを管理するカスタムロールの作成(オプション)¶
次に、シークレットを管理するためのカスタムロールを作成し(既存のロールを使用しない場合)、シークレットの作成に必要な権限をロールに付与します。
USERADMIN システムロールを使用して CREATE ROLE コマンドを実行し、シークレットを管理するためのカスタムロールを作成します。たとえば、シークレットを管理するためのカスタムロール
secretadmin
を作成するには、次のコマンドを実行します。USE ROLE useradmin; CREATE ROLE secretadmin;
SECURITYADMIN システムロールを使用して GRANT <権限> TO ROLE コマンドを実行し、次の権限をカスタムロールに付与します。
シークレット用に作成したデータベース に対する USAGE
シークレット用に作成したスキーマ に対する USAGE および CREATE SECRET
例:
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;
(オプション) OAuth 認証コードでコネクタをセットアップする場合は、 事前に作成したセキュリティ統合 の USAGE 権限もカスタム・ロールに付与します。
例:
USE ROLE securityadmin; GRANT USAGE ON INTEGRATION servicenow_oauth TO role secretadmin;
USERADMIN システムロールを使用して GRANT <権限> TO ROLE コマンドを実行し、シークレットを作成するユーザーにカスタムロールを付与します。たとえば、ユーザー
servicenow_secret_owner
にロールを付与するには、次のコマンドを実行します。USE ROLE useradmin; GRANT ROLE secretadmin TO user servicenow_secret_owner;
シークレットの作成¶
次に、Snowflake が認証コード付与フローで OAuth を使用して ServiceNow ® インスタンスに認証できるようにシークレットを作成します。
注釈
OAuth の代わりに基本認証を使用する場合は、 以下の注意 を代わりにご参照ください。
OAuth クライアント認証情報付与フローのシークレットオブジェクトを作成するには、 CREATE SECRET コマンドを以下のパラメーターで実行します。
TYPE
をOAUTH2
に設定します。
API_AUTHENTICATION
を 必須オブジェクトの作成 で作成したセキュリティ統合の名前に設定します。
OAUTH_SCOPES
をuseraccount
に設定します。たとえば、
servicenow_oauth
という名前のセキュリティ統合を使用するservice_now_creds_oauth_code
という名前のシークレットを作成するには、次のコマンドを実行します。USE ROLE secretadmin; USE SCHEMA secretsdb.apiauth; CREATE SECRET servicenow_creds_oauth_code TYPE = OAUTH2 API_AUTHENTICATION = servicenow_oauth OAUTH_SCOPES=('useraccount');
OAuth 認証コード付与フロー用のシークレットオブジェクトを作成するには、 CREATE SECRET コマンドを以下のパラメーターで実行します。
TYPE
をOAUTH2
に設定します。
OAUTH_REFRESH_TOKEN
を OAuth リフレッシュトークンの生成 で取得した OAuth 更新トークンに設定します。
OAUTH_REFRESH_TOKEN_EXPIRY_TIME
を更新トークンの有効期限のタイムスタンプ(UTC タイムゾーン)に設定します。これは、ServiceNow®からトークンが発行された日付までのトークンの有効期間を追加することで計算できます。デフォルトでは、トークンは100日で期限切れになります。
API_AUTHENTICATION
を 必須オブジェクトの作成 で作成したセキュリティ統合の名前に設定します。たとえば、
servicenow_oauth
という名前のセキュリティ統合を使用するservice_now_creds_oauth_code
という名前のシークレットを作成するには、次のコマンドを実行します。USE ROLE secretadmin; USE SCHEMA secretsdb.apiauth; CREATE SECRET servicenow_creds_oauth_code TYPE = OAUTH2 OAUTH_REFRESH_TOKEN = 'cdef567' OAUTH_REFRESH_TOKEN_EXPIRY_TIME = '2022-01-06 20:00:00' API_AUTHENTICATION = servicenow_oauth;
既存のシークレットのプロパティを変更するには(例: OAuth リフレッシュトークンを更新する)、 ALTER SECRET コマンドを使用します。
注釈
基本認証(OAuth ではなく)を使用する場合は、 CREATE SECRET コマンドを実行して、
TYPE
をPASSWORD
に設定し、シークレットを作成します。USERNAME
とPASSWORD
を ServiceNow®インスタンスへの認証に使用する予定の ServiceNow®ユーザーのユーザー名とパスワードに設定します。例:USE ROLE secretadmin; USE SCHEMA secretsdb.apiauth; CREATE SECRET servicenow_creds_pw TYPE = PASSWORD USERNAME = 'jsmith1' PASSWORD = 'W3dr@fg*7B1c4j';
このユーザーに対して多要素認証が有効になっている場合は、 ServiceNow®ドキュメントの REST API で説明されているように、パスワードとともに MFA トークンを提供する必要があります。
ウェアハウスの作成¶
Snowflakeは、コネクタ専用の ウェアハウスを作成する ことをお勧めします。専用のウェアハウスにより、コスト管理とリソースの追跡が改善されます。リソースの追跡を容易にするために、必要に応じて専用ウェアハウスに 1 つまたは複数のタグを追加 できます。
コネクタウェアハウスの場合、SnowflakeはLサイズのウェアハウスを使用することをお勧めします。
servicenow_conn_warehouse
という名前のLサイズのウェアハウスを作成するには、次のコマンドを実行します。
USE ROLE accountadmin;
CREATE WAREHOUSE servicenow_conn_warehouse WAREHOUSE_SIZE = LARGE;
注意
ウェアハウスが少なくとも8時間クエリを実行できることを確認してください。コネクタが使用するウェアハウスとアカウントの両方で設定できるパラメーター値に影響されます(アカウントの値が優先されます)。現在の値を確認するには、次を実行します。
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' FOR ACCOUNT;
SHOW PARAMETERS LIKE 'STATEMENT_TIMEOUT_IN_SECONDS' FOR WAREHOUSE <connector_warehouse>;
両方の値が少なくとも 28800
(つまり8時間)であれば、変更は必要ありません。それ以外の場合は、必要に応じて以下のいずれかを実行してください。
ALTER ACCOUNT SET STATEMENT_TIMEOUT_IN_SECONDS = 28800;
ALTER WAREHOUSE <connector_warehouse> SET STATEMENT_TIMEOUT_IN_SECONDS = 28800;
適切なタイムアウトが提供されない場合、データインジェスチョンは失敗します。
ServiceNow®データのデータベースおよびスキーマの作成¶
次に、ServiceNow®データのデータベースとスキーマを作成します。 Snowflake Connector for ServiceNow® は、ServiceNow®データをこのデータベースとスキーマにインジェストします。
データベースとスキーマを作成するときは、次の点に注意してください。
スキーマとデータベースの名前は、有効な オブジェクト識別子 である必要があります。
Snowflakeでインジェストされた ServiceNow®データへのアクセスを制御するには、 データへのアクセスを許可するロールにスキーマに対する権限を付与 します。
データベースとスキーマを作成するには、 CREATE DATABASE と CREATE SCHEMA コマンドを実行します。
たとえば、データベース dest_db
と ServiceNow®データのスキーマ dest_schema
を作成するには、次のコマンドを実行します。
USE ROLE accountadmin;
CREATE DATABASE dest_db;
CREATE SCHEMA dest_schema;
注釈
コネクタを再インストールする場合は、コネクタの以前のインストール用に作成したスキーマを再利用できます。再利用できるのは、コネクタの以前のインストールですでにデータがロードされており、引き続き同じテーブルにデータをロードする場合です。
データのロードを続行するため、 コネクタを再インストール する前にスキーマを変更しないでください。コネクタの以前のインストールによって作成されたテーブルの定義を変更しないでください。
コネクタは、定期的にコネクタの構成と状態をスキーマの __CONNECTOR_STATE_EXPORT
テーブルにエクスポートし、後で再インストール時にコネクタの構成を回復するために使用できます。あるいは、エクスポートテーブルが存在しないか、手動で削除された場合でも、 ENABLE_TABLES ストアドプロシージャ を後で呼び出して、以前にインジェストされたテーブルを再度有効にすることができます。ストアドプロシージャは、必要なオブジェクトが既に存在することを確認し、再作成を試みません。そのため、既にインジェストされたデータを失うリスクはありません。
ServiceNow®インスタンスと通信するためのネットワークルールの作成¶
次に、アカウントから ServiceNow®インスタンスへのアウトバウンドトラフィックを許可するには、ネットワークルールを作成してください。アカウント管理者として、以下の構文で CREATE NETWORK RULE コマンドを実行します。
CREATE NETWORK RULE <name>
MODE = 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ('<servicenow_instance>.service-now.com');
条件:
name
ネットワークルールの名前を指定します。名前は、有効な オブジェクト識別子 である必要があります。
VALUE_LIST = ('servicenow_instance_name.service-now.com')
リクエストの送信先として許可される ServiceNow®インスタンスのリストを指定します。
たとえば、データベース secretsdb
の apiauth
スキーマ内に servicenow_network_rule
というネットワーク・ルールを作成するには、次のコマンドを実行します。
USE ROLE accountadmin;
CREATE NETWORK RULE secretsdb.apiauth.servicenow_network_rule
MODE = 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ('myinstance.service-now.com');
注釈
カスタムロールでシークレットを作成した場合は、ネットワークルールを作成する前に、そのシークレットへの USAGE 権限を ACCOUNTADMIN
に付与する必要があります。
USE ROLE secretadmin;
GRANT USAGE ON SECRET secretsdb.apiauth.<secret_name> TO ROLE ACCOUNTADMIN;
ServiceNow®インスタンスと通信するための外部アクセス統合の作成¶
次に、ServiceNow®インスタンスと通信するための外部アクセス統合を作成します。次の構文で CREATE EXTERNAL ACCESS INTEGRATION コマンドを実行します。
CREATE EXTERNAL ACCESS INTEGRATION <integration_name>
ALLOWED_NETWORK_RULES = (<network_rule_name>)
ALLOWED_AUTHENTICATION_SECRETS = (<secret_name>)
ENABLED = TRUE;
条件:
integration_name
外部アクセス統合の名前を指定します。名前は、有効な オブジェクト識別子 である必要があります。名前は、使用するアカウントの統合間において一意である必要があります。
ALLOWED_NETWORK_RULES = (network_rule_name)
ServiceNow®インスタンスへのアクセスを許可するネットワーク規則を指定します。これにより、この統合の使用は、ネットワークルールで指定された URLs を持つインスタンスに制限されます。
これを ServiceNow®インスタンスと通信するためのネットワークルールの作成 で作成したネットワークルールの名前に設定します。
ALLOWED_AUTHENTICATION_SECRETS = (secret_name)
API 統合のスコープで使用できるシークレットの名前のリストを指定します。
これを シークレットオブジェクトの作成 で作成したシークレットオブジェクトの名前に設定します。
ENABLED = TRUE
この API 統合を有効にするか無効にするかを指定します。API 統合が無効になっている場合、その統合に依存する外部関数はすべて機能しません。
TRUE
統合の定義で指定されたパラメーターに基づいて統合の実行を許可します。
FALSE
メンテナンスのために統合を中断します。Snowflakeとサードパーティサービス間の統合はいずれも機能しません。
たとえば、 servicenow_external_access_integration
という外部アクセス統合を作成するには、以下のコマンドを実行します。
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
コネクタのログの構成¶
Snowflake Connector for ServiceNow® は、イベントテーブルを使用してコネクタのエラーログを保存します。イベントテーブルを設定するには、 イベントテーブルの設定 ガイドに従います。
重要
Snowflakeは、問題のトラブルシューティングに役立てるため、 イベントトレースを設定する ことを推奨しています。
インストールされたコネクタの設定¶
コネクタを設定するには、次を行います。
Snowsightを使用してコネクタインスタンスのデータベースを作成します。データベースの作成方法の詳細については、 Snowsightによるコネクタのインストールと構成 をご参照ください。
SQL ワークシートに移動します。
ACCOUNTADMIN ロールを持つユーザーとしてログインします。例:
USE ROLE ACCOUNTADMIN;
コネクタに必要なすべての権限を コネクタのインスタンスとして機能するデータベース に付与します。
アカウントに対する EXECUTE TASK
アカウントに対する EXECUTE MANAGED TASK
コネクタ用に作成したウェアハウス に対する USAGE。
ServiceNow®データ用に作成したデータベース に対する USAGE
ServiceNow®データ用に作成したスキーマ に対する USAGE、CREATE TABLE、および CREATE VIEW。
ServiceNow®用に作成した外部アクセス統合 に対する USAGE
シークレット用に作成したデータベース に対する USAGE
シークレット用に作成したスキーマ に対する USAGE
作成したシークレット に対する READ
たとえば、
my_connector_servicenow
という名前のコネクタに次の権限を付与するには、次を行います。アカウントに対する EXECUTE TASK
アカウントに対する EXECUTE MANAGED TASK
ウェアハウス
servicenow_conn_warehouse
に対する USAGEdest_db
データベースに対する USAGEdest_db.dest_schema
スキーマに対する USAGE、 CREATE TABLE、 および CREATE VIEWservicenow_external_access_integration
統合に対する USAGEsecretsdb
データベースに対する USAGEsecretsdb.apiauth
スキーマに対する USAGEsecretsdb.apiauth.servicenow_creds_oauth_code secret
シークレットに対する READ
次のコマンドを実行します。
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;
宛先スキーマのテーブルとビューの所有権の譲渡(オプション)
コネクタが再インストールされ、以前の宛先スキーマが再利用される場合、宛先スキーマのすべてのテーブルとビューの所有権をコネクタに譲渡する必要があります。スキーマ内のオブジェクトに対する許可の付与を管理し、インジェストされたテーブルのスキーマが変更されたときにフラット化されたビューを再作成するためには、コネクタに所有者権限が必要です。
所有権を譲渡するには、
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
は、Snowflakeが提供するシステム関数で、指定したデータベースやスキーマのテーブルやビューの所有権をアプリケーションに譲渡することができます。譲渡されるのは、通常のテーブルと通常のビューの所有権のみです。たとえば、動的テーブル、外部テーブル、マテリアライズドビューなどの所有権は譲渡されません。この関数の署名は以下のとおりです。
SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION(<to_app>, <should_copy_grants>, <from_database>, <from_schema>)
条件:
to_app
オブジェクトの所有権を譲渡するアプリケーションの名前を指定します。
should_copy_grants
TRUE
の場合は既存の権限許可をコピーし、そうでない場合は取り消します。権限許可のコピーには、呼び出し側にMANAGE GRANTS
の権限が必要です。from_database
所有者が変更されるべきオブジェクトを含むデータベースの名前。
from_schema
(オプション)所有者を変更すべきオブジェクトを含むスキーマの名前。スキーマが指定されていない場合、提供されたデータベース内のすべてのスキーマのテーブルとビューの所有権が譲渡されます。管理されたスキーマのオブジェクトは、所有権の譲渡時に省かれます。
この関数を実行するには、呼び出し元が以下のいずれかの条件を満たしている必要があります。
MANAGE GRANTS
(例: ACCOUNTADMIN または SECURITYADMIN ロール)の権限がある、またはアプリケーションインスタンスを所有するロールと、所有権を譲渡するすべてのオブジェクトを所有するロールが含まれている。所有権がないオブジェクトは、関数によって省かれます。
たとえば、所有権を譲渡するコネクタは次を満たしている必要があります:
my_connector_servicenow
という名前のアプリケーションとしてインストールされたSnowflake内にある ServiceNow®データの
dest_db.dest_schema
という名前のスキーマを使用している
次のコマンドを実行します。
USE ROLE accountadmin; CALL SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION('my_connector_servicenow', true, 'dest_db', 'dest_schema');
必要であれば、
DATA_READER
アプリケーションロールを以前データを所有していたロールに付与し、データを使用する既存のパイプラインの中断を防ぎます。GRANT APPLICATION ROLE <connector_app>.DATA_READER TO ROLE <previous_data_owner_role>;
CONFIGURE_CONNECTOR
プロシージャが実行されるまでは、DATA_READER
アプリケーションロールには宛先スキーマのテーブルとビューに対して権限の付与がないことに注意してください。USE DATABASE コマンドを実行して、コネクタにデータベースを使用します。例:
USE DATABASE my_connector_servicenow;
CALL コマンドを使用して
CONFIGURE_CONNECTOR
という名前のストアドプロシージャを呼び出し、コネクタを構成します。CALL CONFIGURE_CONNECTOR({ 'warehouse': '<warehouse_name>', 'destination_database': '<dest_db>', 'destination_schema': '<dest_schema>' })
条件:
warehouse_name
コネクタのウェアハウスの名前を指定します。
ウェアハウスの名前は、有効な オブジェクト識別子 である必要があります。
dest_db
Snowflake の ServiceNow®データ用のデータベース(先に作成したデータベース) の名前を指定します。
データベースの名前は、有効な オブジェクト識別子 である必要があります。
dest_schema
Snowflake内にある ServiceNow®データのスキーマ(以前に作成したスキーマ) の完全修飾名を指定します。
スキーマの名前は、有効な オブジェクト識別子 である必要があります。
たとえば、構成するコネクタは次を満たしている必要があります。
ウェアハウス
servicenow_conn_warehouse
を使用している。Snowflake内にある ServiceNow®データの
dest_db.dest_schema
という名前のスキーマを使用している
次のコマンドを実行します。
CALL CONFIGURE_CONNECTOR({ 'warehouse': 'servicenow_conn_warehouse', 'destination_database': 'dest_db', 'destination_schema': 'dest_schema' });
コネクタが正常に開始された場合、このストアドプロシージャは次のレスポンスを返します。
{ "responseCode": "OK", "message": "Connector successfully configured.", }
注釈
コネクタが開始されると、コネクタに渡されたウェアハウス、宛先データベース、および宛先スキーマの名前を変更することはできません。コネクタはオブジェクトを名前で参照します。そのため、オブジェクトの名前をドロップまたは変更すると、コネクタは破損し動作しなくなります。
ウェアハウスの名前を変更する代わりに、 UPDATE_WAREHOUSE ストアドプロシージャを使用して、コネクタが使用するウェアハウスを変更します。
CALL コマンドを使用して
SET_CONNECTION_CONFIGURATION
という名前のストアドプロシージャを呼び出し、ServiceNow®インスタンスへの接続を構成します。CALL SET_CONNECTION_CONFIGURATION({ 'service_now_url': '<servicenow_base_url>', 'secret': '<secret_name>', 'external_access_integration': '<external_access_integration_name>' })
条件:
servicenow_base_url
コネクタが使用する ServiceNow®インスタンスの URL を指定します。URL は次の形式にする必要があります。
https://<servicenow_instance>.service-now.com
secret_name
ServiceNow®への認証用の認証情報を含むシークレットオブジェクト(以前に作成したシークレット) の完全修飾名を指定します。
シークレットオブジェクトの完全修飾名を次の形式で指定する必要があります。
<database_name>.<schema_name>.<secret_name>
データベース、スキーマ、シークレットの名前は、有効な オブジェクト識別子 である必要があります。
external_access_integration_name
ServiceNow®の外部アクセス統合(先に作成した外部アクセス統合) の名前を指定します。
統合の名前は、有効な オブジェクト識別子 である必要があります。
たとえば、次の ServiceNow®インスタンスへの接続を構成するには、次を満たしている必要があります。
URL
https://myinstance.service-now.com
がある。secretsdb.apiauth.servicenow_creds_oauth_code
に格納されているシークレットを使用する。servicenow_external_access_integration
という外部アクセス統合を使用している。
次のコマンドを実行します。
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' });
コネクタが正常に構成された場合、このストアドプロシージャは次のレスポンスを返します。
{ "responseCode": "OK", "message": "Test request to ServiceNow® succeeded.", }
注釈
一度コネクタを構成すると、渡されたシークレットと外部アクセス統合の名前を変更することはできません。コネクタはオブジェクトを名前で参照します。そのため、オブジェクトの名前をドロップまたは変更すると、コネクタは破損し動作しなくなります。
FINALIZE_CONNECTOR_CONFIGURATION
というストアドプロシージャを呼び出す CALL コマンドを使用して、コネクタの構成を確定します。CALL FINALIZE_CONNECTOR_CONFIGURATION({ 'journal_table': '<name_of_journal_table>', 'table_name': '<name_of_audited_table>', 'sys_id': '<sys_id_of_audited_entry>' })
条件:
name_of_journal_table
削除された記録に関する情報を含むテーブルの名前を指定します。詳細については、 ServiceNow®インスタンスの準備 をご参照ください
削除された記録に関する情報は、削除された記録を反映するように設定したテーブルでのみ利用できることに注意してください。
削除された記録が反映されないようにするには、この引数に
null
を指定します。name_of_audited_table
(オプション)ジャーナルテーブルに存在し、コネクタがアクセスできる必要がある監査済みテーブル名を指定します。ジャーナルテーブルへのアクセスの検証中に、コネクタはこのテーブルに関連する監査エントリを検索します。ServiceNow®へのクエリは成功したけれども、結果が得られず、プロシージャが失敗する場合にこのオプションを提供します。コネクタの ServiceNow®ユーザーが、指定されたテーブルのすべてのエントリにアクセスできることを確認します。
このオプションは
sys_id
パラメーターとは併用できません。sys_id_of_audited_entry
(オプション)ジャーナルテーブルに存在し、コネクタがアクセスできる必要がある一部の監査済みテーブルのエントリの
sys_id
を指定します。ジャーナルテーブルへのアクセスの検証中に、コネクタはこのsys_id
に関連する監査エントリを検索します。ServiceNow®へのクエリは成功したけれども、結果が得られず、プロシージャが失敗する場合にこのオプションを提供します。コネクタの ServiceNow®ユーザーが指定されたエントリにアクセスできることを確認します。このオプションは
table_name
パラメーターとは併用できません。
コネクタが正常に開始された場合、このストアドプロシージャは次のレスポンスを返します。
{ "responseCode": "OK", }
コネクタ構成の確定中に、コネクタは以前にエクスポートされたコネクタの状態が宛先スキーマに存在するかどうかを確認しようとします。
__CONNECTOR_STATE_EXPORT
テーブルが存在し、コネクタにアクセス可能な場合、コネクタは状態のインポートを試みます。インポートが正常に終了すると、エクスポートテーブルは削除されます。インポート中にエラーが発生した場合、エラーを修正した後にFINALIZE_CONNECTOR_CONFIGURATION
プロシージャを再度実行できます。状態をインポートしたくない場合、またはインポートエラーを修正したくない場合は、コネクタからテーブルの所有権を譲渡し、テーブルを削除します。
新しく作成されたデータベースはコネクタのインスタンスであり、次が含まれています。
コネクタの構成に使用するストアドプロシージャ。詳細については、 SQL ステートメントを使用したデータインジェスチョンの設定 をご参照ください。
コネクタのログに記録されたメッセージと統計を含むビュー。詳細については、 コネクタのモニターについて をご参照ください。
コネクタアプリケーションの役割¶
ネイティブアプリケーションとして、 Snowflake Connector for ServiceNow® は アプリケーションの役割 を定義します。 コネクタのロールベースアクセス制御 でご確認いただけます。
インストールスクリプトのサンプル¶
以下のスクリプト例は、 SQL ワークシートを使用して Snowflake Connector for ServiceNow® を構成する方法を示しています。これにより、お使いの環境にコネクタをすばやく設定し、使用を開始することができます。コマンドをコピーしてワークシートに貼り付け、プレースホルダーに値を入力するだけです。
重要
こちら で説明されているように、アプリケーションは既にアカウントにインストールされているものとします。
コマンドを実行する前に、スクリプトを確認し、必要に応じて調整してください。
-- Specify values as required by your installation
SET application_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW'; -- use the same name as provided in the installation
SET connector_warehouse = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_WAREHOUSE';
SET servicenow_instance_domain = '<servicenow_instance>.service-now.com';
SET destination_database = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_DEST_DB';
SET destination_schema = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_DEST_SCHEMA';
SET secret_database = 'CONNECTORS_SECRET';
SET secret_schema = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW';
SET secret_database_schema = $secret_database || '.' || $secret_schema;
SET secret_fqn = $secret_database_schema || '.' || 'SECRET';
SET network_rule_fqn = $secret_database_schema || '.' || 'NETWORK_RULE';
SET external_access_integration_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_EXTERNAL_ACCESS_INTEGRATION';
SET destination_database_schema = $destination_database || '.' || $destination_schema;
SET servicenow_instance_url = 'https://' || $servicenow_instance_domain || '/';
-- Create essential objects
USE ROLE accountadmin;
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($connector_warehouse)
WAREHOUSE_SIZE = 'MEDIUM'
AUTO_RESUME = TRUE;
CREATE DATABASE IF NOT EXISTS IDENTIFIER($secret_database);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($secret_database_schema);
CREATE DATABASE IF NOT EXISTS IDENTIFIER($destination_database);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($destination_database_schema);
-- Populate with your credentials
CREATE SECRET IDENTIFIER($secret_fqn)
TYPE = PASSWORD
USERNAME = '<servicenow_login>'
PASSWORD = '<servicenow_password>';
-- None of the following commands should require any changes
CREATE NETWORK RULE IDENTIFIER($network_rule_fqn)
MODE = 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ($servicenow_instance_domain);
CREATE PROCEDURE execute_immediate_create_ea_integration()
RETURNS VARIANT
EXECUTE AS caller
AS
BEGIN
EXECUTE IMMEDIATE '
CREATE EXTERNAL ACCESS INTEGRATION IDENTIFIER($external_access_integration_name)
ALLOWED_NETWORK_RULES = ($network_rule_fqn)
ALLOWED_AUTHENTICATION_SECRETS = (' || $secret_fqn || ') ENABLED = TRUE
';
END;
CALL execute_immediate_create_ea_integration();
DROP PROCEDURE IF EXISTS execute_immediate_create_ea_integration();
GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION IDENTIFIER($application_name);
GRANT EXECUTE MANAGED TASK ON ACCOUNT TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON WAREHOUSE IDENTIFIER($connector_warehouse) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON DATABASE IDENTIFIER($destination_database) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT CREATE TABLE ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT CREATE VIEW ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON INTEGRATION IDENTIFIER($external_access_integration_name) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON DATABASE IDENTIFIER($secret_database) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON SCHEMA IDENTIFIER($secret_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT READ ON SECRET IDENTIFIER($secret_fqn) TO APPLICATION IDENTIFIER($application_name);
CALL SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION($application_name, true, $destination_database, $destination_schema);
USE APPLICATION IDENTIFIER($application_name);
-- Recommended to call one by one as the response might contain an error
CALL CONFIGURE_CONNECTOR({
'warehouse': $connector_warehouse,
'destination_database': $destination_database,
'destination_schema': $destination_schema
});
CALL SET_CONNECTION_CONFIGURATION({
'service_now_url': $servicenow_instance_url,
'secret': $secret_fqn,
'external_access_integration': $external_access_integration_name
});
-- Remove the 'journal_table' parameter if you don't want to track deleted records
CALL FINALIZE_CONNECTOR_CONFIGURATION({
'journal_table': 'sys_audit_delete'
});
-- Specify values as required by your installation
SET application_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW'; -- use the same name as provided in the installation
SET connector_warehouse = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_WAREHOUSE';
SET servicenow_instance_domain = '<servicenow_instance>.service-now.com';
SET destination_database = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_DEST_DB';
SET destination_schema = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_DEST_SCHEMA';
SET secret_database = 'CONNECTORS_SECRET';
SET secret_schema = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW';
SET secret_database_schema = $secret_database || '.' || $secret_schema;
SET secret_fqn = $secret_database_schema || '.' || 'SECRET';
SET network_rule_fqn = $secret_database_schema || '.' || 'NETWORK_RULE';
SET external_access_integration_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_EXTERNAL_ACCESS_INTEGRATION';
SET security_integration_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_SECURITY_INTEGRATION';
SET destination_database_schema = $destination_database || '.' || $destination_schema;
SET servicenow_instance_url = 'https://' || $servicenow_instance_domain || '/';
SET oauth_token_endpoint = $servicenow_instance_url || 'oauth_token.do';
-- Create essential objects
USE ROlE accountadmin;
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($connector_warehouse)
WAREHOUSE_SIZE = 'MEDIUM'
AUTO_RESUME = TRUE;
CREATE DATABASE IF NOT EXISTS IDENTIFIER($secret_database);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($secret_database_schema);
CREATE DATABASE IF NOT EXISTS IDENTIFIER($destination_database);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($destination_database_schema);
-- Populate with your credentials
CREATE SECURITY INTEGRATION IDENTIFIER($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 = $oauth_token_endpoint
ENABLED = TRUE;
CREATE SECRET IDENTIFIER($secret_fqn)
TYPE = OAUTH2
OAUTH_REFRESH_TOKEN = '<refresh_token>'
OAUTH_REFRESH_TOKEN_EXPIRY_TIME = '<expiry time>'
API_AUTHENTICATION = $security_integration_name;
-- None of the following commands should require any changes
CREATE NETWORK RULE IDENTIFIER($network_rule_fqn)
MODE = 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ($servicenow_instance_domain);
CREATE PROCEDURE execute_immediate_create_ea_integration()
RETURNS VARIANT
EXECUTE AS caller
AS
BEGIN
EXECUTE IMMEDIATE '
CREATE EXTERNAL ACCESS INTEGRATION IDENTIFIER($external_access_integration_name)
ALLOWED_NETWORK_RULES = ($network_rule_fqn)
ALLOWED_AUTHENTICATION_SECRETS = (' || $secret_fqn || ') ENABLED = TRUE
';
END;
CALL execute_immediate_create_ea_integration();
DROP PROCEDURE IF EXISTS execute_immediate_create_ea_integration();
GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION IDENTIFIER($application_name);
GRANT EXECUTE MANAGED TASK ON ACCOUNT TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON WAREHOUSE IDENTIFIER($connector_warehouse) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON DATABASE IDENTIFIER($destination_database) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT CREATE TABLE ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT CREATE VIEW ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON INTEGRATION IDENTIFIER($external_access_integration_name) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON DATABASE IDENTIFIER($secret_database) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON SCHEMA IDENTIFIER($secret_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT READ ON SECRET IDENTIFIER($secret_fqn) TO APPLICATION IDENTIFIER($application_name);
CALL SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION($application_name, true, $destination_database, $destination_schema);
USE APPLICATION IDENTIFIER($application_name);
-- Recommended to call one by one as the response might contain an error
CALL CONFIGURE_CONNECTOR({
'warehouse': $connector_warehouse,
'destination_database': $destination_database,
'destination_schema': $destination_schema
});
CALL SET_CONNECTION_CONFIGURATION({
'service_now_url': $servicenow_instance_url,
'secret': $secret_fqn,
'external_access_integration': $external_access_integration_name
});
-- Remove the 'journal_table' parameter if you don't want to track deleted records
CALL FINALIZE_CONNECTOR_CONFIGURATION({
'journal_table': 'sys_audit_delete'
});
-- Specify values as required by your installation
SET application_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW'; -- use the same name as provided in the installation
SET connector_warehouse = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_WAREHOUSE';
SET servicenow_instance_domain = '<servicenow_instance>.service-now.com';
SET destination_database = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_DEST_DB';
SET destination_schema = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_DEST_SCHEMA';
SET secret_database = 'CONNECTORS_SECRET';
SET secret_schema = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW';
SET secret_database_schema = $secret_database || '.' || $secret_schema;
SET secret_fqn = $secret_database_schema || '.' || 'SECRET';
SET network_rule_fqn = $secret_database_schema || '.' || 'NETWORK_RULE';
SET external_access_integration_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_EXTERNAL_ACCESS_INTEGRATION';
SET security_integration_name = 'SNOWFLAKE_CONNECTOR_FOR_SERVICENOW_SECURITY_INTEGRATION';
SET destination_database_schema = $destination_database || '.' || $destination_schema;
SET servicenow_instance_url = 'https://' || $servicenow_instance_domain || '/';
SET oauth_token_endpoint = $servicenow_instance_url || 'oauth_token.do';
-- Create essential objects
USE ROlE accountadmin;
CREATE WAREHOUSE IF NOT EXISTS IDENTIFIER($connector_warehouse)
WAREHOUSE_SIZE = 'MEDIUM'
AUTO_RESUME = TRUE;
CREATE DATABASE IF NOT EXISTS IDENTIFIER($secret_database);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($secret_database_schema);
CREATE DATABASE IF NOT EXISTS IDENTIFIER($destination_database);
CREATE SCHEMA IF NOT EXISTS IDENTIFIER($destination_database_schema);
-- Populate with your credentials
CREATE SECURITY INTEGRATION IDENTIFIER($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 = $oauth_token_endpoint
OAUTH_GRANT = 'CLIENT_CREDENTIALS'
OAUTH_ALLOWED_SCOPES = ('useraccount')
ENABLED = TRUE;
CREATE SECRET IDENTIFIER($secret_fqn)
TYPE = OAUTH2
API_AUTHENTICATION = $security_integration_name
OAUTH_SCOPES=('useraccount');
-- None of the following commands should require any changes
CREATE NETWORK RULE IDENTIFIER($network_rule_fqn)
MODE = 'EGRESS'
TYPE = 'HOST_PORT'
VALUE_LIST = ($servicenow_instance_domain);
CREATE PROCEDURE execute_immediate_create_ea_integration()
RETURNS VARIANT
EXECUTE AS caller
AS
BEGIN
EXECUTE IMMEDIATE '
CREATE EXTERNAL ACCESS INTEGRATION IDENTIFIER($external_access_integration_name)
ALLOWED_NETWORK_RULES = ($network_rule_fqn)
ALLOWED_AUTHENTICATION_SECRETS = (' || $secret_fqn || ') ENABLED = TRUE
';
END;
CALL execute_immediate_create_ea_integration();
DROP PROCEDURE IF EXISTS execute_immediate_create_ea_integration();
GRANT EXECUTE TASK ON ACCOUNT TO APPLICATION IDENTIFIER($application_name);
GRANT EXECUTE MANAGED TASK ON ACCOUNT TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON WAREHOUSE IDENTIFIER($connector_warehouse) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON DATABASE IDENTIFIER($destination_database) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT CREATE TABLE ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT CREATE VIEW ON SCHEMA IDENTIFIER($destination_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON INTEGRATION IDENTIFIER($external_access_integration_name) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON DATABASE IDENTIFIER($secret_database) TO APPLICATION IDENTIFIER($application_name);
GRANT USAGE ON SCHEMA IDENTIFIER($secret_database_schema) TO APPLICATION IDENTIFIER($application_name);
GRANT READ ON SECRET IDENTIFIER($secret_fqn) TO APPLICATION IDENTIFIER($application_name);
CALL SYSTEM$GRANT_OWNERSHIP_TO_APPLICATION($application_name, true, $destination_database, $destination_schema);
USE APPLICATION IDENTIFIER($application_name);
-- Recommended to call one by one as the response might contain an error
CALL CONFIGURE_CONNECTOR({
'warehouse': $connector_warehouse,
'destination_database': $destination_database,
'destination_schema': $destination_schema
});
CALL SET_CONNECTION_CONFIGURATION({
'service_now_url': $servicenow_instance_url,
'secret': $secret_fqn,
'external_access_integration': $external_access_integration_name
});
-- Remove the 'journal_table' parameter if you don't want to track deleted records
CALL FINALIZE_CONNECTOR_CONFIGURATION({
'journal_table': 'sys_audit_delete'
});
次のステップ¶
コネクタをインストールして構成したら、 ServiceNow®データのデータインジェスチョンの設定 で説明されているステップを実行します。