亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數(shù)據(jù)庫 > Oracle > 正文

oracle 虛擬專用數(shù)據(jù)庫詳細介紹

2024-08-29 14:00:33
字體:
供稿:網(wǎng)友

所謂虛擬專用數(shù)據(jù)庫(VPD)指的是,通過在數(shù)據(jù)庫里進行配置,從而讓不同的用戶只能查看某個表里的部分數(shù)據(jù)。VPD分為以下兩個級別。

行級別:在該級別下,可以控制某些用戶只能查看到某些數(shù)據(jù)行。比如,對于銷售數(shù)據(jù)表sales 來說,每個銷售人員只能檢索出他自己的銷售數(shù)據(jù),不能查詢其他銷售人員的銷售數(shù)據(jù)。

列級別:在該級別下,可以控制某些用戶不能檢索某個表的某個列的值。比如用戶HR 下的 employees 表中,含有工資(salary)列,由于該列比較敏感,因此不讓其他用戶查詢該列的值。 其他用戶檢索該列時,會發(fā)現(xiàn)其值全都為空(null )。

一、基于行的VPD 

基于行的VPD 也叫作Fine-Grained Access Control ,簡稱 FGAC 。FGAC 通過定義規(guī)則實現(xiàn),規(guī)則 的集合叫做FGAC 政策(policy)。如果對某個表設置了 FGAC ,則當用戶對該表發(fā)出查詢或者DML 語句時,Oracle 都會根據(jù)定義的 FGAC 政策,而自動改寫這些SQL 語句。其改寫方式為自動在SQL 語句后面添加where條件。

比如,我們在OE用戶下有一個表sales_list ,存放了所有的銷售記錄。每個銷售人員只能查詢他 自己的銷售記錄。于是,我們在sales 表上設置FGAC 政策來實現(xiàn)這個業(yè)務需求。如果某個銷售人員 (假設其登錄的用戶名為 S0020 )發(fā)出下面的查詢語句:

Select * from sales_list ; 

當Oracle 在執(zhí)行該語句時,如果發(fā)現(xiàn) sales_list 表上存在FGAC 政策,于是就會根據(jù) FGAC 政策,按照如下方式改寫該SQL 語句:

Select * from sales_list where seller_id='S0020'; 

對用戶來說,這個添加 where條件的過程是完全透明的,用戶并不知道 Oracle 已經(jīng)改寫了他發(fā)出的SQL 語句,從而過濾了查詢結(jié)果。當然,如果該銷售人員發(fā)出的語句為:

Select * from sales_list where values>1000 ; 

那么,當Oracle 在改寫該 SQL 語句時,則會改寫為如下形式:

Select * from sales_list where qty_sold>1000 and seller_id='S0020'; 

使用FGAC 政策來限定返回記錄的方式具有許多優(yōu)點。比如,不需要改寫應用程序、對用戶完全透明、集中設置、便于管理等。

在使用FGAC 時,會涉及應用程序上下文(Application Context)的概念,使用應用程序上下文可 以簡化FGAC 的實現(xiàn)。應用程序上下文是一個數(shù)據(jù)庫對象,可以把它理解為數(shù)據(jù)庫里的每個 session 的全局環(huán)境變量。一旦用戶登錄到數(shù)據(jù)庫,從而創(chuàng)建出session 以后,應用程序上下文就在整個 session 的生命周期里可用。在應用程序上下文里可以定義多個屬性,并為這些屬性設置具體的值。而用戶不 能直接修改屬性的值,只能通過程序包來修改屬性值。應用程序上下文總是由用戶sys 擁有。

比如,對于前面 sales_list 表的例子來說。我們可以創(chuàng)建一個應用程序上下文,當用戶登錄時,將 該用戶的ID 號作為一個屬性值放入該應用程序上下文中。然后在定義FGAC 政策的時候,將該用戶 ID號取出,并作為限定條件短語(也就是where條件語句)返回給 Oracle,從而實現(xiàn)FGAC 。

