从 C# 中将 Sql 设置为单用户模式并创建管理员用户

Set Sql to Single User mode From C# and Create Admin User

我有一个连接到数据库并读取数据的 c# winform 应用程序。 这个数据库也被另一个应用程序使用。我刚刚从我的应用程序执行了一个查询来读取一些数据。

我没有数据库的用户名和密码

所以我必须手动将 sql 服务更改为单用户模式:将 -m 参数添加到 sql 服务,然后重新启动该服务,因为我有本地管理员密码。我可以使用 windows 登录并创建用户并为其设置 sysadmin roll。

现在我想在 c# 上实现所有这些可编程性

有没有办法在 sql 上使用 windows 本地管理员密码和 sql 命令创建系统管理员用户?

我做到了

首先创建批处理文件示例test.bat 并将代码设置为

@ECHO OFF
ECHO Please Wait....
NET STOP MSSQLSERVER
NET START MSSQLSERVER /m"SQLCMD"
sqlcmd -s . -E -i query.sql
NET STOP MSSQLSERVER
NET START MSSQLSERVER

第一站sql服务器

和启动单用户模式的启动-m参数

"SQLCMD" 仅在单用户模式下从命令行连接

启动单用户模式后执行query.sql

-s 。服务器地址在这里我的本地

-e连接windows认证

-i sql 查询执行

query.sql:

use mydatabase
Go
IF  EXISTS (SELECT * FROM sys.server_principals  WHERE name = N'newuser') DROP login [newuser]
Go
create LOGIN newuser WITH PASSWORD = '123456',CHECK_POLICY = OFF,CHECK_EXPIRATION = OFF ;
Go
EXEC master..sp_addsrvrolemember @loginame = N'newuser', @rolename = N'sysadmin'
Go

在sql查询中首先检查新用户是否存在删除然后使用系统管理员角色创建

执行 sql 查询后停止 sql 服务器并在没有参数的情况下再次正常启动

现在以管理员身份使用 c#

执行批处理文件 运行
 var proc = new Process();

  proc.StartInfo.CreateNoWindow = true; //run background
   proc.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;

   proc.StartInfo.Verb = "runas"; //ask local admin pass when run
   proc.StartInfo.FileName = "batch file address";
  proc.Start();