VS2017社区版数据库项目发布后EXECUTE权限未同步至SQL Server问题咨询
解决VS2017数据库项目发布时EXECUTE权限未同步的问题
我之前处理过类似的VS数据库项目权限同步问题,结合你的场景,大概率是项目部署配置或者权限组织方式的问题,下面是具体的排查和解决步骤:
1. 检查发布配置的权限处理策略
VS数据库项目的发布配置默认可能会跳过权限的部署,你需要调整这个设置:
- 打开你的发布配置文件(.publish.xml),点击窗口里的高级按钮
- 在弹出的「高级发布设置」窗口中,切换到对象类型选项卡
- 确保「权限(Permissions)」选项被勾选(默认可能没选)
- 再切到部署选项选项卡,确认「忽略权限(Ignore permissions)」没有被勾选
- 保存配置后重新发布,看看权限能不能同步上
2. 把权限从存储过程脚本里分离出来,单独创建权限对象
把GRANT语句写在存储过程末尾的方式,有时候不会被VS的项目系统识别成需要部署的内容。更稳妥的做法是单独管理权限脚本:
- 在你的数据库项目里新建一个「Permissions」文件夹(方便归类)
- 新建一个SQL脚本文件,比如
Grant_Execute_YourProcedure.sql - 在脚本里明确写权限授予语句,比如:
GRANT EXECUTE ON [dbo].[YourTargetStoredProcedure] TO [YourUserOrRole]; - 右键这个脚本文件→属性,把生成操作设置为「Build」,这样VS会把它纳入部署流程
- 重新生成项目再发布,这时候权限脚本就会作为部署的一部分被执行
3. 检查项目的数据库设置
有时候项目的全局设置会影响权限部署:
- 右键数据库项目→属性,选择「数据库设置」
- 切换到「权限」选项卡,确认「允许部署权限」这类选项是启用状态(不同版本表述可能略有差异)
4. 验证部署脚本是否包含权限语句
如果前面的步骤都没用,可以试试生成部署脚本(发布时选择「生成脚本」而非直接发布),看看生成的脚本里有没有你的GRANT语句。如果没有,说明VS没把权限识别成项目的一部分,回到前面的步骤检查配置;如果有,那可能是发布过程中某个环节跳过了执行,这时候可以手动运行生成的脚本测试。
你提到手动跑源脚本权限生效,是因为手动执行会直接触发GRANT语句,但VS的部署是基于架构对比的——只有被识别为项目对象的内容,才会被纳入差异对比和部署流程,所以把权限单独管理或者调整配置,才能让VS把权限同步到目标库。
内容的提问来源于stack exchange,提问作者Simon Sellick
相关产品推荐
相关产品推荐

