执行在目标数据库上具有db_owner权限的模式比较时,会导致以下错误:
用户无权执行此操作。
使用SQL Server Profiler我发现执行针对主db视图的查询时出现此错误:[sys]。[dm_database_encryption_keys]
虽然明确忽略了所有对象类型但表,但可以假定SQL Compare不需要访问db加密密钥。 另请注意:
http://social.msdn.microsoft.com/Forums/en-US/vstsdb/thread/c11a5f8a-b9cc-454f-ba77-e1c69141d64b/
一个解决方案是将GRANT VIEW SERVER STATE提供给db用户,但在我的情况下,我不托管数据库服务,也不会获得服务器状态的权限。
还尝试在比较文件中排除DatabaseEncryptionKey元素。
<PropertyElementName>
<Name>Microsoft.Data.Schema.Sql.SchemaModel.SqlServer.ISql100DatabaseEncryptionKey</Name>
<Value>ExcludedType</Value>
</PropertyElementName>
任何人都有解决方法吗?
我们使用MS Data Tools比较从数据库项目发布到DTAP环境。
答案 0 :(得分:1)
我发现的唯一成功的解决方法是将架构部署到本地开发数据库,然后使用该本地数据库作为源而不是数据库项目进行架构比较。
在这种情况下仍会出现错误,但不再禁用Write Updates
按钮,并且架构会按预期更新。
答案 1 :(得分:0)
为什么不能尝试其他(外部)架构比较工具? 查看Red gate的SQL Compare。
答案 2 :(得分:0)