Microsoft SSIS
The Microsoft SQL Server Integration Services (SSIS) Connector ingests package metadata to build end-to-end lineage across your ETL ecosystem.
Supported Features
- Extraction of SSIS package metadata from the MSDB database (folder-based package store), the SSISDB catalog (project deployment model), and the file system
- Decryption of encrypted file-system packages
- Include filtering by package path and package name, with wildcard support
- Enrichment of connections and parameters via the Connection and Parameter managers
- Project environment references for SSIS 2012/2014 projects deployed to SQL Server
Supported SSIS versions: 2008, 2012, 2014, 2016, 2017, 2019
How It Works
The connector extracts metadata from SSIS to an XML file, which is then loaded into Lineage Plus. The connector runs through the Lineage Plus agent, which is installed and managed with the Agent CLI and can run on-demand or on a schedule.
SSIS packages are stored in two formats:
- MSDB database: packages (
.dtsxfiles) are stored in a folder structure. - SSISDB catalog: packages use a project format with references to parameters, environment variables, and other packages.
The connector can extract from either store (or the file system), depending on the sqlserverintegration.packagetype.1 setting.
Permissions
The snapshot user needs access to the msdb and SSISDB catalogs. With SQL Server 2012 and later, packages stored in the MSDB database require Windows Authentication for the snapshot user.
MSDB-stored packages
Grant the snapshot user the following permissions:
use msdb;
grant select on msdb.dbo.sysssispackagefolders to <user>;
grant select on msdb.dbo.sysssispackages to <user>;SSISDB catalog (project deployment)
The simplest option is to grant the broad ssis_admin role:
use SSISDB;
exec sp_addrolemember 'ssis_admin', <user_name>
Thessis_adminrole grants wide-ranging abilities. If assigning this role is restricted in your environment, assign granular read-only permissions instead — see Assigning Granular SSISDB Permissions below.
Setup
The SSIS connector runs through the Lineage Plus agent and is configured with the Agent CLI.
Steps:
-
Install the Lineage Plus agent
- Download and install the Agent CLI, then run
./bigeye-agent installand selectLINEAGE_PLUS. See Lineage Plus Agent for host requirements and prerequisites.
- Download and install the Agent CLI, then run
-
Add the SSIS connector
-
./bigeye-agent add-connector -c ssis - The CLI walks you through the connector configuration interactively. See Configuration Parameters for details on each setting.
-
-
Run lineage collection
-
./bigeye-agent lineage run -c ssis - If the connector runs successfully, you'll see a success message. Allow several hours for lineage data to sync into Bigeye.
-
-
Provide connection and parameter information
- Once the lineage data is loaded, use the Connection Manager to specify how each SSIS connection maps to database models.
- After the connection information is provided, rerun lineage collection for data lineage to be calculated.
Configuration Parameters
| Key | Example | Description |
|---|---|---|
| SSIS Database Connection | ||
sqlserverintegration.database.sqlserverversion.1 | SQLSERVER2012 | The version of SSIS in use. Valid values: SQLSERVER2008 (SSIS 2008), SQLSERVER2012 (SSIS 2012), SQLSERVER2014 (SSIS 2014), SQLSERVER2016 (SSIS 2016 and 2017). |
sqlserverintegration.database.url.1 | jdbc:sqlserver://sqlserver2012:1433;databaseName=msdb | The SSIS database server JDBC connection string. For Windows Authentication, leave username and password blank and use: jdbc:sqlserver://<host>:1433;IntegratedSecurity=true;databaseName=msdb. |
sqlserverintegration.packagetype.1 | db | Where packages are stored: db (database packages), file (file system packages), or both. |
sqlserverintegration.database.username.1 | sql_server_db_user | Database username for the SQL Server database where packages are stored. The extract user should have read access on the catalog. |
sqlserverintegration.database.password.1 | sql_server_db_user_password | The database user password for the SQL Server database. |
sqlserverintegration.database.packagepaths.1 | \\Test,\\Latest\\TestFolder,\\Test*,\\Test? | Comma-separated list of SSIS database package paths; all packages under the specified paths are included in the snapshot. Paths are relative to the MSDB folder under Stored Packages in the SSIS Package Store. Wildcards: ? (single character), * (multiple characters), \\ to escape. Filters are case-sensitive. |
sqlserverintegration.database.packagenames.1 | package1,packDev* | Comma-separated list of SSIS package names; only matching packages are included in the snapshot. If no filter is specified, all packages are included. Wildcards: ? (single character), * (multiple characters), \\ to escape. Filters are case-sensitive. |
sqlserverintegration.filesystem.packagepaths.1 | C:\\SSIS\\Projects\\Unit Test Project,C:\\SamplePackages | Comma-separated list of SSIS file system package paths; all packages under the specified paths are included in the snapshot. |
sqlserverintegration.filesystem.packagenames.1 | package1,packDev* | Comma-separated list of SSIS package names for file system packages; only matching packages are included. If no filter is specified, all packages are included. Wildcards: ? (single character), * (multiple characters), \\ to escape. Filters are case-sensitive. |
sqlserverintegration.temptablename.1 | #,tmp,temp | Temp table patterns. |
sqlserverintegration.decryptpackages.1 | yes | Whether to decrypt packages read from the file system: yes to decrypt, no to skip decryption. |
sqlserverintegration.decryption.password.1 | file_decrypt_password | Password used to decrypt encrypted packages. |
sqlserverintegration.exclude.hash.column.pattern.1 | *scd2hashci,hash* | Marks columns matching these naming patterns as excluded from the data flow graph. |
snapshot.filtering.mode.1 | singlewithinclude | singlewithinclude is the only supported option at this time: a single repository file is created with all specified packages included. Include filters (packagenames/packagepaths parameters above) control which packages get included; if nothing is specified, the entire source system is created as one repository. |
| SSIS 2012 and 2014 Projects Deployed to SQL Server only | ||
sqlserverintegration.project.environment.references.1 | "Integration Services Project2"=2;"Integration Services Project3"=3 | "ProjectName"=ReferenceID pairs, separated by ;. The project name is the name in the SSISDB catalog; the reference ID comes from [SSISDB].[internal].[environment_references]. |
sqlserverintegration.jdbc.driver.class.1 | com.microsoft.sqlserver.jdbc.SQLServerDriver | Name of the JDBC driver used for this connection. |
sqlserverintegration.database.to.query.1 | SSISDB | SSISDB — for project deployment packages stored in the SSISDB catalog. |
sqlserverintegration.database.url.1 | jdbc:sqlserver://sqlserver2012:1433;integratedSecurity=true;databaseName=SSISDB | The SSIS database server JDBC connection string for the SSISDB catalog. |
sqlserverintegration.ssisdb.schema.name.1 | catalog | SSISDB schema name used for querying the SSISDB catalog. Default is catalog. |
sqlserverintegration.ssisdb.table.schema.name.1 | internal | SSISDB internal schema name used for querying the SSISDB catalog. |
sqlserverintegration.deployed.project.landingzone.1 | C:\\metacenter_home\\resources\\SSIS\\SSIS2012\\DeployedProjects | The landing zone directory where SQL Server 2012/2014 deployed projects are extracted. |
| Snapshot File Destination | ||
environment.name.1 | DW_production | Logical name to uniquely group projects in an SSIS environment; used as a key to group connections and parameters in the Connection and Parameter managers. |
snapshot.output.1 | metacenter.jcr#Snapshots/<metacenter instance id>/SQL Server Integration Services/<repository environment name> | The Content Repository path referenced by the snapshot. Replace the values in angle brackets; <metacenter instance id> can be found in your metacenter.xml file. |
Sample Properties File
If you have an existing properties file like the one below, it can be imported with ./bigeye-agent add-connector -c ssis --from-existing /path/to/sqlserverintegration.properties.
# ===== SSIS database connection =====
sqlserverintegration.database.sqlserverversion.1=SQLSERVER2012
sqlserverintegration.database.url.1=jdbc:sqlserver://sqlserver2012:1433;databaseName=msdb
sqlserverintegration.database.username.1=sql_server_db_user
sqlserverintegration.database.password.1=${SSIS_DB_PASSWORD}
# For Windows Authentication, leave username/password blank and use:
# sqlserverintegration.database.url.1=jdbc:sqlserver://sqlserver2012:1433;IntegratedSecurity=true;databaseName=msdb
# ===== Package source =====
# db = database packages, file = file system packages, both = db and file system
sqlserverintegration.packagetype.1=db
sqlserverintegration.database.packagepaths.1=\\Test,\\Latest\\TestFolder
sqlserverintegration.database.packagenames.1=package1,packDev*
# sqlserverintegration.filesystem.packagepaths.1=C:\\SSIS\\Projects\\Unit Test Project,C:\\SamplePackages
# sqlserverintegration.filesystem.packagenames.1=package1,packDev*
# ===== Package decryption (file system packages) =====
sqlserverintegration.decryptpackages.1=yes
sqlserverintegration.decryption.password.1=${SSIS_DECRYPT_PASSWORD}
# ===== Optional tuning =====
sqlserverintegration.exclude.hash.column.pattern.1=*scd2hashci,hash*
# ===== SSIS 2012/2014 projects deployed to SQL Server only =====
sqlserverintegration.project.environment.references.1="Integration Services Project2"=2;"Integration Services Project3"=3
sqlserverintegration.jdbc.driver.class.1=com.microsoft.sqlserver.jdbc.SQLServerDriver
sqlserverintegration.database.to.query.1=SSISDB
sqlserverintegration.database.url.1=jdbc:sqlserver://sqlserver2012:1433;integratedSecurity=true;databaseName=SSISDB
sqlserverintegration.ssisdb.schema.name.1=catalog
sqlserverintegration.ssisdb.table.schema.name.1=internal
sqlserverintegration.deployed.project.landingzone.1=C:\\metacenter_home\\resources\\SSIS\\SSIS2012\\DeployedProjects
# ===== Output & strategy =====
snapshot.filtering.mode.1=singlewithinclude
environment.name.1=DW_production
snapshot.output.1=metacenter.jcr#Snapshots/<metacenter-instance-id>/SQL Server Integration Services/<repository-environment-name>Assigning Granular SSISDB Permissions
If granting the ssis_admin role is restricted in your environment, assign read-only permissions using SQL Server Management Studio (SSMS) or T-SQL scripting.
Using SQL Server Management Studio
-
Log in to the SQL Server using SSMS with DBA privileges using Windows Authentication, then grant the user read access to
internal.foldersandinternal.projects:use ssisdb; exec sp_grantdbaccess sqlserver_unit_test grant select on internal.folders to sqlserver_unit_test grant select on internal.projects to sqlserver_unit_test -
Expand Security.
-
Double-click the user configured to use SQL Server Authentication.
-
Click SSISDB in Users Mapped to this Login.
-
Click public to add the database role membership for SSISDB.
-
Expand Integration Services Catalogs.
-
Expand SSISDB.
-
Right-click the project folder to assign permissions to the user.
-
The Folder Properties window opens.
-
Click Permissions.
-
Click Browse.
-
Select the SQL user to map the permissions to.
-
Click OK.
-
In the Permissions list, check the boxes to grant Read and Read Objects.
Repeat these steps for all top-level project folders. Assigning the privileges at the root folders cascades the privileges to the projects underneath them.
Using T-SQL Scripting
These permissions can only be assigned by logging in as a Windows Authenticated user.
-
Grant the SQL user access to the database:
use ssisdb; exec sp_grantdbaccess sqlserver_unit_test grant select on internal.folders to sqlserver_unit_test grant select on internal.projects to sqlserver_unit_test -
List the folders that require access:
use ssisdb; select * from internal.folders -
Assign folder permissions by invoking the
[SSISDB].[catalog].[grant_permission]stored procedure:grant_permission [ @object_type = ] object_type , [ @object_id = ] object_id , [ @principal_id = ] principal_id , [ @permission_type = ] permission_type@object_type— the type of securable object: folder (1), project (2), environment (3), or operation (4).@object_id— the unique ID of the securable object (from the result set in step 2).@principal_id— the ID of the principal to be granted permission. Look it up with:select principal_id from sys.database_principals where name='sqlserver_unit_test'@permission_type— the type of permission:1(Read),101(Read Objects).
-
Grant Read and Read Objects on each project folder:
--Assign (Read) and (Read Objects) to sqlserver_unit_test for Project2 Folder EXEC [SSISDB].[catalog].[grant_permission] @object_type=1, @object_id=1, @principal_id=10, @permission_type=1 GO EXEC [SSISDB].[catalog].[grant_permission] @object_type=1, @object_id=1, @principal_id=10, @permission_type=101 GO --Assign (Read) and (Read Objects) to sqlserver_unit_test for Project3 Folder EXEC [SSISDB].[catalog].[grant_permission] @object_type=1, @object_id=2, @principal_id=10, @permission_type=1 GO EXEC [SSISDB].[catalog].[grant_permission] @object_type=1, @object_id=2, @principal_id=10, @permission_type=101 GO
Operating Notes
- Case sensitivity: all package path and package name filters are case-sensitive. Wildcards:
?(single character),*(multiple characters), escape with\\. - Logs and diagnostics: view run logs with
./bigeye-agent lineage logs -c ssis, or share diagnostics with Bigeye support via./bigeye-agent lineage share-diagnostics -c ssis.
What's Next
- Browse other supported ETL lineage connectors in ETL Connectors.
- Contact Bigeye support or your Bigeye team if you need additional guidance for this connector.
