所以,我试图在我的WPF应用程序中加入某种身份验证。
目前,应用程序连接到SQL Server,从数据库检索数据,将数据插入数据库并更新数据库中的数据。它按预期工作。
我接下来要做的是,当应用程序启动时,它会检查登录用户是否有权连接到服务器并与服务器交互 - 然后拒绝访问应用程序或其中的某些部分。
我的SQL Server使用Windows身份验证进行身份验证,用户将位于将连接到SQL Server的同一网络和域上。
我对Windows身份验证以及它在我的应用程序中的工作方式不是很熟悉,所以任何帮助/示例/指向正确方向的人都会非常感激。
[编辑] : 感谢Jan W指出我使用 IS_MEMBER 检查SQL层中服务器的用户名的方向,我偶然发现了HAS_DBACCESS。
通过一些游戏,我创建了这个函数来检查当前用户是否可以访问数据库。如果没有,我会在应用程序中禁用我需要的内容,或者向用户发送他们未获得许可的消息:
Private Shared Function HasDBAccess(connectionString As String) As Boolean
Dim command As Data.SqlClient.SqlCommand = New Data.SqlClient.SqlCommand
Dim reader As Data.SqlClient.SqlDataReader
Dim conn As Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(connectionString)
command.CommandText = "SELECT HAS_DBACCESS ('yourdatabasenamehere')"
command.CommandType = Data.CommandType.Text
command.Connection = conn
conn.Open()
reader = command.ExecuteReader()
If reader.HasRows Then
Do While reader.Read()
Dim hasAccess As Integer = reader.GetInt32(0)
Select Case hasAccess
Case 1
Return True
Case 0
Return False
End Select
Loop
End If
conn.Close()
End Function
谢谢Jan:)
答案 0 :(得分:0)
首先,我认为你所追求的是实现授权而不是身份验证。身份验证已由网络中的域控制器完成。
Authentication versus Authorization
根据您的业务需求,您尝试解决的问题有很多不同的方法。我可以想象您可以在AD中将不同的访问角色定义为域组。然后,如果与您的应用程序交互的用户是否是某个组的成员,您可以检查AD。它可以在应用程序层(How to check if a user belongs to an AD group?)或SQL层(https://msdn.microsoft.com/en-us/library/ms186271.aspx)中完成
此致 扬
答案 1 :(得分:0)