单用户模式是 SQL Server 的一种启动模式,通常用于紧急维护、恢复和管理操作。在这种模式下,SQL Server 只允许一个用户连接。这对于修复系统、重置密码和进行紧急恢复操作非常有用。以下是有关单用户模式的详细说明,包括其用途、如何启动、使用及退出该模式。
单用户模式的用途
- 系统恢复:修复系统数据库(如
master
数据库)时。 - 管理员锁定:如果所有管理员帐户都被锁定,可以使用单用户模式恢复访问权限。
- 恢复密码:重置管理员账户密码。
- 紧急维护:执行需要独占访问的紧急维护任务。
启动 SQL Server 到单用户模式
执行这个操作的用户必须具有服务器的本地管理员权限!
方法 1:使用 SQL Server 配置管理器
- 打开 SQL Server 配置管理器。
- 在左侧窗格中,选择
SQL Server 服务
。 - 在右侧窗格中,右键单击你的 SQL Server 实例,然后选择
属性
。 - 在“启动参数”选项卡中,添加
-m
参数。
- 确保启动参数列表中每个参数都用分号隔开。
- 点击
确定
并重启 SQL Server 服务。
方法 2:使用命令提示符
- 打开命令提示符(以管理员身份运行)。
- 停止 SQL Server 服务:
net stop MSSQLSERVER
- 启动 SQL Server 到单用户模式:
net start MSSQLSERVER /m
- 如果你使用的是命名实例,命令会稍有不同:
net start MSSQL$<实例名> /m
使用 sqlcmd
连接到 SQL Server
- 打开命令提示符。
- 使用
sqlcmd
连接到 SQL Server 实例:
sqlcmd -S <服务器名称> -E
如果你使用 SQL Server 身份验证,请使用以下命令:
sqlcmd -S <服务器名称> -U <现有的管理员用户名> -P <现有的管理员密码>
场景1:添加新的 SQL Server 数据库用户
- 创建新的 SQL Server 登录名:
CREATE LOGIN NewAdminUser WITH PASSWORD = 'Password123!';
GO
创建一个Windows身份验证的用户:
CREATE LOGIN [DOMAIN\NewAdmin] FROM WINDOWS;
GO
ALTER SERVER ROLE [sysadmin] ADD MEMBER [DOMAIN\NewAdmin];
GO
EXIT
- 将新的登录名添加为特定数据库的用户:
USE DatabaseName;
GO
CREATE USER NewAdminUser FOR LOGIN NewAdminUser;
GO
- 授予新的数据库用户适当的权限(例如
db_owner
权限):
USE DatabaseName;
GO
ALTER ROLE db_owner ADD MEMBER NewAdminUser;
GO
退出单用户模式
- 停止 SQL Server 服务:
net stop MSSQLSERVER
- 如果你是通过 SQL Server 配置管理器设置的启动参数,请删除
-m
参数。 - 重新启动 SQL Server 服务:
net start MSSQLSERVER
一个实际的例子
假设你要添加一个名为 NewAdminUser
的新的 SQL Server 数据库用户,并将其添加为 YourDatabaseName
数据库的 db_owner
:
- 启动 SQL Server 到单用户模式:
net stop MSSQLSERVER
net start MSSQLSERVER /m
2.使用 sqlcmd
连接到 SQL Server 实例:
sqlcmd -S <服务器名称> -E
3.在 sqlcmd
中输入以下 SQL 命令:
-- 创建新的 SQL Server 登录名
CREATE LOGIN NewAdminUser WITH PASSWORD = 'Password123!';
GO
-- 将新的登录名添加为数据库用户
USE DatabaseName;
GO
CREATE USER NewAdminUser FOR LOGIN NewAdminUser;
GO
-- 授予新的数据库用户 db_owner 权限
USE DatabaseName;
GO
ALTER ROLE db_owner ADD MEMBER NewAdminUser;
GO
EXIT
4.停止并重新启动 SQL Server 服务:
net stop MSSQLSERVER
net start MSSQLSERVER
5.最后使用刚才添加的用户登录并访问数据库即可。