1. 程式人生 > >Oracle查詢檢視需要有基表的查詢許可權嗎?

Oracle查詢檢視需要有基表的查詢許可權嗎?

場景:將使用者A的檢視查詢許可權賦予使用者B報錯,提示ORA-01720: grant option does not exist for ‘xx.xx’

問題:
1.查詢檢視,是否必須要有檢視基表的查詢許可權?
2.將檢視的查詢許可權賦予其他使用者,只需要有基表的查詢許可權嗎?

測試步驟:
1.建立三個使用者test1,test2,test3,賦予connect,resource,create view許可權。

SQL> create user test1 identified by test1;
User created.

SQL> create user test2 identified by
test2; User created. SQL> create user test3 identified by test3; User created. SQL> grant create view to test2; Grant succeeded.

2.在test1使用者下建立表t1,將t1的查詢許可權賦予test2。test2使用者建立檢視v_t1,將檢視v_t1的查詢許可權賦予test3。

SQL> create table test1.t1 as select * from dba_objects;

SQL> conn test1/test1;
Connected.

SQL> grant select
on t1 to test2; Grant succeeded. SQL> conn test2/test2; Connected. SQL> create view v_t1 as select * from test1.t1 where rownum = 1; SQL> grant select on v_t1 to test3; grant select on v_t1 to test3 * ERROR at line 1: ORA-01720: grant option does not exist for 'TEST1.T1' SQL> conn test1/test1; Connected. SQL> grant select
on t1 to test2 with grant option; Grant succeeded. SQL> conn test2/test2; Connected. SQL> grant select on v_t1 to test3; Grant succeeded.

3.test3使用者查詢檢視v_t1,然後查詢基表t1。

SQL> conn test3/test3
Connected.
SQL> select * from test2.v_t1;
--結果省略
SQL> select * from test1.t1 where rownum = 1;  
select * from test1.t1 where rownum = 1
                    *
ERROR at line 1:
ORA-00942: table or view does not exist

結論:
1.查詢檢視,不需要基表的查詢許可權。
2.將檢視的查詢許可權賦予其他使用者,賦權使用者需要基表的with grant option許可權。

總結:
檢視的許可權,有兩點需要引起注意:
1.檢視中,類似於定義者許可權的儲存過程,是遮蔽了角色許可權的。比如如果TEST1沒有顯式地將T1表的SELECT許可權給予TEST2,那麼TEST2在建立檢視V_T1時也會報ORA-01031錯誤,即使TEST2使用者擁有DBA角色許可權。

2.如果在使用者A的檢視中,引用了其他使用者B的表,使用者A將檢視的訪問許可權給予使用者C,那麼就變相地將使用者B的表的訪問許可權給予了使用者C,因此,使用者A必須有將使用者B的表的訪問許可權轉授使用者C的許可權,也就是使用者B在授予A許可權時,必須使用with grant option。

相關推薦

Oracle查詢檢視需要查詢許可權

場景:將使用者A的檢視查詢許可權賦予使用者B報錯,提示ORA-01720: grant option does not exist for ‘xx.xx’ 問題: 1.查詢檢視,是否必須要有檢視基表的查詢許可權? 2.將檢視的查詢許可權賦予其他使用者,只需

Oracle筆記(六) 多查詢

針對 多人 筆記 padding 工資 cells 找到 mem 概念 Oracle筆記(六) 多表查詢 本次預計講解的知識點 1、 多表查詢的操作、限制、笛卡爾積的問題; 2、 統計函數及分組統計的操作; 3、 子查詢的操作,並且結合限定查詢、數據排序、多表查詢、統計

oracle數據庫之單查詢

數據 方法 第一個 常用 單表 分組查詢 創建表 如果 value 作為一合格的測試人員對數據庫的單表查詢、多表查詢、分組查詢、子查詢等等這些基本查詢方法還是要會的。不然到企業中,容易被一些人鄙視,或者說如果數據庫學不好,表查不明白,那麽對自己能力來說也是一種侮辱,因為

oracle高階查詢(3)——多查詢

1.多表查詢的基礎笛卡爾集 多張表查詢產生的表的列數等於所有表的列數之和,行數等於多張表之積 2.多表查詢分等值連線,不等值連線,外連線,自連線 等值連線 select e.empno,e.ename from emp e,dept d where e .deptno

ORACLE中賦予一個使用者查詢另一個使用者所有許可權

在管理員賬戶下執行select 'GRANT SELECT ON 被查詢使用者表.'||table_name||' to 要查詢使用者;'  from all_tables where lower(owner)='被查詢使用者'; 例如:select 'GRANT SELE

