Sql server Sysadmin无法创建数据库

Sql server Sysadmin无法创建数据库,sql-server,sql-server-2016,database-administration,windows-server-2016,Sql Server,Sql Server 2016,Database Administration,Windows Server 2016,我正在尝试安装一个MSI,它应该创建数据库并安装所有与之配套的应用程序。每次涉及到创建数据库行时,MSI都会失败 “用户无权创建数据库” 但实际上,用户在SQL Server上具有系统管理员访问权限。当我试图通过SSMS直接创建DB时,它工作得很好 它是安装在2016 Windows服务器上的2016 SQL Server sysadmin角色的成员默认为dbcreator服务器角色的成员,因此 也可以创建数据库。 您可以替换您的登录名并在下面运行查询和检查 对我来说,这个问题听起来像是安装程序

我正在尝试安装一个MSI,它应该创建数据库并安装所有与之配套的应用程序。每次涉及到创建数据库行时,MSI都会失败

“用户无权创建数据库”

但实际上,用户在SQL Server上具有系统管理员访问权限。当我试图通过SSMS直接创建DB时,它工作得很好

它是安装在2016 Windows服务器上的2016 SQL Server

sysadmin角色的成员默认为dbcreator服务器角色的成员,因此 也可以创建数据库。 您可以替换您的登录名并在下面运行查询和检查


对我来说,这个问题听起来像是安装程序使用了与预期不同的用户上下文。但很难追踪,因为默认情况下不会记录此错误,而且错误本身实际上非常普遍

深入了解一些细节,这似乎是一个权限错误。但是,在其上引发的错误是262,这是一个通用的“数据库中的权限被拒绝”。通过此查询可以查看:

SELECT * FROM sys.messages WHERE language_id = 1033 AND message_id = 262
将is_事件_记录值设置为0并作为文本值:

%数据库'%1!'中的权限被拒绝

我们可以启用此事件的日志记录(因此它可以在SQL Server日志中查看),但随后它将记录所有丢失的权限事件,这取决于服务器的繁忙程度,可能会非常多,并且可能是不需要的

但是,为了进一步了解安装程序在什么环境下进行操作,我们可以通过以下方式启用它:

EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'true'
当安装程序正在运行且引发错误时,事件应该出现在SQL Server日志中(下面的示例仅针对TSQL中的非特权用户执行):

现在知道SPID值后,我们可以使用sp_who2命令找到用户上下文。显示关联的登录名

EXEC sp_who2
此登录名必须是sysadmin/dbcreator,或者仅具有创建数据库服务器权限

我强烈建议您:

EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'false'

完成后,将此错误的日志记录还原为SQL Server日志。希望这有助于缩小问题的范围。

只是为了好玩,请确保已为用户分配了dbcreator角色。您是否已以管理员身份运行MSI?(提升权限)。@arcee123仍在获取“将数据库添加到服务器时出错”:(@DaleBurrell是的,我以管理员身份运行它。您是使用用户名密码还是windows身份验证?
EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'false'