当前位置: 首页 > 编程语言 > C#

DacPac在导出或导入时排除用户和登录Share

时间:2023-04-10 13:43:08 C#

DacPac在导出或导入时排除用户和登录一个简单的单元,它可以:从生产环境中的MsSql2012导出数据库方案在开发环境中将数据库方案导入MsSql2012我使用Microsoft.SqlServer.Dac执行此操作我可以导出/导入dac包。它工作得很好:),但在所有TDD和测试之后,现在是实时的,事实证明我完全错过了我的工作中有2个域。这意味着当我在开发环境中导入dacpac时,我会收到错误消息,因为我们的2个域没有完全双向信任,当然数据库中有来自两个域的用户。特别是生产域用户。我可以看到3种可能的解决方案来获得环境之间的完全信任。但由于我的工作实现了高级别的安全性,所以这不会发生。在没有用户的情况下导入dacpac。没有用户导出到dacpac。我已经阅读了文档(当然是模糊的)试图找到一组可以实现2)或3)的选项。我测试了很多组合,但没有一个有效。dacpacimport不断尝试创建用户并失败,因为生成的用户无法在开发环境中进行身份验证。我使用Deploy和Extract导出/导入。可以在此处找到不同的选项:提取:http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacextractoptions.aspx部署:http://technet.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacdeployoptions.aspx没有我发现有效的组合,我什至阅读了暗示这是DacPac中的错误的帖子。但我不确定。我现在正在研究的最后一个选项是使用GenerateScript方法,希望能够强制排除用户/登录,但恐怕这也行不通。请参阅(http://technet.microsoft.com/en-us/library/hh753526.aspx)。问题:如何在导出或导入时从我的dacpac中排除用户/登录?更新当前提取设置:IgnoreUserLoginMappings=true,VerifyExtraction=false,当前部署设置:CreateNewDatabase=true,DeployDatabaseInSingleUserMode=true,DisableAndReenableDdlTriggers=true,IgnoreUserSettingsObjects=true,更新到目前为止,一切都指向一个丑陋的解决方案,我可以使用DacServices生成部署脚本.然后我可以解析脚本(删除登录等)。然后将结果写入文件。然后在给定生成和解析文件的外部进程中调用SQLCMD。最后,我必须评估SQLCMD过程的结果。使用SQLCMD的原因是生成的脚本显然不是纯tsql,而是使用像':setvar'这样的东西,据我所知只有SQLCMD可以处理。ComeonMS...再一次,如果有人知道C#中的更好方法,或者知道DacPac程序集的错误修复/更新,请分享。?更新我发现IgnorePartitionSchemes之类的东西也不起作用。似乎命名空间Microsoft.SqlServer.Dac不仅有一点点,而且非常错误或缺乏实现。我设法通过部署以下dacpac文件解决了这个问题。重要的设置是ExcludeObjectTypes。conststringconnectionString=@"DataSource=(LocalDB)MSSQLLocalDB...";vardacServices=newDacServices(connectionString);//在输出窗口中显示部署。dacServices.Message+=(o,args)=>调试。WriteLine(args.Message);dacServices.ProgressChanged+=(o,args)=>Debug.WriteLine(args.Status);//加载file.vardacpac=DacPackage.Load("file.dacpac");varoptions=newDacDeployOptions{IgnorePermissions=true,IgnoreUserSettingsObjects=true,IgnoreLoginSids=true,IgnoreRoleMembership=true,//这是最终起作用的神奇设置。ExcludeObjectTypes=new[]{ObjectType.Users,ObjectType.Logins}ObjectType.Logins,}RoleType;dacServices.Deploy(dacpac,"MyDbName",true,options);在部署期间,重要的设置是“IgnoreUserSettingsObjects”。这会忽略用户、用户->登录和用户->架构关系。将其设置为true应该是使其工作的主要内容。在Extract上,您还可以将DacExtractOptions.IgnoreUserLoginMappings设置为true。在这种情况下,用户->登录映射不包括在内,但看起来在部署时忽略用户更重要。这意味着您需要在部署后运行脚本以确保存在正确的用户。我正在努力解决类似的问题。DACPAC只是一个包含3个XML文件的zip存档。我找到了dacpac操作工具的源代码并对其进行了修改以剥离用户并登录DACPAC。我们处理这个问题的方法是简单地排除包含敏感安全信息的表,并用通用信息重新插入它们。DacServices.ExportBacpac方法有一个重载,需要包含一个表列表;这样您就可以创建一个不包含要跳过的表的列表。原来它会包含表格,它只是忽略了数据。因此,我们使用它来从prod中获取bacpac,然后将其导入我们的本地开发机器(由于此命令以编程方式跳过敏感数据,因此已对其进行清理);然后我们运行一些插入脚本来填充用户表,例如使用具有通用密码的全局管理员用户。在这里查看带有表列表的重载:https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dac.dacservices.exportbacpac(v=sql.120).aspx以上是C#学习教程:DacPac在导出或导入时排除用户和登录共享的所有内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权请点击右侧联系管理员删除。如需转载请注明出处: