DbUp for SQL Server非dbo用户创建Schema归属dbo权限的原因咨询
问题原因与解决方案
核心原因
你的连接字符串存在配置冲突,导致DbUp实际使用Windows身份验证而非指定的SQL账户MyTestUser。
SQL Server的连接字符串规则明确:当同时设置User ID/Password和integrated security=True时,Windows身份验证会被优先采用。也就是说,DbUp运行时是用当前执行程序的Windows账户(比如你的开发机器本地账户)连接数据库的,而非你指定的MyTestUser。这个Windows账户大概率是数据库的dbo或拥有db_owner权限,因此创建的Schema会自动归属dbo。
而你手动执行SQL时,是直接以MyTestUser身份登录数据库,CURRENT_USER就是MyTestUser,所以Schema归属符合预期。
解决方案
修改连接字符串,将integrated security=True改为integrated security=False,强制使用SQL身份验证:
data source=localhost\sqlexpress;initial catalog=MyTest;User ID=MyTestUser;Password=SuperSecret;integrated security=False;MultipleActiveResultSets=False
验证步骤
可以在升级脚本中添加以下语句,确认DbUp执行时的实际账户上下文:
PRINT 'CURRENT_USER: ' + CURRENT_USER PRINT '实际登录账户: ' + SUSER_SNAME()
执行后查看DbUp日志,就能确认是否使用了MyTestUser账户。
内容的提问来源于stack exchange,提问作者RollerMobster
相关产品推荐
相关产品推荐

