4

开始了一个新的 SSIS 项目,忘记将默认保护级别设置为“不保存敏感”(我们的标准) 现在在项目中途并进行了更改(在项目级别和每个包中。)检查时所有包都是Don't Save Sensitive 并且项目是 Don't Save Sensitive,但是在尝试构建时,我得到

项目一致性检查失败。检测到以下不一致: PACKAGE1.dtsx 的保护级别与项目不同。PACKAGE2.dtsx 具有与项目不同的 ProtectionLevel。... PACKAGE(N).dtsx 的 ProtectionLevel 与项目不同。

(它列出了项目中的每个包,即使它们都符合项目级别的保护。)

4

3 回答 3

11

我怀疑你遇到了和我一样的问题。我通过 API 更正了我的所有包,以便它们都表明它们DTS:ProtectionLevel="0"是不受保护的。

项目 (.dtproj) 文件还具有设置为 DontSaveSensitive 的保护级别。 <SSIS:Project SSIS:ProtectionLevel="DontSaveSensitive" xmlns:SSIS="www.microsoft.com/SqlServer/SSIS">

对我来说不匹配的是在项目文件中,它跟踪了关于每个包的太多信息,所以如果你向下滚动,你会看到每个包的条目,比如 <SSIS:Property SSIS:Name="ProtectionLevel">3</SSIS:Property>默认数字是什么。在0文件中创建(搜索和替换)。保存项目文件,它现在将构建。

您可能需要执行 Build All 来构建它。我怀疑 VS/SSDT 正在尝试使用它存储在 .dtproj 文件中的额外数据来确定它是否需要验证项目中的所有包。由于我们手动编辑了文件,它不会触发通常会翻转的任何传感器来表示需要完全重新编译。

于 2013-09-09T19:13:50.247 回答
2

billinkc 的答案对我不起作用,因为使用文本编辑器更改值并不能正确更改它。下面的 MSDN 页面解释了有一个命令行工具来管理这个:

http://technet.microsoft.com/en-us/library/cc879310.aspx

像这样:

for %f in (*.dtsx) do dtutil.exe /file %f /encrypt file;%f;2;strongpassword

它将项目中的每个模块更改为倒数第二个值中指定的保护级别。如果为 0,则不存储值,则不需要密码,可以去掉最后一个分号和后面的所有内容。

以下 MSDN 文章有一个表格,其中包含每个保护级别的数字,与 dtutil 一起使用:

http://technet.microsoft.com/en-us/library/ms141747.aspx

于 2014-04-07T12:16:32.073 回答
-2

Microsoft 已经打破了这一点,因此即使使用 DTUTIL 实用程序来更改包保护也不能修复项目文件元数据。

我必须对项目文件申请手动修复,以将存储包的包保护级别副本的元数据更改为与项目和包的相同。

仔细思考?可能不是。

获取包列表(已经部署并创建 DTUTIL 语句。将它们放入批处理文件并从命令行执行。

这仅适用于已部署的包,因为我们正在查看 SSISDB 而不是 Project 文件夹

USE SSISDB
DECLARE @projName VARCHAR(250) = 'Sales'

DECLARE @FolderPath VARCHAR(1000) = 'E:\ssis_' + @projName

DECLARE @DtutilString VARCHAR(1000) =
    '"C:\Program Files\Microsoft SQL Server\130\DTS\Binn\dtutil.exe"/file "'+ @FolderPath +'\XXX" /encrypt file;"'+ @FolderPath +'\XXX";0 /quiet'

SELECT DISTINCT
       REPLACE(@DtutilString, 'XXX', pack.[name])
--     SELECT *
FROM internal.packages AS pack
    INNER JOIN
        [internal].[projects] AS proj
        ON pack.project_id = proj.project_id

WHERE proj.name = 'ssis_' + @projName
于 2019-05-14T14:01:57.207 回答