Sql server VB.NET:更改SQL Server身份验证模式

Sql server VB.NET:更改SQL Server身份验证模式,sql-server,vb.net,windows,Sql Server,Vb.net,Windows,我们正在使用以下代码将SQL Server身份验证从Windows模式更改为混合模式 query.CommandText = "EXEC xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLSERVER', 'LoginMode', REG_DWORD, 2" query.CommandType = CommandType.Text

我们正在使用以下代码将SQL Server身份验证从Windows模式更改为混合模式

query.CommandText = "EXEC xp_instance_regwrite 'HKEY_LOCAL_MACHINE', 'Software\Microsoft\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQLSERVER', 'LoginMode', REG_DWORD, 2"
query.CommandType = CommandType.Text
query.ExecuteScalar()
在执行过程中,我们得到以下错误

RegCreateKeyEx()返回错误5,“访问被拒绝。”

我们可以手动更改身份验证模式。然而,我们需要以编程方式完成这项工作


需要帮助。

使用SMO执行此操作。我将在powershell中编写它,但它应该可以立即转移到VB.NET

import-module sqlps -disablenamechecking;

$s = new-object microsoft.sqlserver.management.smo.server '.';
$s.LoginMode = 'mixed';
$s.alter();

这样做的好处是可以持久地更改不同版本的注册表项位置(假设MS使SMO接口保持最新,他们很可能会保持最新),并且可以使用命名实例(您必须更改解决方案中的注册表位置才能工作).

请查看更改注册表项所需的权限,并在具有进行更改所需的正确身份验证的帐户下运行该程序。如果该程序以管理员身份运行,它可能会工作?最简单的方法是执行该操作并查看会发生什么。即使应用程序以管理员身份运行,也会出现相同的错误administrator.From:“Visual Basic.NET提供了四个访问注册表的函数。要使用它们,您必须具有RegistryPermissionAccess枚举的读写权限。任何以完全信任方式运行的代码(在默认安全策略下,这是安装在用户本地硬盘上的任何代码)拥有访问注册表所需的权限。有关详细信息,请参阅RegistryPermission类。“请注意,这是一篇较旧的文章(VS.NET 2003),但原则很可能相同。