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

时间:2012-02-07 22:42:42

标签: sql-server permissions sql-server-2008r2-express

最近刚升级到SQL Server 2008 R2 Express。当我使用Windows身份验证使用我的id myuser登录后尝试创建数据库时,我收到此错误:

  

执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
  数据库“master”中的CREATE DATABASE权限被拒绝。 RESTORE HEADERONLY异常终止错误262

如果我尝试将sysadmin角色添加到myuser,这是我收到的错误:

  

为ServerRole'sysadmin'添加成员失败。 (Microsoft.SqlServer.Smo)
  执行Transact-SQL语句或批处理时发生异常。 (Microsoft.SqlServer.ConnectionInfo)
  用户无权执行此操作错误15247

如果我尝试使用此命令将此角色添加到使用T-SQL的用户

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

以下是我收到的错误:

  

消息15247,级别16,状态1,过程sp_addsrvrolemember,第29行
  用户无权执行此操作。

有没有人有任何建议?看来我在本地机器上无法对数据库做任何事情。请注意,我是我正在使用的Windows 7工作站的管理员,如果我尝试使用SQL Server Management Studio在我们的网络IT测试数据库服务器上创建或修改数据库和/或用户,我可以毫无问题地执行此操作。

5 个答案:

答案 0 :(得分:38)

派对迟到了,但是如果你没有密码,我发现这个fantastic step-by-step guide可以控制你的SQLExpress实例。我使用此过程不仅重置了我的sa密码,而且还将我的域帐户添加到所有可用的服务器角色。我现在可以使用正常登录创建数据库,更改登录,执行批量操作,备份/恢复等。

总而言之,您使用SQL Server配置管理器将您的实例置于单用户模式。当你连接时,这会将你提升到系统管理员,让你能够设置一切。

编辑:我已经复制了以下步骤 - 感谢上述链接的原始作者。

  1. 以管理员(或具有管理员权限的任何用户)
  2. 登录计算机
  3. 打开“SQL Server配置管理器”
  4. 单击左窗格中的“SQL Server服务”
  5. 如果正在运行,请停止右窗格中的“SQL Server”和“SQL Server代理”实例
  6. 右键单击“SQL Server”实例 - >以单用户模式运行SQL Express属性(在SQL Server配置管理器的右窗格中)。
  7. 单击“高级”选项卡,然后查找“启动参数”。更改“启动参数”,以便新值为-m; (没有<>) 例: 来自:-dc:\ Program Files \ Microsoft SQL .............(直到字符串的结尾) to:-m; -dc:\ Program Files \ Microsoft SQL .............(直到字符串结尾)
  8. 启动SQL Server
  9. 打开MS SQL Server Management Studio并使用“Windows身份验证”作为身份验证模式登录到SQL Server。由于我们在单用户模式下运行SQL Server,并且您使用管理员权限登录到计算机,因此您将拥有对数据库的“sysadmin”访问权限。
  10. 在左窗格中展开MS SQL Server Management Studio上的“安全”节点
  11. 展开“登录”节点
  12. 双击“sa”登录
  13. 如果选中“强制密码策略”,则输入复杂密码更改密码,否则,只需输入任何密码。
  14. 单击左窗格中的“状态”,确保“sa”帐户已“启用”。将“登录”下的单选框设置为“已启用”
  15. 点击“确定”
  16. 返回MS SQL Server Management Studio的主窗口,右键单击左窗格中最顶层的节点(通常为“。\ SQLEXPRESS(SQL Server)”)并选择属性,验证是否使用了SQL Server身份验证。
  17. 单击左窗格中的“安全性”,确保“SQL Server和Windows身份验证模式”是在“服务器身份验证”下选择的模式
  18. 点击“确定”
  19. 与MS SQL Server Management Studio断开连接
  20. 再次打开“Sql Server Configuration Manager”并停止SQL Server实例。
  21. 右键单击SQL Server实例,然后单击“高级”选项卡。再次查找“启动参数”并删除“-m;”你之前添加的。
  22. 单击“确定”并再次启动SQL Server实例
  23. 您现在应该可以使用在步骤12中设置的新密码以“sa”身份登录。

答案 1 :(得分:14)

您可能是工作站的管理员,但这对SQL Server没有任何意义。您的登录名必须是sysadmin角色的成员才能执行相关操作。默认情况下,不再将本地管理员组添加到SQL 2008 R2中的sysadmin角色。您需要使用其他东西(例如sa)登录才能授予您自己的权限。

答案 2 :(得分:2)

在SSMS 2012中,您必须使用:

要启用单用户模式,在SQL实例属性中,请勿转到" Advance"标签,已经有一个"启动参数"标签。

  1. 添加" -m;"参数;
  2. 使用Windows身份验证重新启动服务并登录此SQL实例;
  3. 其余步骤与上述相同。在安全性中更改您的Windows用户帐户权限或重置SA帐户密码。
  4. 最后,删除" -m"来自"启动参数";
  5. 的参数

答案 3 :(得分:1)

我按照了killthrush的回答中的步骤,令我惊讶的是它没有用。以sa身份登录我可以看到我的Windows域用户并使他们成为系统管理员,但是当我尝试使用Windows身份验证登录时,我无法在登录状态下看到我的登录信息,无法创建数据库等等。它击中了我。 该登录可能与另一个具有相同名称的域帐户相关联(某种内部/隐藏ID并非正确)。我离开了该组织一段时间后又回来了几个月后。他们创建了一个具有相同域\用户名和新内部ID的新帐户,而不是重新激活我的旧帐户(他们可能已删除)。使用sa我删除了我的旧登录名,重新添加了相同名称并添加了sysadmin。我使用Windows Auth重新登录,一切看起来都应该如此。我现在可以看到我的登录(和其他人),并且可以使用我的Windows身份验证登录作为系统管理员做我需要做的任何事情。

答案 4 :(得分:0)

我的Windows机器上有2个帐户,我遇到了其中一个问题。我不想使用List<string> newCodes = new List<string>() foreach (string sub1 in codes.Select(item => item.Substring(0,2)).Distinct) { StringBuilder code = new StringBuilder(); code.Append("sub1("); foreach (string sub2 in codes.Where(item => item.Substring(0,2) == sub1).Select(item => item.Substring(2)) code.Append(sub2 + ","); code.Append(")"); newCodes.Add(code.ToString()); } 帐户,我想使用Windows登录。对我来说,我不需要立即登录我用来安装SQL Server的其他帐户,并从那里添加新帐户的权限

sa

获取您需要添加的完整域名的简便方法每个人都可以打开cmd echo。

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

为该用户添加一个登录名,并为主db和所需的其他数据库提供所有权限。当我说“所有权限”时,请确保不检查任何“拒绝”权限,因为这样做会相反。