Azure数据库执行init.sh脚本时遇CREATE TABLE权限拒绝问题
问题描述
我有若干用于在Azure数据库中创建表的脚本,由init.sh触发执行。使用连接字符串中的同一用户登录SSMS手动执行脚本可成功完成,但通过代码执行时却报错:CREATE TABLE permission denied in database 'master'。我在虚拟机中Docker容器运行的SQL数据库上测试代码可正常创建表,排除代码问题,请问遗漏了什么?
排查要点
- 连接字符串未指定目标业务库:Azure SQL的
master是系统库,普通用户默认没有在该库创建表的权限。检查代码中的连接字符串,是否遗漏了Database=你的业务库名(或Initial Catalog=你的业务库名)参数?手动执行时你可能已在SSMS中切换到目标业务库,但代码执行时默认连接到了master库,导致权限报错。 - 用户默认数据库配置错误:如果连接字符串未指定数据库,会使用用户的默认数据库。确认该SQL用户在Azure Portal中的默认数据库是否设置为你的业务库——若默认是
master,代码执行时就会默认进入master库,触发权限问题。 - 脚本未切换到目标库上下文:手动执行脚本时,你可能已处于业务库的上下文,但代码执行脚本时,可能仍在
master库的上下文运行。检查脚本开头是否添加了USE 你的业务库;语句,确保脚本执行时切换到正确的数据库。 - 连接字符串参数不一致:对比手动使用的连接字符串和代码中的连接字符串,确认所有参数完全匹配,避免出现拼写错误或参数缺失的情况。
内容的提问来源于stack exchange,提问作者AGc
相关产品推荐
相关产品推荐

