13

PC で SSIS プロジェクトをビルドし、パッケージの実行中に (SQL 認証を介して) ネットワーク外の SQL 2012 サーバーに接続しています。プロジェクトを同じサーバーにデプロイする時が来ましたが、壁にぶつかりました。組み込みの展開ウィザードを実行しているときに、サーバー名を入力すると (接続マネージャーを使用してデータベースに接続するために入力したのと同じように)、「信頼されていないドメイン」エラーが表示されます (SQL 認証ではなく Windows 認証が必要です)。 )。

プロジェクトで環境固有の値を設定するためにパラメーターを使用していることも関係があると思います。

SSIS プロジェクトをネットワーク外の SQL Server に配置するにはどうすればよいですか?

また、検索で追加する必要がありますが、VPN接続でこれを行うのに苦労している人に出くわしました(解決策は投稿されていません)。これは通常、どのように行われますか?

4

2 に答える 2

9

.ispac ファイルを SSISDB カタログにデプロイするためのツールが 3 つあります。

  1. ISDeploymentWizard.exe
  2. ManagedObjectModel
  3. TSQL

すでにウィザードを使用していますが、認証の問題が原因で機能していません。あなたのMOMアプローチでも、認証の問題が発生すると思います。これで TSQL アプローチが終了します。有効なログオンがあるため、うまくいけばうまくいくでしょう。

次のコードは、.ispac をシリアル化し、展開フォルダーがまだ存在しない場合は作成し、プロジェクトを展開して、パラメーター値を割り当てます。

SSMS では、モードを [クエリ] メニューで使用できる SQLCMD モードに変更する必要があります。その後、Ctrl-Shift-M を押してマクロを起動すると、.ispac ファイルの場所を指定できます。

USE SSISDB
GO

IF ('$(isPacPath)' = '$' + '(isPacPath)')
BEGIN
    THROW 50000, N'This script must be run in SQLCMD mode.', 1;
END
GO

-- You must be in SQLCMD mode
-- setvar isPacPath "C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac"
:setvar isPacPath "<isPacFilePath, nvarchar(4000), C:\sandbox\SSDTDeploy\TSQLDeploy\bin\Development\TSQLDeploy.ispac>"



DECLARE
    @folder_name nvarchar(128) = 'TSQLDeploy'
,   @folder_id bigint = NULL
    -- this must match the ispac
,   @project_name nvarchar(128) = 'TSQLDeploy'
,   @project_stream varbinary(max)
,   @operation_id bigint = NULL;

-- Read the zip (ispac) data in from the source file
SELECT
    @project_stream = T.stream
FROM
(
    SELECT 
        *
    FROM 
        OPENROWSET(BULK N'$(isPacPath)', SINGLE_BLOB ) AS B
) AS T (stream);

-- Test for catalog existences
IF NOT EXISTS
(
    SELECT
        CF.name
    FROM
        catalog.folders AS CF
    WHERE
        CF.name = @folder_name
)
BEGIN
    -- Create the folder for our project
    EXECUTE [catalog].[create_folder] 
        @folder_name
    ,   @folder_id OUTPUT;
END

-- Actually deploy the project
EXECUTE [catalog].[deploy_project] 
    @folder_name
,   @project_name
,   @project_stream
,   @operation_id OUTPUT;

-- Check to see if something went awry
SELECT
    OM.* 
FROM
    catalog.operation_messages AS OM;

-- Use this to set parameters
-- http://msdn.microsoft.com/en-us/library/ff878162.aspx
EXECUTE catalog.set_object_parameter_value 
    -- Use the value 20 to indicate a project parameter 
    -- or the value 30 to indicate a package parameter
    @object_type = 20 
,   @folder_name = @folder_name
,   @project_name = @project_name
,   @parameter_name = N'' -- nvarchar(128)
,   @parameter_value = NULL -- sql_variant
,   @object_name = N'' -- nvarchar(260)
,   @value_type = '' -- char(1)
--  Use the character V to indicate that parameter_value is a literal value 
-- that will be used by default if no other values are assigned prior 
-- to execution. 
-- Use the character R to indicate that parameter_value is a referenced value 
-- and has been set to the name of an environment variable. 
-- This argument is optional, the character V is used by default

SQL Pass Summit 2012 カンファレンスに参加した場合は、2012 配置モデルに関する講演でこれをデモしましたが、パラメーター部分については説明しませんでした。最後の呼び出しは正しいと思いますが、確認していません。特定のニーズに合わせて調整できるように、プロシージャ コールのドキュメントにリンクしています。

PowerShell の実装

2013 年 8 月の更新

現在のクライアントで学んだことがあります。ホームドメインに参加しているラップトップがあります。クライアントの AD ネットワークにアカウントがあります。クライアントの世界で何かを「実行」する必要があるときはいつでも、自分のプロセスを起動して、自分の「外部」資格情報を提示するように指示する必要があります。これを可能にするのはRunAsです。代替参照

必要なすべてのプロセスを起動する一連のバッチ ファイルを作成しました。彼らはの形をとります

runas /netonly:ForeignDomain\Doppelganger "C:\windows\system32\cmd.exe"

コマンド プロンプト (上記)、Visual Studio、SSMS、PowerShell、PowerShell ISE、およびドメインで動作する必要があるその他の特殊なアプリ用に 1 つ持っています。

runas アプローチを使用して、上記のすべての方法を使用してパッケージを展開できました (また、外部の資格情報で実行されている Visual Studio インスタンスから直接展開することもできます)。

于 2013-01-23T17:23:26.073 に答える