spring boot 學習心得 使用JpaRepository註解自定義SQL查詢數據庫多查詢

自定義 net http entity onetomany tom pri 查詢語句 重點 一. 首先在@Entity註解的類裏面要寫好外鍵關系. 這個 @ManyToOne 註解可以建立外鍵關系, 不要在自己傻傻的寫一個 private int grades_id;

MySql cmd下的學習筆記 —— 有關多查詢的操作(多查詢練習題及union操作)

image ins myisam name sam row div mysq gin 先建立一張 m 表 mysql> create table m ( -> mid int, -> hid int, -> gid in

靜態查詢和二分法靜態查詢

簡單的操作。。不解釋 #include <iostream> #include <cstdio> #include <cstdlib> #include <string> #include <cmath> #in

JPA分頁多條件查詢和分頁聯查詢

一、分頁多條件查詢–重寫Specification的toPredicate方法 Spring Data JPA支援JPA2.0的Criteria查詢,相應的介面是JpaSpecificationExecutor。 Criteria 查詢:是一種型別安全和更面

程序員需要好的英語水平?

都是 flow over 閱讀 真的 程序員 最新 較差 image 程序員這個行業是很特殊的。之所以說特殊,就是因為它所有的技術大多來自歐美,所以最主流,最新鮮,最正確的技術文章都是英文,遺憾的是,大部分還沒有譯本。 有些譯文還比較差。與其等待別人的翻譯,不如直接閱讀原

Oracle建立使用者並給使用者授權查詢指定檢視許可權

MSV31賬戶登入資料庫進行如下操作: CREATE USER NORTHBOUND IDENTIFIED BY NORTHBOUND  DEFAULT TABLESPACE "TBS_DNINMSV31"  TEMPORARY TABLESPACE "T

oracle新建使用者匯入scott的,解決新使用者查詢scott時出現檢視不存在的問題

1. 備份scott/tiger使用者的表空間     進入控制檯,進入某一個空的目錄。      執行命令:exp      之後會生成一個EXPDAT.DMP    2. 進入dba帳戶     conn sys/sys as sysdba;     create user fpc identifie

Oracle查詢和解鎖方法

數據庫查詢 lar 關系 鎖級別 share 技術 獲取 suse b2c 數據庫操作語句的分類 DDL:數據庫模式定義語言,關鍵字:create DML:數據操縱語言,關鍵字:Insert、delete、update DCL:數據庫控制語言 ,關鍵字:grant

Oracle查詢和多查詢

左外連接 查詢 sele 多表查詢 字段 ora 需要 avg lar 多表查詢需要用到表的連接 連接可以分為:(自行百度)   交叉連接(數字邏輯的笛卡爾積,不做解釋)     等值連接       例如:select * from t_a, t_b where t_a.

Oracle 定時查詢數據插入新中(job+存儲過程)

存儲過程 operation android lec into oid replace user 是否 create table EGMAS_COUNT_DATA(TIMES date not null, COUNT NUMBER(30) not n

Oracle出現鎖查詢並快速解決

oracle鎖表查詢和解決辦法在大家共用一個數據庫經常遇到鎖表的問題,出現的現象.1、存儲過程無法執行2、查詢表數據出現緩慢3、前端出現卡死的現象通過sql查詢出出現鎖表的數據:SELECT dob.OBJECT_NAME Table_Name,lo.SESSION_ID||‘, ‘||vss.SERIAL#

oracle學習之多查詢,子查詢以及事務處理

color 1-1 註意事項 員工 列數 .com 外連接 分析 top-n分析 多表查詢的基礎是采用笛卡爾集: 最終的行數 = 表1的行數 * 表2的行數 最終的列數 = 表1的列數 + 表2的列數 過濾笛卡爾集的關鍵是寫連接條件,N張表至少需要N-1個條件。 多表

[轉抄]oracle查詢去重(效率比較高的一種方式)

sel select 單表查詢 效率 查詢 rownum 說明 acl 分組 1 select 2 * 3 from 4 ( 5 select 6 a.*, rownum r_n 7

Oracle數據庫鎖查詢

tex star art 鎖表 spi rom ext gpo pfile --查看數據庫最大連接數 select value from v$parameter where name = ‘processes‘; --更改數據庫連接數 alter system set p

Oracle的單查詢語句

類型 edate pos 顯示 inf 指定字段 blog 虛擬表 font 使用Oracle 數據庫的測試表單: --單表查詢數據 語法 select (查詢) * 所有 /查詢的字段,多個字段 ,隔開 from (來自) 表名稱 --查詢所有員工的信息 s