我正在尝试安装一个MSI,这个MSI应该创建数据库并安装所有与之配套的应用程序。每当涉及创建数据库行时,MSI都会发出抱怨。
“用户无权创建数据库”
但实际上,用户可以访问Server上的sysadmin。当我试图通过SSMS直接创建DB时,它工作得很好。
它是一个安装在2016年Windows服务器上的2016年Server。
发布于 2019-10-24 06:25:46
sysadmin角色的
成员在默认情况下是dbcreator服务器角色的成员,因此他们也可以创建数据库。您可以替换您的登录名,并在查询和检查下面运行。
EXEC master..sp_addsrvrolemember @loginame = N'yourloginname', @rolename = N'dbcreator'
GO发布于 2019-10-24 08:49:52
在我看来,这个问题听起来像是安装程序使用了与预期不同的用户上下文。但是很难追踪到这个错误,因为这个错误在默认情况下不会被记录,而且错误本身实际上是非常通用的。
进入一些细节,这似乎是一个权限错误。但是,引发的错误是262,这是一个通用的“数据库中拒绝的权限”。可通过此查询查看:
SELECT * FROM sys.messages WHERE language_id = 1033 AND message_id = 262它将is_event_logged值设置为0,并设置为文本值:
在数据库‘’%1!‘’中拒绝
%1!权限。
我们可以启用此事件的日志记录(因此它在Server日志中是可查看的),但是它将记录所有丢失的权限事件,这取决于服务器的繁忙程度,而且可能是不可取的。
但是,为了进一步了解安装程序在什么环境下执行它的操作,我们可以通过以下方式启用它:
EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'true'当安装程序运行并引发错误时,事件应该位于Server日志中(下面的示例只需在TSQL中使用未私密的用户完成):

现在知道了SPID值,我们就可以使用sp_who2命令找到用户上下文。它显示了相关的登录。
EXEC sp_who2此登录需要具有sysadmin/dbcreator,或者只需具有权限即可。
我强烈建议你跑:
EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'false'将此错误的日志记录还原到Server日志时。希望这有助于缩小问题范围。
https://stackoverflow.com/questions/58533334
复制相似问题