在Oracle 數(shù)據(jù)庫里,已經(jīng)為每個 session 都預先建立了一個應用程序上下文:userenv。一旦建立了session ,該 session 就可以使用這個應用程序上下文。在 userenv中已經(jīng)預先定義了一些屬性,比如 ip_address、session_user和db_name 等。在獲取應用程序上下文里的屬性值時,我們使用sys_context 函數(shù)。該函數(shù)包含兩個參數(shù),第一個參數(shù)表示應用程序上下文的名稱,第二個參數(shù)表示要顯示的屬性 名稱。如下所示:

SQL> select sys_context('userenv','ip_address') "IP",    sys_context('userenv','db_name') "DB" from dual; IP           DB ---------------   --------- 152.68.32.60     ora10g 

我們也可以創(chuàng)建自己的應用程序上下文,如下所示:

SQL> create or replace context sales_ctx using oe.sales_app_pkg; 

在這里,sales_ctx 是應用程序上下文的名稱,而 sales_app_pkg 則是用來設置sales_ctx 里屬性的程序包。在創(chuàng)建應用程序上下文時,指定的、用來設置其中屬性的程序包可以不必事先存在。但是在為應用程序上下文里設定屬性值時,該程序包必須存在,否則報錯。如果要刪除應用程序上下文,則使用下面的命令:

SQL> drop context sales _ctx; 

創(chuàng)建了應用程序上下文以后,我們就可以在其中設置屬性了。在設置具體的應用程序上下文屬性時,必須使用Oracle 提供的程序包 dbms_session.set_context 來設置其屬性。其使用格式為: 

dbms_session.set_context ('context_name', 'attribute_name', 'attribute_value') 

我們只能在程序包里使用dbms_session.set_context,而不能直接在SQL*Plus里調(diào)用。如下所示: 

SQL> show user USER is "SYS" SQL> exec dbms_session.set_context('sales_ctx','seller_id','S0020'); BEGIN dbms_session.set_context('sales_ctx','seller_id','S0020'); END; * ERROR at line 1: ORA-01031: insufficient privileges ORA-06512: at "SYS.DBMS_SESSION", line 90 ORA-06512: at line 1 

我們創(chuàng)建oe.sales_app_pkg包,如下所示:

SQL> connect oe/oe SQL> create or replace package sales_app_pkg is  2  procedure set_sales_context;  3 end;   4 / SQL> create or replace package body sales_app_pkg is  2  procedure set_sales_context is  3  begin  4  dbms_session.set_context('sales_ctx','seller_id',user);  5  end;  6 end;  7 / SQL> grant select on sales_list to public; SQL> grant update on sales_list to public; SQL> grant execute on sales_app_pkg to public; 

把執(zhí)行oe.sales_app_pkg 程序包的權(quán)限賦給所有用戶以后,我們可以測試應用程序上下文是否生效了。

SQL> connect hr/hr SQL> exec oe.sales_app_pkg.set_sales_context; SQL> select sys_context('sales_ctx','seller_id') from dual; SYS_CONTEXT('SALES_CTX','SELLER_ID') -------------------------------------------------------------------------------- HR 

可以看到,應用程序上下文生效了。接下來,我們創(chuàng)建用于FGAC 規(guī)則的函數(shù)。

SQL> create or replace package sales_app_pkg is  2  procedure set_sales_context;  3  function where_condition  4  (p_schema_name varchar2,p_tab_name varchar2)  5   return varchar2;  6 end;  7 /  SQL> create or replace package body sales_app_pkg is  2 procedure set_sales_context is  3   v_user varchar2(30);  4 begin  5  dbms_session.set_context('sales_ctx','seller_id',user);  6 end;  7   8 function where_condition  9 (p_schema_name varchar2,p_tab_name varchar2) return varchar2 is  10  v_seller_id varchar2(100) := upper(sys_context('sales_ctx','seller_id'));  11  v_where_condition varchar2(2000);  12 begin  13  if v_seller_id like 'S%' then  14   v_where_condition := 'seller_id = ' || '''' || v_seller_id || '''';  15  else  16   v_where_condition := null;  17  end if;  18  return v_where_condition;  19 end;  20 end;  21 / 

