SQL Server 2008 R2 Express权限 -- 无法创建数据库或修改用户

18

最近刚升级到 SQL Server 2008 R2 Express,使用 Windows 身份验证方式并登录我的用户 ID myuser 后尝试创建数据库时收到了以下错误:

  

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
  CREATE DATABASE permission denied in database 'master'. RESTORE HEADERONLY is terminating abnormally Error 262

如果我尝试将 sysadmin 角色添加给 myuser,就会收到以下错误:

  

Add member failed for ServerRole 'sysadmin'. (Microsoft.SqlServer.Smo)
  An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)
  User does not have permission to perform this action Error 15247

如果我尝试使用以下命令将此角色添加到我的用户中:

EXEC sp_addsrvrolemember 'ziffenergy\myuser', 'sysadmin';
GO

我收到的错误信息如下:

Msg 15247,Level 16,State 1,Procedure sp_addsrvrolemember,Line 29
用户无权执行此操作。

有人能提供建议吗?似乎我无法在本地机器上对数据库进行任何操作。请注意,我是使用 Windows 7 工作站上的管理员,如果我尝试在我们的网络 IT Test 数据库服务器上使用 SQL Server Management Studio 创建或修改数据库和/或用户,我可以轻松完成。

6个回答

40
我来晚了,但我发现这个逐步指南非常棒,它可以帮助你控制你的SQLExpress实例,即使你没有sa密码。 我使用这个过程不仅重置了我的sa密码,还将我的域帐户添加到所有可用的服务器角色中。 现在我可以使用我的普通登录创建数据库、更改登录、进行批量操作、备份/还原等操作。
总之,您可以使用SQL Server Configuration Manager将实例设置为单用户模式。 连接时,这将提升您的权限为sysadmin,允许您设置所有东西。
编辑:我复制了以下步骤-致敬上述链接的原始作者。
请以管理员身份登录电脑(或任何具有管理员权限的用户),打开“SQL Server配置管理器”,在左侧窗格上单击“SQL Server服务”,如果正在运行,则停止右侧窗格上的“SQL Server”和“SQL Server代理”实例,通过右键单击“SQL Server”实例 ->属性(在SQL Server配置管理器的右侧窗格上)以单用户模式运行SQL Express。单击高级选项卡,并查找“启动参数”。更改“启动参数”,使新值为-m;(不包括<>)。例如:从:-dc:\ Program Files \ Microsoft SQL .............(直到字符串结束)到:-m; -dc:\ Program Files \ Microsoft SQL .............(到字符串结束)。启动SQL Server,使用“Windows身份验证”作为身份验证模式登录到SQL服务器的MS SQL Server Management Studio中。由于我们将SQL Server运行在单用户模式下,并且您已使用管理员权限登录到计算机上,因此您将对数据库拥有“sysadmin”访问权限。在MS SQL Server Management Studio的左侧窗格上展开“安全性”节点,展开“登录”节点,双击'sa'登录名,如果勾选了“强制密码策略”,请通过输入复杂密码来更改密码,否则只需输入任何密码。通过单击左侧窗格上的状态,将“sa”帐户设置为“启用”。将“登录”下的单选框设置为“已启用”,然后单击“确定”。在MS SQL Server Management Studio的主窗口上,通过右键单击左侧窗格中最上面的节点(通常为“.\ SQLEXPRESS(SQL Server)”)并选择属性来验证是否使用了SQL Server身份验证。单击左侧窗格中的“安全性”,并确保“服务器身份验证”下选择了“SQL Server和Windows身份验证模式”。单击“确定”,断开与MS SQL Server Management Studio的连接。再次打开“Sql Server配置管理器”,停止SQL Server实例。右键单击SQL Server实例,单击“高级”选项卡。再次查找“启动参数”并删除您之前添加的“-m;”。单击“确定”并重新启动SQL Server实例。现在,您应该能够使用步骤12中设置的新密码作为“sa”登录。

1
也适用于Sql Server 2008 R2企业版。谢谢! - Edo
非常感谢。它在SQL Server 2008 R2中对我起作用了。你节省了我的许多天时间... - Sohel Pathan

16

在计算机上你可能是管理员,但这对 SQL Server 没有任何意义。你的登录账户必须是 sysadmin 角色的成员才能执行所需操作。默认情况下,在 SQL 2008 R2 中不再将本地管理员组添加到 sysadmin 角色中。因此,你需要使用其他账户(例如 sa)登录以授予自己权限。


