<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    使用連接字符串

    有關(guān) .NET 數(shù)據(jù)提供程序的連接字符串關(guān)鍵字的更多信息,請(qǐng)參見(jiàn)ConnectionString連接字符串關(guān)鍵字

    連接字符串的格式是使用分號(hào)分隔的鍵/值參數(shù)對(duì)列表:

    keyword1=value; keyword2=value
    

    忽略空格,關(guān)鍵字不區(qū)分大小寫(xiě),盡管值可能會(huì)區(qū)分大小寫(xiě),這取決于數(shù)據(jù)源的大小寫(xiě)。要加入包含分號(hào)、單引號(hào)或雙引號(hào)的值,值必須加雙引號(hào)。

     

    有關(guān) .NET 數(shù)據(jù)提供程序的連接字符串關(guān)鍵字的更多信息,請(qǐng)參見(jiàn)ConnectionString

    持續(xù)安全信息

    連接字符串中 Persist Security Info 關(guān)鍵字的默認(rèn)設(shè)置為 false。

    Persist Security Info=false; 

    如果將該關(guān)鍵字設(shè)置為 true 或 yes,將允許在打開(kāi)連接后,從連接中獲得涉及安全性的信息(包括用戶標(biāo)識(shí)和密碼)。如果在建立連接時(shí)必須提供用戶標(biāo)識(shí)和密碼,最安全的方法是在使用信息打開(kāi)連接后丟棄這些信息,在 Persist Security Info 設(shè)置為 false 或 no 時(shí)會(huì)發(fā)生這種情況。當(dāng)您向不可信的源提供打開(kāi)的連接,或?qū)⑦B接信息永久保存到磁盤(pán)時(shí),這點(diǎn)尤其重要。如果將 Persist Security Info 保持為 false,可幫助確保不可信的源無(wú)法訪問(wèn)連接中涉及安全性的信息,并幫助確保任何涉及安全性的信息都不會(huì)隨連接字符串信息在磁盤(pán)上持久化。

    使用 Windows 身份驗(yàn)證

    我們建議您使用 Windows 身份驗(yàn)證(通常稱為集成安全性)連接到服務(wù)器數(shù)據(jù)庫(kù)上。要指定 Windows 身份驗(yàn)證,可以對(duì) SQL Server .NET Framework 數(shù)據(jù)提供程序使用下列兩個(gè)鍵/值對(duì)中的任意一個(gè):

    Integrated Security=true; Integrated Security=SSPI; 

    但是,只有第二個(gè)將適用于 OleDb .NET Framework 數(shù)據(jù)提供程序。為 ConnectionString 設(shè)置 Integrated Security=true 將引發(fā)異常。

    對(duì)于 ODBC .NET Framework 數(shù)據(jù)提供程序,必須使用以下鍵/值對(duì)指定 Windows 身份驗(yàn)證。

    Trusted_Connection=yes; 

    創(chuàng)建連接字符串

    每個(gè) .NET Framework 數(shù)據(jù)提供程序提供一個(gè)從 DbConnectionStringBuilder 繼承的強(qiáng)類型連接字符串生成器類。連接字符串生成器使開(kāi)發(fā)人員可以通過(guò)編程,基于用戶輸入創(chuàng)建語(yǔ)法正確的連接字符串,以及分析并重新生成現(xiàn)有的連接字符串。有關(guān)更多信息,請(qǐng)參見(jiàn)

    SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();

    SqlConnectionStringBuilder
        

    連接字符串生成器簡(jiǎn)介

    在設(shè)計(jì)時(shí)或運(yùn)行時(shí)生成連接字符串會(huì)復(fù)雜一些。有可能難以記住希望使用的連接字符串選項(xiàng)名稱;也有可能難以確定如何分隔其取值;也有可能正在尋求幫助,以確保從用戶接收的輸入不會(huì)改變連接字符串的目的。ADO.NET 2.0引入了連接字符串生成器類,以幫助開(kāi)發(fā)人員解決在生成連接字符串時(shí)遇到的這些問(wèn)題。

    1. 使用連接字符串生成器

    連接字符串生成器的使用非常簡(jiǎn)單。可以通過(guò)這個(gè)類的索引器來(lái)設(shè)置和檢查值。在提供了希望使用的值之后,就可以使用生成器的ConnectionString屬性來(lái)訪問(wèn)所得到的連接字符串。

    這里給出一個(gè)例子,在此例中希望基于各種連接字符串選項(xiàng)生成一個(gè)連接字符串,并對(duì)其進(jìn)行修改,以使用SqlConnectionStringBuilder(它是SqlConnection對(duì)象的一個(gè)連接字符串生成器類)。我們只是通過(guò)索引器設(shè)置不同關(guān)鍵字的值。在生成需要的連接字符串之后,訪問(wèn)ConnectionString屬性,并將結(jié)果傳遞給SqlConnection對(duì)象,如以下代碼段所示:

               

    bldr["Data Source"] = @".\SQLExpress";

    bldr["Initial Catalog"] = "Northwind";

    bldr["Integrated Security"] = true;

    //將所生成的連接字符串輸出到控制臺(tái)窗口

    Console.WriteLine("Resulting connection string: {0}", bldr.ConnectionString);

    //以SqlConnection使用所生成的連接字符串

    SqlConnection cn = new SqlConnection(bldr.ConnectionString);

    cn.Open();

    將會(huì)看到輸出到控制臺(tái)窗口的連接字符串如下所示:

    Data Source=.\SQLExpress;Initial Catalog=Northwind;Integrated Security=True

    2. 連接字符串和IntelliSense
          

    連接字符串生成器通過(guò)將許多常用選項(xiàng)作為屬性公開(kāi),簡(jiǎn)化了生成連接字符串的過(guò)程。ADO.NET 2.0中可供使用的連接字符串生成器類包括許多強(qiáng)類型屬性,其對(duì)應(yīng)于許多可用連接字符串選項(xiàng)。在前面的一個(gè)示例中,通過(guò)默認(rèn)的索引器設(shè)置了Data Source,Initial Catalog和Integrated Security連接字符串關(guān)鍵字的值。可以通過(guò)訪問(wèn)SqlConnectionStringBuilder類的DataSource,InitialCatalog和IntegratedSecurity屬性來(lái)重新編寫(xiě)此代碼。下面是同一示例,只是這一次使用了SqlConnectionStringBuilder的屬性。

    SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();

    bldr.DataSource = @".\SQLExpress";

    bldr.InitialCatalog = "Northwind";

    bldr.IntegratedSecurity = true;

    //將所生成的連接字符串輸出到控制臺(tái)窗口

    Console.WriteLine("Resulting connection string: {0}", bldr.ConnectionString);

    //以SqlConnection使用所生成的連接字符串

    SqlConnection cn = new SqlConnection(bldr.ConnectionString);

    cn.Open();

     

    此代碼仍然生成相同的連接字符串,但此代碼的編寫(xiě)更容易一些。另外,如果在提供連接字符串關(guān)鍵字時(shí)產(chǎn)生了輸入錯(cuò)誤,將會(huì)產(chǎn)生一個(gè)編譯時(shí)錯(cuò)誤。如果正在Microsoft Visual Studio中編寫(xiě)代碼,并且難以記住連接字符串選項(xiàng),那么可以很容易地通過(guò)IntelliSense下拉菜單使用SqlConnectionStringBuilder中的可用選項(xiàng)。使用這些下拉菜單還可以減少輸入字符,防止出現(xiàn)一些輸入錯(cuò)誤,在其他情況下,需要到測(cè)試代碼時(shí)才能發(fā)現(xiàn)這些錯(cuò)誤。

    3. 處理復(fù)雜的連接字符串選項(xiàng)值

    使用連接字符串生成器的一個(gè)間接好處是:不必再記憶如何分析、轉(zhuǎn)義或分隔連接字符串中的值。假定需要提供一個(gè)包括空格的連接字符串值,是否需要在關(guān)鍵字兩側(cè)加引號(hào)呢?用大括號(hào)?一個(gè)也不用?還是用兩個(gè)?

    如果以手動(dòng)方式生成連接字符串,那么這些問(wèn)題不存在簡(jiǎn)單的答案。事實(shí)上,其答案取決于所使用的.NET數(shù)據(jù)提供程序。過(guò)去使用過(guò)ODBC的開(kāi)發(fā)人員可能還會(huì)記得:包含空間的ODBC驅(qū)動(dòng)程序名稱必須用大括號(hào)分隔:"Driver={SQL Server}"。利用連接字符串生成器來(lái)代替手動(dòng)方式生成連接字符串,就不再為這些問(wèn)題而費(fèi)心。

    如果正在使用連接字符串生成器,可以將邏輯交給生成器處理。例如,可能希望使用連接字符串選項(xiàng)以連接到服務(wù)器,并在過(guò)程中附加一個(gè)數(shù)據(jù)庫(kù)文件。希望使用的文件可能在路徑中包含空格或其他字符。開(kāi)發(fā)人員不必?fù)?dān)心是否或如何分隔連接字符串中的文件名稱,只需要使用SqlConnectionStringBuilder類來(lái)生成連接字符串,如下所示:

    SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();

    bldr.DataSource = @".\SQLExpress";

    bldr.IntegratedSecurity = true;

    bldr.AttachDBFilename = @"C:\My Complex Path\AttachMe.mdf";

    //將生成的連接字符串輸出到控制臺(tái)窗口

    Console.WriteLine("Resulting connection string: {0}", bldr.ConnectionString);

    //以SqlConnection使用所生成的連接字符串

    SqlConnection cn = new SqlConnection(bldr.ConnectionString);

    cn.Open();

    讀者可能出于某種原因而希望了解如何正確分隔連接字符串中的文件名稱,那么該代碼段生成以下連接字符串:

    Data Source=.\SQLExpress;AttachDbFilename="C:\My Complex Path\AttachMe.mdf";

    Integrated Security=True

    4. 惡意連接字符串輸入,也稱為“連接字符串注入”

    在編寫(xiě)安全代碼時(shí),最重要的規(guī)則之一就是“絕對(duì)不要盲目相信用戶輸入”。參數(shù)化查詢(這一主題將在第4章中詳細(xì)討論)非常有用,其原因有很多,但重要原因之一是它可以防止SQL注入。可以構(gòu)建一個(gè)參數(shù)化查詢,并為參數(shù)指定由用戶提供的取值,而不必?fù)?dān)心用戶輸入是否會(huì)改變查詢的結(jié)構(gòu)。在生成連接字符串時(shí)也存在類似問(wèn)題。

    您可能決定對(duì)用戶進(jìn)行提示,使其輸入憑據(jù)——提供一個(gè)文本框以允許用戶輸入用戶名和密碼,然后利用以下代碼,基于連接字符串中的輸入來(lái)構(gòu)造連接字符串。

    string strConn;

    strConn = @"Data Source=.\SQLExpress;Initial Catalog=Northwind;" +

                  "User ID=" + txtUserID.Text + ";" +

                  "Password=" + txtPassword.Text + ";"

    Console.WriteLine("Resulting connection string: {0}", strConn);

    乍看起來(lái),這似乎是安全而符合邏輯的。現(xiàn)在假定有一位惡意用戶,他希望修改此連接字符串。圖3.1說(shuō)明了一種方式,這種惡意用戶可以采用這種方式來(lái)修改要訪問(wèn)哪個(gè)服務(wù)器。由于沒(méi)有更好的術(shù)語(yǔ),我們將這種方法稱為“連接字符串注入”。

    圖3.1   惡意用戶嘗試通過(guò)用戶輸入改變應(yīng)用程序訪問(wèn)的服務(wù)器

    利用以上代碼段和如圖3.1所示的輸入,所得到的連接字符串如下所示:

    Data Source=.\SQLExpress;Initial Catalog=Northwind;User ID=MyUserID;

    Data Source=EvilServerName;Password=MyPassword;

    可以看到,Data Source被指明兩次。在使用所得到的連接字符串時(shí),會(huì)選用哪個(gè)值呢?是第一個(gè)(本地計(jì)算機(jī)),還是第二個(gè)(“evil”服務(wù)器)?是否存在手動(dòng)檢查用戶輸入的方式,以檢查諸如此類的可能的連接字符串注入?這些答案對(duì)于其他連接字符串關(guān)鍵字或其他.NET數(shù)據(jù)提供程序是否正確呢?開(kāi)發(fā)人員能夠做些什么呢?

    幸運(yùn)的是,連接字符串生成器可以幫助開(kāi)發(fā)人員處理來(lái)自惡意或惡作劇用戶的輸入。

    5. 用連接字符串生成器防止連接字符串注入

    利用SqlConnectionStringBuilder重新編寫(xiě)前面的代碼段,得到以下代碼:

    SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();

    bldr.DataSource = @".\SQLExpress";

    bldr.InitialCatalog = "Northwind";

    bldr.UserID = txtUserID.Text;

    bldr.Password = txtPassword.Text;

    Console.WriteLine("Resulting connection string: {0}", bldr.ConnectionString);

    通過(guò)利用具有如圖3.1所示惡意輸入的SqlConnectionStringBuilder(對(duì)于用戶名使用"MyUserID;Data Source=EvilServerName",對(duì)于密碼使用MyPassword),將會(huì)生成以下連接字符串。

    Data Source=.\SQLExpress;Initial Catalog=Northwind;

    User ID="MyUserID;Data Source=EvilServerName";Password=MyPassword

    注意,User ID關(guān)鍵字的值被分隔。這會(huì)導(dǎo)致ADO.NET嘗試以“MyUserID;Data Source=EvilServerName”為User ID來(lái)登錄到SQL Server數(shù)據(jù)庫(kù)。


    存儲(chǔ)和檢索連接字符串

    我們建議您不要在代碼中嵌入連接字符串。如果服務(wù)器的位置會(huì)更改,您的應(yīng)用程序?qū)⑿枰匦戮幾g。此外,編譯成應(yīng)用程序源代碼的未加密連接字符串可以使用 MSIL 反匯編程序 (ildasm.exe) 查看。

    將連接字符串存儲(chǔ)在配置文件中

    為了避免將連接字符串存儲(chǔ)在代碼中,可以將代碼存儲(chǔ)在 ASP.NET 應(yīng)用程序的 web.config 文件中以及 Windows 應(yīng)用程序的 app.config 文件中。

    連接字符串可以存儲(chǔ)在配置文件的 <connectionStrings> 元素中。連接字符串存儲(chǔ)為鍵/值對(duì)的形式,可以在運(yùn)行時(shí)使用名稱查找存儲(chǔ)在 connectionString 屬性中的值。以下配置文件示例顯示名為 DatabaseConnection 的連接字符串,該連接字符串引用連接到 SQL Server 本地實(shí)例的連接字符串。

    <connectionStrings>     <add name="DatabaseConnection"          connectionString="Persist Security Info=False;Integrated Security=SSPI;database=Northwind;server=(local);"          providerName="System.Data.SqlClient" /> </connectionStrings> 

    從配置文件中檢索連接字符串

    System.Configuration 命名空間提供使用配置文件中存儲(chǔ)的配置信息的類。ConnectionStringSettings 類具有兩個(gè)屬性,映射到上面所示的 <connectionStrings> 示例部分中顯示的名稱。

    ConnectionString

    連接字符串。

    Name

    <connectionStrings> 部分的連接字符串的名稱。

    Security note安全注意

    可以使用受保護(hù)的配置可選地加密配置文件中存儲(chǔ)的連接字符串。請(qǐng)參見(jiàn)使用受保護(hù)的配置加密配置信息對(duì)配置節(jié)進(jìn)行加密和解密演練:使用受保護(hù)的配置加密配置信息

    示例

    以下示例通過(guò)將連接字符串的名稱傳遞給 ConfigurationManager,再由其返回 ConnectionStringSettings 對(duì)象,以便從配置文件中檢索連接字符串。ConnectionString 屬性用于顯示此值。

    using System;
    using System.Configuration;
    
    class Program
    {
        static void Main()
        {
            ConnectionStringSettings settings;
            settings = 
                ConfigurationManager.ConnectionStrings["DatabaseConnection"];
            if (settings != null)
            {
                Console.WriteLine(settings.ConnectionString);
            }
        }
    }

    SqlClient 連接字符串

    SqlConnection 的 ConnectionString 屬性可以為 SQL Server 7.0 或更高版本的數(shù)據(jù)庫(kù)獲取或設(shè)置連接字符串。如果需要連接到早期版本的 SQL Server,必須使用 OleDb .NET 數(shù)據(jù)提供程序。

    SqlClient 連接字符串語(yǔ)法

    連接到 SQL Server 數(shù)據(jù)庫(kù)的語(yǔ)法很靈活。下列每個(gè)語(yǔ)法形式均將使用集成安全性連接到本地服務(wù)器上的 AdventureWorks 數(shù)據(jù)庫(kù)。始終通過(guò)名稱或通過(guò)關(guān)鍵字(local) 指定服務(wù)器。

    "Persist Security Info=False;Integrated Security=true;Initial Catalog=AdventureWorks;Server=MSSQL1"
    "Persist Security Info=False;Integrated Security=SSPI;database=AdventureWorks;server=(local)"
    "Persist Security Info=False;Trusted_Connection=True;database=AdventureWorks;server=(local)"
    

    要強(qiáng)制使用某個(gè)協(xié)議,請(qǐng)?zhí)砑酉铝星熬Y之一:

    np:(local), tcp:(local), lpc:(local)

    對(duì)于 SQL Server 身份驗(yàn)證,使用此語(yǔ)法指定用戶名和密碼,其中的星號(hào)表示有效的用戶名和密碼。

    "Persist Security Info=False;User ID=*****;Password=*****;Initial Catalog=AdventureWorks;Server=MySqlServer"
    

    有關(guān)有效的連接字符串關(guān)鍵字的完整列表,請(qǐng)參見(jiàn) ConnectionString。

    連接到命名實(shí)例

    要連接到 SQL Server 2000 或更高版本的命名實(shí)例,請(qǐng)使用 server name\instance name 語(yǔ)法。

    Server=MySqlServer\MSSQL1;"
    

    設(shè)置網(wǎng)絡(luò)庫(kù)

    使用此語(yǔ)法通過(guò) IP 地址連接,其中的網(wǎng)絡(luò)庫(kù)為 Win32 Winsock TCP/IP,1433 為正在使用的端口(默認(rèn)值)。

    Network Library=dbmssocn;Data Source=000.000.000.000,1433;
    

    SQL Server 在建立連接時(shí)允許使用下列網(wǎng)絡(luò)庫(kù)。

    dbnmpntw

    Win32 命名管道

    dbmssocn

    Win32 Winsock TCP/IP

    dbmsspxn

    Win32 SPX/IPX

    dbmsvinn

    Win32 Banyan Vines

    dbmsrpcn

    Win32 多重協(xié)議 (Windows RPC)

    OleDb 連接字符串

    通過(guò) OleDbConnection 的 ConnectionString 屬性可以為 OLE DB 數(shù)據(jù)源(例如 Microsoft Access 或 SQL Server 6.5 或更低版本)獲取或設(shè)置連接字符串。對(duì) SQL Server 7.0 或更高版本使用 SqlConnection。

    OleDb 連接字符串語(yǔ)法

    必須為 OleDbConnection 連接字符串指定提供程序名稱。以下連接字符串使用 Jet 提供程序連接到 Microsoft Access 數(shù)據(jù)庫(kù)。注意,如果數(shù)據(jù)庫(kù)未受保護(hù)(默認(rèn)設(shè)置),UserID 和 Password 關(guān)鍵字是可選的。

    Provider=Microsoft.Jet.OLEDB.4.0; Data Source=d:\Northwind.mdb;User ID=Admin;Password=; 
    

    如果數(shù)據(jù)庫(kù)受保護(hù),必須提供工作組信息文件的位置。

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\Northwind.mdb;Jet OLEDB:System Database=d:\NorthwindSystem.mdw;User ID=*****;Password=*****;
    

    對(duì)于 SQL Server 6.5 或更低版本,請(qǐng)使用 sqloledb 關(guān)鍵字。

    Provider=sqloledb;Data Source=MySqlServer;Initial Catalog=pubs;User Id=*****;Password=*****;
    

    不要使用通用數(shù)據(jù)鏈接文件

    可以在通用數(shù)據(jù)鏈接 (UDL) 文件中提供 OleDbConnection 的連接信息;但是,應(yīng)避免這樣做。UDL 文件未加密,會(huì)以明文的形式公開(kāi)連接字符串信息。因?yàn)?UDL 文件對(duì)應(yīng)用程序來(lái)說(shuō)是基于外部文件的資源,所以,無(wú)法使用 .NET Framework 保護(hù)其安全。

    連接到 Excel

    Microsoft Jet 提供程序用于連接到 Excel 工作簿。在以下連接字符串中,Extended Properties 關(guān)鍵字設(shè)置 Excel 特定的屬性。“HDR=Yes;”指示第一行中包含列名,而不是數(shù)據(jù),“IMEX=1;”通知驅(qū)動(dòng)程序始終將“互混”數(shù)據(jù)列作為文本讀取。注意

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""
    

    注意,Extended Properties 所需的雙引號(hào)必須還要加雙引號(hào)。

    Data Shape 提供程序連接字符串語(yǔ)法

    在使用 Microsoft Data Shape 提供程序時(shí),應(yīng)同時(shí)使用 Provider 和 Data Provider 關(guān)鍵字。以下示例使用 Shape 提供程序連接到 SQL Server 的本地實(shí)例。

    "Provider=MSDataShape;Data Provider=SQLOLEDB;Data Source=(local);Initial Catalog=pubs;Integrated Security=SSPI;" 
    

    Odbc 連接字符串

    OdbcConnection 的 ConnectionString 屬性可以為 OLE DB 數(shù)據(jù)源獲取或設(shè)置連接字符串。以下連接字符串使用 Microsoft 文本驅(qū)動(dòng)程序。

    Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=d:\bin
    

    有關(guān) ODBC 連接字符串語(yǔ)法的更多信息,請(qǐng)參見(jiàn) ConnectionString。

    Oracle 連接字符串

    OracleConnection 的 ConnectionString 屬性可以為 OLE DB 數(shù)據(jù)源獲取或設(shè)置連接字符串。

    Data Source=Oracle9i;User ID=*****;Password=*****;
    

    有關(guān) ODBC 連接字符串語(yǔ)法的更多信息,請(qǐng)參見(jiàn) ConnectionString。


    引用《ADO.NET 2.0技術(shù)內(nèi)幕




     

    posted on 2011-09-08 09:46 SkyDream 閱讀(1367) 評(píng)論(0)  編輯  收藏 所屬分類: ASP.NET

    <2011年9月>
    28293031123
    45678910
    11121314151617
    18192021222324
    2526272829301
    2345678

    導(dǎo)航

    統(tǒng)計(jì)

    常用鏈接

    留言簿(3)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評(píng)論

    閱讀排行榜

    評(píng)論排行榜

    主站蜘蛛池模板: 亚洲精品国产福利一二区| 精品97国产免费人成视频 | 99在线热视频只有精品免费| 丝瓜app免费下载网址进入ios| 一级毛片试看60分钟免费播放| 国产亚洲视频在线观看| 在线观看亚洲精品专区| 国产午夜亚洲精品不卡电影| 老司机福利在线免费观看| 特级毛片aaaa级毛片免费| 国产成人综合久久精品亚洲| 阿v免费在线观看| 日韩精品视频在线观看免费| 亚洲免费日韩无码系列| 三年在线观看免费观看完整版中文| 成年免费a级毛片免费看无码| a毛片免费全部在线播放**| 国产免费网站看v片在线| 中文字幕久精品免费视频| 久久久免费的精品| 69av免费观看| 啦啦啦手机完整免费高清观看| 日本黄页网站免费| 亚洲国产精品不卡毛片a在线| 伊人久久综在合线亚洲91| 亚洲成av人片天堂网| 亚洲黄网在线观看| 亚洲一线产区二线产区区| 亚洲精品无码久久久久秋霞| 免费毛片毛片网址| 大地资源在线资源免费观看| 18禁无遮挡无码国产免费网站| 搡女人免费视频大全| 亚洲国产精品第一区二区三区| 亚洲AV无码一区东京热久久| 亚洲国产精品成人久久久| 欧美色欧美亚洲另类二区| 国产精品美女免费视频观看| 4444www免费看| 免费少妇a级毛片人成网| 亚洲国产a∨无码中文777|