在這里,我們主要關注 where_condition 函數(shù),該函數(shù)會為 FGAC 規(guī)則返回限定條件。這種 FGAC 規(guī)則函數(shù)必須具有兩個傳入?yún)?shù),第一個參數(shù)表示 schema 名稱,第二個參數(shù)表示表的名稱。表示對哪 個schema 下的哪個表添加FGAC 規(guī)則。同時必須返回字符型的值,該返回值會被Oracle 自動添加到 SQL 語句中的where條件部分。不過函數(shù)名稱和參數(shù)名稱可以按照需要進行指定。從這里定義的函數(shù) 體中可以看出,如果登錄的用戶名以S 開頭,則會受到FGAC 規(guī)則的限制,where 條件里會添加 seller_id='Sxxxx' ,Sxxxx 表示登錄的用戶名。否則,如果以其他用戶的身份登錄,則不會受到FGAC規(guī)則的限制。

創(chuàng)建了用于FGAC 規(guī)則的函數(shù)以后,我們開始定義FGAC 規(guī)則。

SQL> connect / as sysdba SQL> begin  2  dbms_rls.add_policy(  3    OBJECT_SCHEMA=>'oe',  4    OBJECT_NAME=>'sales_list',  5    POLICY_NAME=>'oe_sales_list_fgac',  6    FUNCTION_SCHEMA=>'oe',  7    POLICY_FUNCTION=>'sales_app_pkg.where_condition',  8    STATEMENT_TYPES=>'select,update',  9    UPDATE_CHECK=>true,  10    ENABLE=>true);  11 end;  12 / 

如上所示,我們使用 dbms_rls 程序包來創(chuàng)建 FGAC 規(guī)則。我們?yōu)橛脩?OE下的sales_list 表創(chuàng)建了 規(guī)則;該規(guī)則利用用戶 OE下的sales_app_pkg.where_condition 函數(shù)返回 where條件;該規(guī)則作用的 SQL 語句類型為select 和update ;update_check 參數(shù)說明是否對更新以后的結(jié)果判斷是否滿足 FGAC 規(guī)則; 在創(chuàng)建規(guī)則的同時,我們也啟用該規(guī)則(enable 設置為true )。

創(chuàng)建了FGAC 規(guī)則以后,我們需要在用戶登錄到應用程序的時候,調(diào)用 sales_app_pkg  程序包里 的set_sales_context 存儲過程來設置該用戶的應用程序上下文里的 seller_id 屬性的值。在實際應用中, 我們可以在登錄界面上,當用戶單擊登錄按鈕的時候進行設置。在這里為了演示效果,我們創(chuàng)建一個 登錄觸發(fā)器來設置,如下所示:

SQL> connect / as sysdba SQL> create or replace trigger set_seller_id_on_logon  2 after logon on DATABASE  3 begin  4  oe.sales_app_pkg.set_sales_context;  5 end;  6 /  

現(xiàn)在,我們可以開始測試FGAC 規(guī)則的效果了。

SQL> connect oe/oe SQL> select seller_id,count(*) from sales_list group by seller_id; SELLER_ID  COUNT(*) ---------  --------- S0010        1067 S0030        968 S0020        1465 

以用戶OE的身份登錄以后,可以看到,三個銷售人員各自的數(shù)據(jù)行數(shù)。然后以S0010 的身份登錄:

SQL> connect s0010/s0010 SQL> select sys_context('sales_ctx','seller_id') from dual; SYS_CONTEXT('SALES_CTX','SELLER_ID') --------------------------------------- S0010 SQL> select seller_id,count(*) from oe.sales_list group by seller_id; SELLER_ID  COUNT(*) ---------  --------- S0010        1067 

