我有一个c#winform应用程序,该应用程序连接到数据库并读取数据。该数据库也被另一个应用程序使用。我刚刚从我的应用程序执行查询以读取一些数据。
我没有数据库的用户名和密码。
因此,我必须手动将sql服务更改为单用户模式:将-m参数添加到sql服务,然后重新启动服务,并且因为我具有本地管理员密码。我可以使用Windows登录名登录并创建用户并将sysadmin roll设置为它。
现在我想在c#上完成所有这些可编程性
是否可以通过sql命令在Windows上使用Windows本地管理员密码在sql上创建sysadmin用户?
我能够做到
首先创建批处理文件示例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();