gpt4 book ai didi

c# - 通过 SQL CLR 验证 NT 用户

转载 作者:太空宇宙 更新时间:2023-11-03 16:56:07 26 4
gpt4 key购买 nike

我需要能够根据 Active Directory 验证给定的用户名和密码,并返回该用户是否存在。

我的设置是在 DMZ 中有两个 Web 服务器,然后在 LAN 中有一个 SQL Server。销售人员在 Web 服务器上有一个管理面板。当他们登录到管理面板时,我希望它运行一个存储过程,该过程将根据 LAN 端的 Active Directory 验证用户名和密码(因为 Web 服务器无法访问 Active Directory)。我尝试制作一个执行以下操作的 SQL 存储过程:

#region setup impersonation via interop
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;

[DllImport("ADVAPI32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern bool LogonUser
(
string lpszUsername,
string lpszDomain,
string lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken
);
#endregion

[Microsoft.SqlServer.Server.SqlFunction]
public static SqlBoolean NTAuthenticateUser(SqlString UserName, SqlString Password)
{
IntPtr token = IntPtr.Zero;

return LogonUser
(
UserName.Value,
"MYDOMAIN",
Password.Value,
LOGON32_LOGON_INTERACTIVE,
LOGON32_PROVIDER_DEFAULT,
ref token
);

return true;
}

但是当我把它放到SQL Server上时,我得到了错误

CREATE ASSEMBLY failed because type "UserDefinedFunctions" in external_access assembly "SQLCLR" has a pinvokeimpl method. P/Invoke is not allowed in external_access assemblies.

发生这种情况是因为解决方案设置为 EXTERNAL 权限级别,并且除非解决方案设置为 UNSAFE 权限级别(?),否则显然无法调用 ASVAPI32.DLL。

那么(最后)我的问题 - 是否有某种方法可以做到这一点,同时仍然以外部权限运行 CLR?

提前致谢!

最佳答案

我建议构建一个封装您的代码的安全网络服务。然后从 SQL CRL 或您的 Web 应用调用它。

HTH

关于c# - 通过 SQL CLR 验证 NT 用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2000595/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com