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

问题描述 投票:0回答:1

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

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

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

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

是否可以通过sql命令在Windows上使用Windows本地管理员密码在sql上创建sysadmin用户?

c# sql sqlcommand createuser
1个回答
0
投票

我能够做到

首先创建批处理文件示例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服务器

和用于启动单用户模式的start -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查询中,首先检查newuser是否存在,然后使用sysadmin角色创建

执行SQL查询后停止SQL Server,然后再次正常启动而没有参数

现在执行以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();
© www.soinside.com 2019 - 2024. All rights reserved.