保证SQL Server安全是数据库管理的主要职责之一。然而,有许多时候,DBA必须管理一个没有系统管理员登录权限的SQL Server。例如,当前数据库管理员在离职时没有留下系统管理员帐号密码;或者系统管理员帐号被禁用,而且没有人知道sysadmin的密码;或者所有具有sysadmin权限的帐号都被意外删除。
在本文中,我们介绍的步骤将帮助数据库管理员添加一个具有系统管理员权限的新用户。在这个演示中,我将使用SQL Server 2008免费版。本文介绍的步骤适用于SQL Server 2005及以上的所有版本。
如何以单用户模式启动SQL Server
1.单击Start→All Programs→Microsoft SQL Server 2008→Configuration Tools→SQL Server Configuration Manager。
2.在SQL Server Configuration Manager中,右键单击SQL Server Service,然后在下拉菜单中选择Stop,停止SQL Server Service。
3.当SQL Server Service停止时,右键单击面板右边的SQL Server Service,然后在下拉菜单中选择Properties 。
4.在SQL Server Properties 界面上,单击Advanced 选项卡。单击展开Startup Parameters,然后输入“;-m”,如下图所示。单击OK,保存SQL Server Properties的修改。
1.如果添加了启动参数“-m”,那么SQL Server Service就会重启。SQL Server Database Engine会以单用户模式启动。这里所说的SQL Server单用户模式在任何时候都是一样(单用户)。只要在启动参数中添加“-m”,SQL Server就只允许一个用户连接一个SQL Server实例。关于SQL Server启动参数的更多信息,请参考数据库引擎服务启动选项。
2.在修改启动参数设置之后,您会看到一条警告消息:“所有修改都将保存;但是它们在服务停止并重启之后才会生效。(Any changes made will be saved; however, they will not take effect until the service is stopped and restarted.)”。继续重启SQL Server Service(数据库引擎)。
3.当SQL Server Service成功重启之后,SQL Server就会以单用户模式运行。这时只允许一位用户连接数据库引擎。
一定要记住:
1.当SQL Server配置为单用户模式时,不要启动SQL Server代理服务,因为SQL Server代理会占用唯一一个可用连接。
2.不要在SQL Server Management Studio (SSMS)中打开SQL Server Object Explorer,否则它会占用唯一一个可用连接。
3.停止Web服务器,否则第一个应用程序用户将会占用唯一一个可用连接。
如果单用户模式下的SQL Server实例,而连接又已经被占用,那么您会得到下面的错误消息:
Login failed for user ''. Reason: Server is in single user mode. Only one administrator can connect at this time. (Microsoft SQL Server, Error: 18461)
连接SQL Server,使用SQLCMD创建一个新系统管理员帐号
SQLCMD是SQL Server 2005引入的一个命令行工具,SQL Server 2005及以上版本都支持这个命令。使用SQLCMD,我们就可以为SQL Server实例添加一个带有系统管理权限的新登录帐号。按照以下步骤,可以创建一个带有sysadmin权限的登录帐号:
1.单击Start→Run→Type CMD,打开命令行提示符,然后输入SQLCMD –E –S SERVERNAME,连接SQL Server的默认实例。如果想要连接一个SQL Server命名实例(如本例所示),则要输入SQLCMD –E –S SERVERNAME\INSTANCENAME,如下图所示。默认情况下,安装SQL Server 时会同时安装SQLCMD,它位于以下位置:C:\Program Files\Microsoft SQL Server\100\Tools\Binn\
在SQLCMD中,输入以下命令,连接一个单用户模式下的SQL Server实例:
/* 默认实例 */
SQLCMD –E –S SERVERNAME
/* 命名实例 */
SQLCMD –E –S SERVERNAME\INSTANCENAME
1.在SQLCMD中,创建一个新的用户登录帐号,输入下面的TSQL代码,然后输入EXIT,最后得到如下图所示的SQLCMD窗口。
CREATE LOGIN DBAdmin WITH PASSWORD ='T$chT@rget' GO
EXEC sp_addsrvrolemember DBAdmin, sysadmin
GO
1.当新用户成功添加时,要在SQL Server Configuration Manager的SQL Server Service的Advanced 选项卡中删除之前添加的“-m;”启动参数。在删除启动参数之后,不要忘记重启服务器,使修改生效。
2.使用SQL Server Management Stuido,以新创建的登录帐号连接SQL Server。然后,执行以下查询命令,验证SQL Server的登录权限:
Use Master
GO
sp_helpsrvrolemember sysadmin
GO
在上面的截图中,您可以看到带系统管理员权限的新登录帐号。