我正在从事企业项目中的存储过程加密.我们有一堆SP应该在生产时受到保护.在每个SP中
设置WITH ENCRYPTION参数没有问题sqlproj.但我想让这个指令可选:如果我在调试模式下构建项目 - 不要应用此过程选项,否则 - 使用它.实际上,这里的主要目标是为没有加密的开发人员提供数据库,但是在生产 - 加密的SP上.
在构建任务中
使用PowerShell脚本我可以修改生成的sql文件,结果得到带有加密参数的脚本,但我想知道它是如何工作的dacpac.
有什么建议?
更新:
花了一些时间玩msbuild.我决定PowerShell在SqlCore目标之后停止(至少现在)使用脚本任务的解决方案:
<Import Project="$(ExtensionTasksPath)MSBuild.ExtensionPack.tasks" Condition="Exists('$(ExtensionTasksPath)MSBuild.ExtensionPack.dll')" />
<UsingTask TaskFactory="PowershellTaskFactory" TaskName="CreateDecryptedScript" AssemblyFile="$(PowerShellTaskAssembly)" Condition="Exists('$(PowerShellTaskAssembly)')">
<ParameterGroup>
<File Required="true" ParameterType="System.String" />
<ResultFile Required="true" ParameterType="System.String" />
</ParameterGroup>
<Task>
<![CDATA[
(Get-Content $file) | Foreach-Object {$_ -replace 'WITH ENCRYPTION', '--WITH ENCRYPTION'} | Set-Content $resultfile
]]>
</Task>
</UsingTask>
<Target Name="CreateDecryptedScript" AfterTargets="SqlCore">
<CreateDecryptedScript File="$(OutputPath)$(CreateScriptFileName)" ResultFile="$(OutputPath)$(DecryptedScriptName)" Condition="Exists('$(PowerShellTaskAssembly)')" />
</Target>
Run Code Online (Sandbox Code Playgroud)
因此,在重建项目之后,我们有了无需加密即可创建数据库的脚本.
但是publish从项目中调用的不会强制发生这种情况,我们将使用加密来改变所有SP.
sql-server encryption msbuild visual-studio sql-server-data-tools
我一直在使用 .dacpacs 将数据库更新部署到我们的各种环境中。我发现了一种导致特定更新发布失败的情况。
我需要添加一个新表dbo.Supplier,并向另一个表添加一列dbo.PickZone,该表具有引用新表的不可为空的外键。SSDT 项目中的架构反映了这一点,为了准备新的 NOT NULL 列,我有以下预部署脚本;
IF object_id('dbo.Supplier') IS NULL
BEGIN
CREATE TABLE [dbo].[Supplier]
(
[SupplierId] INT IDENTITY(1,1) NOT NULL,
[Name] varchar(50) NOT NULL,
CONSTRAINT [PK_Supplier] PRIMARY KEY CLUSTERED ([SupplierId])
);
SET IDENTITY_INSERT [dbo].[Supplier] ON;
INSERT INTO Supplier (SupplierId, Name) VALUES (1, 'Default Supplier')
SET IDENTITY_INSERT [dbo].[Supplier] OFF;
ALTER TABLE dbo.PickZone ADD SupplierId int NULL;
UPDATE PickZone SET SupplierId = 1
END
Run Code Online (Sandbox Code Playgroud)
上面的脚本更新架构和数据,以确保在发布时(我使用 sqlpackage.exe)将外键约束应用于dbo.PickZone.SupplierId:
CREATE TABLE [dbo].[PickZone]
(
[PickZoneId] INT IDENTITY (1, …Run Code Online (Sandbox Code Playgroud) sql-server-2008 visual-studio-2012 dacpac sql-server-data-tools
我已经将一个数据库导入到一个数据库项目中,直接从bat中我得到了200多个关于未解析引用的错误.现在我已经阅读了几个这样的帖子和网站(http://blogs.msdn.com/b/bahill/archive/2009/08/26/using-self-referencing-or-local-3-part-names .aspx)原因是3部分名称.
解决方案是右键单击数据库项目>重构>重命名服务器/数据库引用.然而,我的窗口与前面提到的网站的窗口不同,下拉菜单是空的.我正在使用带有SSDT 2010的Visual Studio 2010专业版.如何理解这一点的任何帮助表示赞赏.
我需要导入大约20到30个数据库,并且手动纠正所有这些错误几乎是不可能的.

我们一直使用.sqlproj扩展使用VS2012 SSDT进行数据库设计和开发,并使用带有DACPAC的SQLPackage部署到SQL Server ...或者从Visual Studio设置发布规则.
我们已将数据库迁移到Amazon RDS SQL Server.
我们最近对数据库设计做了一些更改,并且我尝试发布更改,但是我收到了这个错误.
Error SQL72014: .Net SqlClient Data Provider: Msg 15151, Level 16, State 1, Line 1 Cannot find the user 'dbo', because it does not exist or you do not have permission.
Error SQL72045: Script execution error. The executed script:
REVOKE INSERT
ON OBJECT::[dbo].[table_name] TO [database_role] CASCADE
AS [dbo];
Run Code Online (Sandbox Code Playgroud)
我到处搜索了如何将这种类型的数据库项目发布到亚马逊,除了为模式维护本地SQL Server数据库并购买Red-Gate SQL Compare以迁移更改..我很难过...
任何建议将不胜感激.
amazon-web-services amazon-rds sqlproj sqlpackage sql-server-data-tools
我的机器有当前(2014 年 3 月)版本的 SSDT、Visual Studio 2012 Professional 和 SQL Server 2014 Developer。我有一个MyProject.sqlproj针对 SQL Server 2014的 SQL Server 项目(我们称之为)。我尝试了以下操作:
MsBuild.exe MyProject.sqlproj
/t:SqlPublish /p:SqlPublishProfilePath=Somewhere.publish.xml
Run Code Online (Sandbox Code Playgroud)
这失败并出现以下错误:
部署错误 部署 72002:内部错误。
类型为 Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider 的数据库平台服务无效。您必须确保服务已加载,或者您必须提供有效数据库平台服务的完整类型名称。
如果我将此项目切换到目标 2012(并指向 2012 实例),则相同的命令会成功运行。我之前问过一个可能相关的问题,那里的答案解决了我的问题,但这不是这里的问题——如果我SqlPackage.exe直接使用,我可以成功发布这个 2014 DACPAC 。
发生了什么,我该如何解决?
我想编写两个SSDT项目之间的模式比较所产生的更改的脚本,但是当源和目标都是SSDT项目时,"生成脚本"按钮会变灰/禁用.
"更新"按钮不会显示为灰色.如果我想直接更新,我可以.但我需要脚本,因为我使用这两个管理两个不在同一网络上的数据库环境(但需要与db模式和代码促销同步).
另外,只是为了验证和强化,如果我的目标是真正的数据库而不是项目,我可以生成脚本.它只有当目标是一个我无法生成脚本的项目时.不幸的是我无法直接连接到目标数据库.
我真的想避免在本地为每个客户端数据库环境创建数据库副本,只是为了生成脚本(我已经为每个客户端安装了SSDT项目).
这是故意的限制吗?看起来很奇怪.我不能成为第一个必须管理我无法从我的开发机器直接连接的客户端架构的人.
在SSRS中,将报表元素放在矩形中是一种好习惯。

这样就可以通过移动矩形一次移动多个项目。用鼠标四处移动矩形时,这就像一种魅力:矩形内的Tablix位置保持不变,因此矩形将所有内容就位移动到另一个位置:

但是,当您手动(通过属性窗格中的“顶部” /“左侧”属性)更改这些矩形在“设计模式”下的位置时,该矩形会移动,但内容将保留在同一位置。因此,每当我通过属性窗格(更精确的IMHO)进行相同的移动时,内容都不会随矩形一起移动,并且有时甚至变得不可见:

只要您在报表的XML内部直接更改Rectangle的位置(在“代码模式”下),内容就会正确移动-但这是一种非常耗时的方法。
有没有一种方法可以使SSRS在设计模式下沿矩形内容移动,即使通过属性窗格更改了矩形的位置也是如此?
我们正在使用SSDT工具将Visual Studio 2015和目标平台设置为SQL Server 2008.我们坚持使用此功能,这会导致错误并需要帮助我们可以采取哪些措施来解决问题.
SQL71501: Function: [dbo].[GetFormattedAddress] has an unresolved reference to Assembly [AddressFormatting]
CREATE FUNCTION [dbo].[GetFormattedAddress]
(@AddressID INT, @CompleteAddress BIT)
RETURNS NVARCHAR (4000)
AS
EXTERNAL NAME [AddressFormatting].[AddressFormatting.UserDefinedFunctions].[GetFormattedAddress]
GO
Run Code Online (Sandbox Code Playgroud)
--update
在Assemblies文件夹下,对于AddressFormatting.dll,我将BuildAction设置为Build,然后在References下我设法看到Model Aware属性,我现在已经设置为True.在此之后,我收到以下错误:
它指向错误的文件是AddressFormatting.dll
如何将blob名称作为变量Azure Blob Destination输入SSIS,就像将tablename作为变量传递一样OLEDB destination?
sql-server ssis etl azure-storage-blobs sql-server-data-tools
我们已经开始使用SSDT来管理脚本部署。最初,我们使用Schema Compare并取消选中了我们不想部署的部分。现在,我们需要使用仅包含在“发布”功能中的“预部署”和“部署后”脚本,并且我们还尝试清理排除的部分。
在发布中添加了2个差异,但没有在“模式比较”中添加这些差异,即使设置与我可以设置的相近,我似乎也无法弄清。
首先是Publish脚本想要删除dacpac中不存在的表的统计信息,即使DropStatisticsNotInSource将其设置为false。我能够根据SSDT / SqlPackage丢弃统计信息中的DeploymentFilterContributor答案来解决此问题。
第二个继续让我难过。大多数应用程序安全性都是通过授予角色来实现的,并且取决于环境,使各个系统帐户成为成员,但是在dev数据库中,也没有角色的用户(通常是管理员,但具有各种权限的实用程序)。我们在不同的环境中有不同的用户。我的长期目标是仅让用户担任角色,但我们还没有。同时,我们需要将用户排除在外。我从设置Exclude Users,开始ExcludeLogins,ExcludeRoleMembership这是我们在“模式比较”中使用的功能,并且效果很好。但是,在“发布”脚本中,我们获得了REVOKE CONNECT脚本(但不是DROP LOGIN或DROP USER)。
我已经阅读了使用SqlPackage.exe发布DACPAC时防止用户掉线,以及在SqlPackage.exe部署的dacpac中创建用户时导致登录失败SqlException(这看起来像是类似的脚本结果,目的不同,也没有答案)。我曾尝试使用AgileSqlClub.DeploymentFilterContributor有IgnoreType(Login),IgnoreType(User),IgnoreType(RoleMembership),以及IgnoreType(Permissions),IgnoreSecurity。前3个无效。最后2个(我也尝试过等效的SSDT config选项)也删除GRANT了我想针对数据库角色包含的脚本。
我觉得我应该能够执行此操作而无需创建自定义项DeploymentContributor,也无需在部署后编写所有这些用户的脚本。我如何摆脱这些REVOKE CONNECT电话?
另外,如果有人知道Visual Studio是否实际上在其路径中调用SqlPackage.exe或正在使用库,那么我将很感激该信息...我似乎无法使计算机上的5个SqlPackage.exe中的任何一个都能正常工作VS使用的内置.dacpac和.publish.xml文件。
我包含完整的发布配置文件以供参考:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<AdditionalDeploymentContributors>AgileSqlClub.DeploymentFilterContributor</AdditionalDeploymentContributors>
<!--AdditionalDeploymentContributorArguments>SqlPackageFilter0=IgnoreType(Statistics);SqlPackageFilter1=IgnoreType(Login);SqlPackageFilter2=IgnoreType(User);SqlPackageFilter3=IgnoreType(RoleMembership);SqlPackageFilter4=IgnoreSchema(SEQUENCES)</AdditionalDeploymentContributorArguments-->
<!--AdditionalDeploymentContributorArguments>SqlPackageFilter4=IgnoreSchema(SEQUENCES)</AdditionalDeploymentContributorArguments-->
<AdditionalDeploymentContributorArguments>SqlPackageFilter0=IgnoreType(Statistics);SqlPackageFilter1=IgnoreSecurity</AdditionalDeploymentContributorArguments>
<IncludeCompositeObjects>True</IncludeCompositeObjects>
<TargetDatabaseName>BRM</TargetDatabaseName>
<DeployScriptFileName>BRM.sql</DeployScriptFileName>
<TargetConnectionString>Data Source=mydb;Integrated Security=True;Persist Security Info=False;Pooling=False;MultipleActiveResultSets=False;Connect Timeout=60;Encrypt=False;TrustServerCertificate=True</TargetConnectionString>
<BlockOnPossibleDataLoss>True</BlockOnPossibleDataLoss>
<ExcludeAggregates>False</ExcludeAggregates>
<ExcludeApplicationRoles>False</ExcludeApplicationRoles> …Run Code Online (Sandbox Code Playgroud) sql-server ×3
msbuild ×2
sqlpackage ×2
amazon-rds ×1
dacpac ×1
database ×1
encryption ×1
etl ×1
sqlclr ×1
sqlproj ×1
ssis ×1