很明顯看到,我們設置的FGAC 規(guī)則生效了。我們繼續(xù)測試更新操作:

SQL> select seller_id,qty_sold from oe.sales_list where id=300; SELLER_ID  QTY_SOLD ---------  -------- S0010     1 SQL> update oe.sales_list set seller_id='S0020' where id=300; update oe.sales_list set seller_id='S0020' where id=300      * ERROR at line 1: ORA-28115: policy with check option violation 

由于我們在創(chuàng)建FGAC 規(guī)則時,指定了update_check 為true ,當用戶 S0010 登錄以后更新sales_list 表,將 seller_id 從S0010 更新為S0020 時報錯,因為 S0010 無權(quán)查詢和修改不屬于他的銷售數(shù)據(jù)。如 果指定update_check 為false ,則允許這樣的update 語句成功。

FGAC 規(guī)則的使用是非常靈活的,其關鍵就在于 where_condition 函數(shù)的寫法。如果要刪除 FGAC規(guī)則,則執(zhí)行下面的代碼:

SQL> begin  2  dbms_rls.drop_policy(  3    OBJECT_SCHEMA=>'oe',  4    OBJECT_NAME=>'sales_list',  5    POLICY_NAME=>'oe_sales_list_fgac');  6 end;  7 / 

二、基于列的VPD 

對于某些敏感列來說,比如員工的工資等,我們可以通過創(chuàng)建基于列的 VPD ,從而屏蔽這些敏感列,只有具有權(quán)限的用戶才能訪問這些列。

基于列的VPD 與前面討論的FGAC 一樣,也是通過設置政策來實現(xiàn)的。設置基于列的VPD 時,我們首先需要創(chuàng)建一個政策所需要用到的函數(shù),如下所示。

SQL> connect hr/hr SQL> create or replace function hr_col_vpd  2 (p_owner in varchar2,p_obj in varchar2)  3  return varchar2  4 is   5 l_ret  varchar2(2000);  6 begin  7   if (p_owner = USER) then  8    l_ret := NULL;  9   else  10    l_ret := '1=2';  11   end if;  12   return l_ret;  13 end;   14 / 

這里,我們創(chuàng)建了一個規(guī)則函數(shù)。與 FGAC 規(guī)則一樣,該函數(shù)必須有兩個傳入?yún)?shù),第一個表示 要限定的表所屬的schema 名稱,第二個表示要限定的表的名稱。在該函數(shù)中,我們定義,如果登錄用 戶為表的屬主,則可以查看所有列;否則,登錄用戶不是表所屬的用戶,則不能查看指定列。

至于具體哪些列要被屏蔽,則需要在定義政策時進行指定,如下所示:

SQL> begin  2 dbms_rls.add_policy(object_schema=>'hr',  3 object_name=>'employees',  4 policy_name=>'hr_emp_col_policy',  5 function_schema=>'hr',  6 policy_function=>'hr_col_vpd',  7 statement_types=>'select',  8 sec_relevant_cols=>'salary',  9 sec_relevant_cols_opt => dbms_rls.all_rows  10 );  11 end;  12 / 

創(chuàng)建基于列VPD 與創(chuàng)建FGAC 政策一樣,也是使用dbms_rls 程序包里的add_policy 存儲過程。 在這里,我們定義了一個名為 hr_emp_col_policy 的政策。該政策作用在用戶 HR下的employees 表上; 采用的政策函數(shù)為用戶HR下的hr_col_vpd 。
與FGAC 政策不同的是,我們需要指定另外兩個參數(shù):sec_relevant_cols表示要屏蔽的列的名稱, 可以指定多個列,列與列之間用逗號隔開;sec_relevant_cols_opt 設置為all_rows,則說明對 employees 表里所有的記錄都屏蔽salary 列。