谢谢您的反馈。是的,我已经尝试使用sa登录;但是,当我尝试为sa设置密码时,我收到了以下错误消息:“更改Login 'sa'的密码失败。(Microsoft.SqlServer.Smo)执行Transact-SQL语句或批处理时发生异常。(Microsoft.SqlServer.ConnectionInfo)无法更改登录名'sa',因为它不存在或您没有权限。(Microsoft SQL Server,错误:15151)”有什么想法吗? - user8128167
这是同样的问题。您将无法设置密码,因为您的帐户在SQL实例中没有必要的权限。如果您不知道具有sysadmin特权(或其他某些非常不可能在您的情况下出现的更专业的特权)的帐户的登录详细信息,则需要从知道的人那里获取它。 - squillman
1
但是我是在我的工作站上安装了SQL Server 2008 R2软件的人,所以我不应该拥有所需的权限吗? - user8128167
2
如果在 SQL Server 安装期间专门设置了您的帐户(它会要求您添加到 sysadmin 组的帐户),那么是的。它不会自动将您添加到 sysadmin 组,也不会自动添加除 sa 之外的任何内容。它应该在安装过程中要求您设置 sa 密码。您还记得吗? - squillman
太好了!我从我的账户注销,然后作为管理员登录到工作站,并从那里执行了sp_addsrvrolemember存储过程,现在我可以使用我的roger.moore用户账户来管理数据库。谢谢! - user8128167
1
进一步澄清一下,实际上我并没有选择混合模式身份验证(如果是这样的话,我会指定一个sa密码)。相反,我选择了“Windows身份验证”,但在执行我上面评论中提到的sp_addsrvrolemember操作之前,我仍然没有权限创建数据库。 - user8128167

3
在SSMS 2012中,您需要执行以下操作:
在SQL实例属性中,要启用单用户模式,请不要进入“高级”标签,因为已经有一个“启动参数”标签。
1.在参数中添加“-m;”
2.重新启动服务,并使用Windows身份验证登录此SQL实例;
3.其余步骤与上述相同。在安全性中更改您的Windows用户帐户权限或重置SA帐户密码。
4.最后,从“启动参数”中删除“-m”参数。

1
我按照killthrush的回答所述步骤操作,但令我惊讶的是它并没有起作用。以sa身份登录后,我能看到我的Windows域用户,并将其设置为sysadmin,但当我尝试使用Windows身份验证登录时,我无法在登录中看到我的登录名,也无法创建数据库等。然后我意识到,那个登录名可能与另一个具有相同名称的域帐户相关联(具有某种内部/隐藏ID不正确)。我已经离开这个组织一段时间了,几个月后又回来了。他们没有重新激活我的旧帐户(他们可能已经删除了),而是创建了一个具有相同域\用户名和新内部ID的新帐户。使用sa,我删除了我的旧登录名,重新添加了相同名称并添加了sysadmin。我使用Windows身份验证登录后,一切都看起来正常。我现在可以看到我的登录名(和其他登录名),并且可以像sysadmin一样执行需要做的任何操作。

关于域帐户的好处是一个很好的观点 - 底层可能有不同的SID。为了验证这种情况,可以使用PowerShell而不会太痛苦:http://windowsitpro.com/windows-server/find-sid-account-using-powershell - killthrush

0

我之前遇到了同样的问题,直到我找到了this。 我打开一个新的查询并运行了以下命令。

RESTORE DATABASE <YourDatabase> 
FROM DISK='<the path to your backup file>\<YourDatabase>.bak'

然后右键单击 Databases -> 还原数据库 -> 选择 设备 -> 点击 ... -> 添加 您的数据集 -> 点击 确定


0

我在我的Windows机器上有2个帐户,其中一个遇到了这个问题。我不想使用sa帐户,而是想使用Windows登录。对我来说,很明显我需要简单地登录到我用于安装SQL Server的另一个帐户,并从那里添加新帐户的权限。

(SSMS > Security > Logins > Add a login there)

获取您需要添加的完整域名的简单方法是打开cmd并依次输入echo each one。

echo %userdomain%\%username%

为该用户添加登录并授予其主数据库和其他数据库的所有权限。当我说“所有权限”时,请确保不要选中任何“拒绝”权限,因为那样会产生相反的效果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接