首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sysadmin无法创建数据库。

Sysadmin无法创建数据库。
EN

Stack Overflow用户
提问于 2019-10-24 02:33:17
回答 2查看 962关注 0票数 0

我正在尝试安装一个MSI,这个MSI应该创建数据库并安装所有与之配套的应用程序。每当涉及创建数据库行时,MSI都会发出抱怨。

“用户无权创建数据库”

但实际上,用户可以访问Server上的sysadmin。当我试图通过SSMS直接创建DB时,它工作得很好。

它是一个安装在2016年Windows服务器上的2016年Server。

EN

回答 2

Stack Overflow用户

发布于 2019-10-24 06:25:46

sysadmin角色的

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

代码语言:javascript
复制
EXEC master..sp_addsrvrolemember @loginame = N'yourloginname', @rolename = N'dbcreator'
GO
票数 0
EN

Stack Overflow用户

发布于 2019-10-24 08:49:52

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

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

代码语言:javascript
复制
SELECT * FROM sys.messages WHERE language_id = 1033 AND message_id = 262

它将is_event_logged值设置为0,并设置为文本值:

在数据库‘’%1!‘’中拒绝

%1!权限。

我们可以启用此事件的日志记录(因此它在Server日志中是可查看的),但是它将记录所有丢失的权限事件,这取决于服务器的繁忙程度,而且可能是不可取的。

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

代码语言:javascript
复制
EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'true'

当安装程序运行并引发错误时,事件应该位于Server日志中(下面的示例只需在TSQL中使用未私密的用户完成):

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

代码语言:javascript
复制
EXEC sp_who2

此登录需要具有sysadmin/dbcreator,或者只需具有权限即可。

我强烈建议你跑:

代码语言:javascript
复制
EXEC sp_altermessage @message_id = 262, @parameter = 'WITH_LOG' ,@parameter_value = 'false'

将此错误的日志记录还原到Server日志时。希望这有助于缩小问题范围。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58533334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档