我們以用戶HR的身份登錄,并顯示salary 列。

SQL> connect hr/hr SQL> select employee_id,last_name,salary from hr.employees where rownum<4; EMPLOYEE_ID  LAST_NAME      SALARY -----------  -------------    ------- 198        OConnell        2600 199        Grant          2600 200        Whalen         4400 

可以看到所有的salary 列都顯示出來了。然后以用戶OE的身份登錄,執(zhí)行下面的SQL 語句:

SQL> connect oe/oe SQL> select employee_id,last_name,salary from hr.employees where rownum<4; EMPLOYEE_ID  LAST_NAME      SALARY -----------  -------------    ------- 198        OConnell 199        Grant 200        Whalen 

很明顯,對于用戶OE來說,salary 列已經(jīng)被屏蔽了。

總結(jié)

以上就是本文關于oracle/92961.html">oracle 虛擬專用數(shù)據(jù)庫詳細介紹的全部內(nèi)容,感興趣的朋友可以瀏覽本站其他相關專題,有什么問題可以隨時留言,小編會及時回復大家。感謝朋友們對本站的支持!


注:相關教程知識閱讀請移步到oracle教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
国产精品video| 国产精品日本精品| 国产精品国色综合久久| 久久99久久久| 久久国产精品免费一区| 999国产精品亚洲77777| 在线免费黄色毛片| 欧美理论在线观看| 国产一区二区三区久久| 88xx成人精品| 国产色在线 com| 性感美女久久精品| 国产欧美日韩在线视频| 精品久久久久久久一区二区蜜臀| 欧美裸体网站| 亚洲影视在线观看| 成年男女免费视频网站不卡| 免费成人直播| 久久国产精品亚洲va麻豆| 色婷婷一区二区三区| 久久伊人免费视频| 日韩激情免费视频| 艹b视频在线观看| 尤物网站在线| 国产手机免费视频| 黄色成人羞羞视频| 免费观看黄色网| av福利网址| 久久av少妇| 国产亚洲va综合人人澡精品| 中文字幕一区二区三区在线不卡| 久久久久久久久国产一区| 久久久久久久激情| 国产精品九九久久久久久久| aa在线观看视频| 天天色 色综合| 自拍偷拍精品| 亚洲在线免费观看视频| 国产精品xxxx喷水欧美| 亚洲人人夜夜澡人人爽| 高清全集视频免费在线| 亚洲精品无播放器在线播放| 国产精品入口麻豆九色| 色伊人久久综合中文字幕| 欧洲精品码一区二区三区免费看| 国产国产人免费人成免费视频| 国产精品毛片久久久久久久| 国产1区2区在线| 日韩黄色成人| 国产超碰91| 日韩.com| 久久国产精品久久久| 日韩私人影院| 亚洲精品视频99| 在线观看成年人网站| 国产精品综合网| 在线免费观看av的网站| 国产91在线视频蝌蚪| 国产吃瓜黑料一区二区| 在线观看免费黄色网址| 国产高清中文字幕在线| 国产真实伦在线观看| 久草影视在线| 国产精品成人免费精品自在线观看| 国产成人亚洲欧美| 免费观看的毛片| 国产免费麻豆视频| 久久亚洲国产成人精品性色| 牛牛在线精品视频| 国产一区视频在线观看免费| 福利在线白白| 成年美女黄网站色大片不卡| 91国产精品视频在线观看| 在线日韩视频| 亚洲福利影片在线| 国产成人av在线播放| 一区在线观看视频| 亚洲国产99| 亚洲欧美日本在线观看| 久热精品视频在线播放| 国产成人l区| 国产裸体永久免费无遮挡| 91在线免费看片| 9191精品国产综合久久久久久| 日韩成人中文电影| 老司机2019福利精品视频导航| 国产精品无码久久久久一区二区| 成人在线免费观看黄色| 九九九久久久久| 1区2区3区在线| 日本免费一区二区三区最新| 亚洲啊v在线免费视频| 欧美一区二区三区视频免费播放| 中文字幕av久久爽一区| 不卡的av在线播放| 国产在线播放一区三区四| 怡红院成人在线| 男女污污视频在线观看| 少妇高潮喷水久久久久久久久久| 亚洲综合网av| 800av在线免费观看| 日韩视频免费中文字幕| 亚洲18女电影在线观看| 欧美人动性xxxxz0oz| 日本一区二区三区四区| 欧美三日本三级三级在线播放| 国产91白丝在线播放| 国产精品啊v在线| av麻豆国产| 永久久久久久| 国产1区2区3区| 亚洲视频精品一区| 亚洲综合免费观看高清完整版在线| 精品午夜一区二区三区| 国产精品欧美一级免费| 欧美精品人人做人人爱视频| 日韩综合在线视频| 成年免费插网| 高清乱码毛片入口| 国产精品久久久久久亚洲影视| 蜜臀av午夜一区二区三区| 日本高清不卡一区| 九色蝌蚪在线| 在线播放性xxx欧美| 激情丁香在线| 大香伊人久久精品一区二区| 成年人视频在线免费看| 亚洲成年人专区| 九九热在线视频观看这里只有精品| 欧美日本黄色| 成年人网站免费看| 日本黄色免费网址| 亚洲人视频在线| 欧洲美一区二区三区亚洲| 日韩高清影视在线观看| 国产红桃视频| 亚洲五月六月丁香激情| 免费人成在线观看视频播放| 国产淫片免费看| 欧美性猛交xxxx乱大交hd| 好看的视频你懂的| 精品国产一区二区三区四区四| 精品美女视频在线观看免费软件| 亚洲国产婷婷综合在线精品| 免费永久在线观看黄网| 久久最新网址| 午夜美女久久久久爽久久| 欧美成人免费网站| 91精品国产综合久久久久久蜜臀| 国产高清一区| 国产精品久久电影观看| 夜夜嗨网站十八久久| 中文精品久久久久人妻不卡| 中文在线一区二区三区| 欧洲成人午夜免费大片| 久久资源av| 中文av一区特黄| 中文字幕在线观看的网站| 精品国产1区二区| 亚洲va国产va欧美va观看| 艳妇乳肉豪妇荡乳av| 成熟妇人a片免费看网站| 色在线观看视频| 亚洲天堂网一区二区| 婷婷精品在线| 国产一区二区精品福利地址| 在线观看污网站| 国产精品久久久久免费a∨大胸| 日韩视频一区二区三区在线播放| 国产chinese精品一区二区| 三级视频网站在线| 亚洲第一区第一页| 91在线导航| 日韩免费一二三区| 懂色av中文字幕一区二区三区| 欧美日韩午夜剧场| 很污很黄的网站| 九色综合日本| 国产精品呻吟久久| 亚洲精品一区二区三区蜜桃| www.狠狠艹| 色婷婷精品久久二区二区蜜臀av| 日韩av影片在线观看| 国产福利精品一区二区三区| 成视频在线观看免费观看| 亚洲一卡二卡三卡| 成人私拍视频| 国产探花在线精品一区二区| 亚洲xxx在线观看| 三上悠亚在线免费观看| 亚洲综合在线五月| 尤物在线观看视频| 免费在线成人网| 国产高清一级片| 久久精品这里有| 噜噜噜天天躁狠狠躁夜夜精品| 欧美日韩在线观看视频| 亚洲午夜精品久久久久久人妖| 国产成人免费av在线| 久久伦理中文字幕| 国产精品不卡在线观看| 午夜精品一区二区三区在线视频| 中文字幕亚洲在线观看| 国产免费人做人爱午夜视频| 国产精欧美一区二区三区蓝颜男同| 97人洗澡人人免费公开视频碰碰碰| 最近中文字幕第一页| 99久久伊人精品| 中文字幕伦理片| 欧美日韩伦理片| 国产精品久久久久久在线观看| 中文字幕色av一区二区三区| 91大学生片黄在线观看| 任你躁在线精品免费| 久久久av亚洲男天堂| 国产青青草视频| 永久av在线| 久久视频在线直播| 丁香六月婷婷| 91久久在线观看| 久久精品系列| 国产精品久久久久久久久久尿| 美女av在线免费观看| 2018国产在线| 91农村精品一区二区在线| 成人午夜天堂| 国产精品久久久久9999爆乳| 果冻天美麻豆一区二区国产| 亚洲免费综合| 免费观看在线一区二区三区| 亚洲热线99精品视频| 国产精品理论片| 国产精品爽爽久久久久久| 精品国产高清自在线一区二区三区| 香蕉污视频在线观看| 99thz桃花论族在线播放| 一区二区三区在线观看免费| 亚洲天堂导航| 日韩大片b站免费观看直播| 欧美日韩影视| 国产精品亚洲综合久久小说| 国产高清亚洲| 啊啊啊啊啊啊啊视频在线播放| 国产91在线精品| 国产福利视频在线播放| 91精品国产91| 日韩网站在线| 激情小说网站亚洲综合网| 日韩欧美国产成人精品免费| 亚洲影院色在线观看免费| 激情亚洲另类图片区小说区| 在线人成动漫视频在线观看| 亚洲色欲综合一区二区三区| 无码无套少妇毛多18pxxxx| 91精品国产综合久久久蜜臀粉嫩| 日日摸夜夜添夜夜添毛片av| 国产免费av在线| 成年人网站在线观看免费| 成人h动漫精品一区二区无码| 菠萝菠萝蜜在线视频免费观看| 国产精品宾馆在线精品酒店| 亚洲欧洲午夜一线一品| 嫩草视频免费在线观看| 先锋成人影音| 一本久道综合久久精品| 四虎国产精品成人免费入口| 九九九久久久久| 欧美亚洲国产怡红院影院| 欧美成人xxxxx| 国产一区二区三区免费观看在线| 欧美mv和日韩mv国产网站| 最新版天堂中文在线官网| 黄色小说在线观看视频| 亚洲经典在线| 精品成av人一区二区三区| 1pondo在线播放免费| 亚洲国产毛片aaaaa无费看| 国产又黄又爽又猛免费app| 欧美一级黄色网| 99re6这里有精品热视频| 亚洲欧美日韩视频二区| 国产精品一区一区三区| 亚洲一二三四2021不卡| 精品国产伦一区二区三区观看说明| 中国黄色a级片| 性色av一区二区咪爱| 成人亚洲精品7777| 欧美精品成人| 国产精品7777777| 91影院未满十八岁禁止入内| 午夜精品一区在线观看| 国产精品一区2区3区| 欧美97人人模人人爽人人喊视频| 日韩美女天天操| 7788色淫网站小说| 欧美日韩在线视频首页| 国产夜色精品一区二区av| 亚洲成人一区在线观看| 亚洲欧美在线不卡| 亚洲欧美日韩视频一区| 久久国产精品久久| 日韩欧美在线中文字幕| 2018亚洲男人天堂| 亚洲视频重口味| 日韩精品一区不卡| 国产美女自慰在线观看| 动漫视频在线一区| 1024精品久久久久久久久| 男女网站在线观看| 91深夜福利视频| 久久久久久9| 国产精品久久久久久久免费看| 国产精品久久久久久久久久久久| 一级成人免费视频| 欧美又粗又硬又大久久久| 久久久人人人| 亚洲精品免费在线视频| 成人动态视频| 成人3d动漫一区二区三区91| 久久视频国产| 在线观看一区日韩| 亚洲午夜精品久久久久久久久| 国产精品视频3p| a视频在线播放| 欧美性受xxxx| 亚洲一区二区三区四区五区黄| 日本免费网站在线观看| 国产成人黄色片|