2012-02-07 270 views
14

最近刚刚升级到SQL Server 2008 R2 Express。当我尝试使用Windows身份验证与我的ID roger.moore登录后创建数据库我收到此错误:SQL Server 2008 R2 Express权限 - 无法创建数据库或修改用户

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角色来roger.moore,这是我收到的错误:

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

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

EXEC sp_addsrvrolemember 'ziffenergy\roger.moore', 'sysadmin'; 
GO 

这是我收到的错误:

Msg 15247, Level 16, State 1, Procedure sp_addsrvrolemember, Line 29
User does not have permission to perform this action.

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

回答

12

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

+0

谢谢您的反馈意见。是的,我尝试使用sa登录; (Microsoft.SqlServer.Smo)执行Transact-SQL语句或批处理时发生异常(Microsoft .SqlServer.ConnectionInfo)无法更改登录'sa',因为它不存在或您没有权限。(Microsoft SQL Server,错误:15151)“任何想法? – Roger 2012-02-08 00:12:37

+0

这是同样的问题。您将无法设置密码,因为您的帐户在您的SQL实例中没有必要的权限。如果您不知道登录详细信息(如果具有系统管理员权限的帐户)(或者某些其他更加专业化的权限在您的情况下不太可能),那么您需要从某人那里获得权限。 – squillman 2012-02-08 00:58:04

+1

但是我是在我的工作站上安装了SQL Server 2008 R2软件的人,所以我不应该拥有所需的权限? – Roger 2012-02-08 15:34:56

37

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

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

编辑:我已将以下步骤复制到上述链接的原始作者的荣誉。

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

这个答案完美地为我工作。谢谢! – Francisc0 2014-12-04 23:22:44

+0

非常感谢你! – JATMON 2015-01-26 23:58:55

+1

也适用于Sql Server 2008 R2 Enterprise。谢谢! – Edo 2015-12-04 18:09:29

2

在SSMS 2012 ,您必须使用:

要启用单用户模式,在SQL实例属性中,不要转到“Advance”标记,已经有一个“Startup Parameters”标记。

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

我在我的Windows机器上有2个帐户,我遇到了其中一个问题。我不想使用sa帐户,我想用Windows登录。目前尚不明显,我认为我需要只需登录我用来安装SQL Server中的其他账户,并从那里

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

添加权限的新帐户

简单的方法来得到完整的域名你需要添加那里打开cmd回显每一个。

echo %userdomain%\%username% 

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

1

我遵循killthrush的答案中的步骤,令我惊讶的是它没有奏效。以sa身份登录,我可以看到我的Windows域用户,并让他们成为系统管理员,但是当我尝试使用Windows身份验证登录时,我无法在登录时看到我的登录信息,无法创建数据库等。 该登录可能与具有相同名称的其他域帐户绑定(某种内部/隐藏ID不正确)。我早就离开了这个组织,几个月后又回来了。他们没有重新激活旧帐户(他们可能已经删除了),而是使用相同的域名\用户名和新的内部ID创建了一个新帐户。使用sa我删除了我的旧登录名,重新添加了相同的名称并添加了sysadmin。我使用Windows身份验证重新登录,看起来应该如此。我现在可以看到我的登录(和其他人),并可以使用我的Windows身份验证登录名执行任​​何我需要作为系统管理员执行的操作。

+0

有关域帐户的好处 - 可能是引擎盖下的不同SID。为了验证这种事情,可以使用powershell而不会造成太多的痛苦:http://windowsitpro.com/windows-server/find-sid-account-using-powershell – killthrush 2016-07-20 09:30:28

相关问题