SqlClientPermission 如何使用?

来源:互联网 发布:室内全景制作软件 编辑:程序博客网 时间:2024/05/23 10:51

SqlClientPermission 如何使用?


    在看《ADO.NET核心编程》的第三章的时候遇到一个问题:就是连接字符串安全性实在是看不太懂。后来找了几天资料,总算是基本弄了个明白:这个类主要 是用来限制SQL连接字符串的连接信息,例如只能访问特定的数据库,特定的IP地址或者其他等等。设置好SqlClientPermission实例以 后,新建立的SqlConnection实例就要完全按照其格式进行,否则就会抛出异常。或者说设置了SqlClientPermission实例就是给 这个应用程序方案设置了属性,这个属性是用来限制数据库连接字符串的。



    需要引用的命名空间:system.data 、system.data.sqlclient 、system.security.permissions (没见过这个命名空间吧)。

    例子解说:
    1、新建立一个SqlClientPermission实例。

        Dim perm As New SqlClientPermission(PermissionState.None)
        perm.Add("data source=10.10.10.158,23;initial catalog=Northwind", "user id=;password=", KeyRestrictionBehavior.AllowOnly)
        perm.PermitOnly()               

        引用System.security.Permissions就是为了PermissionState这个参数,不然就无法引用(除非写完整的路径:Dim perm As New SqlClientPermission(System.Security.Permissions.PermissionState.None))。

        PermissionState有两个成员分别是None和Unrestricted,他们的含义分别是:
        None:不能对该权限所保护的资源进行访问;意即:默认的Deny All;
        Unrestricted:可以对该权限保护的资源进行访问;意即:默认的 Permit All;

        Perm.add 方法添加配允许的链接字符串(先是None将所有的链接都设为非法,然后添加可以被允许的字符串。先严后松)。一共有三个参数,第一个参数是必须使用的字 符串,第二个参数是可以选择使用的字符串,本例来说就是可以自定义用户名和密码,但是不能自己选择数据库服务器和数据库;第三个参数就是被允许的方式, AllowOnly,也就是这个链接字符串时被允许的。

        Perm.permitonly方法是开启这个SqlClientPermission,并且只允许AllowOnly的链接字符串。后面进行数据库连接的时候,默认就要遵循这个规则。
       
    2、建立SqlConnection字符串

        Dim conBuilder As New SqlConnectionStringBuilder
        conBuilder.DataSource = TextBox1.Text
        conBuilder.InitialCatalog = "Northwind"
        conBuilder.UserID = "sa"
        conBuilder.Password = TextBox2.Text
        con.ConnectionString = conBuilder.ConnectionString

        con.Open()

       
        如果是如何要求,则运行正常,不然就会在con.open()执行的时候报错。

    3、MS不建议先放开Unresticted,然后再拒绝特定的链接。可以参看后面的参考链接。


完整的代码:

Imports System.Data
Imports System.Data.SqlClient
Imports System.Security.Permissions

Public Class Form1

    Dim perm As New SqlClientPermission(PermissionState.None)

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load


    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim perm As New SqlClientPermission(PermissionState.None)
        perm.Add("data source=10.10.10.158,23;initial catalog=Northwind", "user id=;password=", KeyRestrictionBehavior.AllowOnly)
        perm.PermitOnly()
        Try


            Using con As New SqlConnection
                'con.ConnectionString = "data source=" & TextBox1.Text & ";initial catalog=NorthWind;user id=sa;password=" & textbox2.text
                Dim conBuilder As New SqlConnectionStringBuilder
                conBuilder.DataSource = TextBox1.Text
                conBuilder.InitialCatalog = "Northwind"
                conBuilder.UserID = "sa"
                conBuilder.Password = TextBox2.Text
                con.ConnectionString = conBuilder.ConnectionString

                con.Open()
                Console.WriteLine("ok")

            End Using

        Catch ex As Exception
            Console.WriteLine(ex.ToString)
        End Try
    End Sub
End Class



   

参考文档:
代码访问安全性和 ADO.NET:http://msdn2.microsoft.com/zh-cn/library/0x4t63kb(VS.80).aspx
SqlClientPermission 方法 :http://msdn2.microsoft.com/zh-cn/library/system.data.sqlclient.sqlclientpermission_methods(VS.80).aspx
SqlClientPermission 类    :http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemdatasqlclientsqlclientpermissionclasstopic.asp
PermissionState 枚举       :http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/cpref/html/frlrfsystemsecuritypermissionspermissionstateclasstopic.asp


原创粉丝点击