如何根据SQL Sever验证登录的用户帐户

时间:2016-08-25 12:34:28

标签: sql-server wpf vb.net

所以,我试图在我的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:)

2 个答案:

答案 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)