關於許可權設定的一個小把戲
現在有一個需求,需要開放一些"特殊“的許可權給開發組。
具體的背景是這樣的:
有三個資料庫使用者,tabowner, tabconn, tab_temp三個使用者
tableowner是owner使用者,裡面存放著表,索引,序列,儲存過程等。
tabconn是一個連線使用者,在這個使用者裡面建立了一些同義詞,可以直接透過這個使用者來進行資料的增刪改查。
tab_temp是一個臨時的連線使用者,透過這個使用者只能查詢一些有限的資訊,不能進行資料的改動。而且不能執行select sequence_name.nextval from dual這樣型別的語句,避免人為干擾sequence的增長。
現在的問題是,因為沒有開放select on sequence的許可權給tab_temp,所以透過tab_temp無法查詢到tabowner裡的sequence資訊。
舉個簡單的例子。
--tabowner建立一個檢視,從user_sequence裡面查詢當前schema中的sequence資訊,得到的結果是實時的。
SQL> create view a as select *from user_sequences;
View created.
--裡面有198條記錄
SQL> select count(*)from a;
COUNT(*)
----------
198
如果我嘗試把檢視訪問的許可權賦予tabconn,那麼是否可以透過tabconn訪問到tabowner中的user_sequences資訊呢?
SQL> grant select on a to tabconn;
Grant succeeded.
SQL> conn tabconn/tabconn
Connected.
SQL> select count(*)from tabowner.a;
COUNT(*)
----------
0
可以看到,這樣是行不通的
不過可以做一個小把戲,使得許可權的訪問可以選擇性的開放。透過dblink
目前tabconn可以訪問all_sequences的資訊,裡面包含tabowner裡的sequence資訊
可以在tab_temp下建立一個db link,然後透過這個db link來做一些工作。
SQL> conn tab_temp/tab_temp
Connected.
SQL>
SQL> create database link temp_link connect to tabconn identified by tabconnusing 'TESTDB';
Database link created.
SQL> select count(*)from all_sequences@temp_link;
COUNT(*)
----------
230
可以看到能夠查到資料了,不過如果足夠細心的話,發現結果好像多了一點,按照我們的要求,指定查詢的是tabowner下的sequence資訊。
SQL> select count(*) from all_sequences@temp_link where sequence_owner='TABOWNER'
2 /
COUNT(*)
----------
197
這樣就沒有問題了。
建立檢視
create view sequence_summary_v as select *from all_sequences@temp_link where sequence_owner='TABOWNER';
直接暴露檢視也不太好,可以透過同義詞來進行遮蔽
SQL> select count(*)from sequence_summary;
COUNT(*)
----------
197
SQL> create synonym sequence_summary for sequence_summary_v;
Synonym created.
這樣對於開發來說,就能夠查到實時的sequence資訊了。而且也能夠杜絕增長/修改sequence value 的情況。
具體的背景是這樣的:
有三個資料庫使用者,tabowner, tabconn, tab_temp三個使用者
tableowner是owner使用者,裡面存放著表,索引,序列,儲存過程等。
tabconn是一個連線使用者,在這個使用者裡面建立了一些同義詞,可以直接透過這個使用者來進行資料的增刪改查。
tab_temp是一個臨時的連線使用者,透過這個使用者只能查詢一些有限的資訊,不能進行資料的改動。而且不能執行select sequence_name.nextval from dual這樣型別的語句,避免人為干擾sequence的增長。
現在的問題是,因為沒有開放select on sequence的許可權給tab_temp,所以透過tab_temp無法查詢到tabowner裡的sequence資訊。
舉個簡單的例子。
--tabowner建立一個檢視,從user_sequence裡面查詢當前schema中的sequence資訊,得到的結果是實時的。
SQL> create view a as select *from user_sequences;
View created.
--裡面有198條記錄
SQL> select count(*)from a;
COUNT(*)
----------
198
如果我嘗試把檢視訪問的許可權賦予tabconn,那麼是否可以透過tabconn訪問到tabowner中的user_sequences資訊呢?
SQL> grant select on a to tabconn;
Grant succeeded.
SQL> conn tabconn/tabconn
Connected.
SQL> select count(*)from tabowner.a;
COUNT(*)
----------
0
可以看到,這樣是行不通的
不過可以做一個小把戲,使得許可權的訪問可以選擇性的開放。透過dblink
目前tabconn可以訪問all_sequences的資訊,裡面包含tabowner裡的sequence資訊
可以在tab_temp下建立一個db link,然後透過這個db link來做一些工作。
SQL> conn tab_temp/tab_temp
Connected.
SQL>
SQL> create database link temp_link connect to tabconn identified by tabconnusing 'TESTDB';
Database link created.
COUNT(*)
----------
230
可以看到能夠查到資料了,不過如果足夠細心的話,發現結果好像多了一點,按照我們的要求,指定查詢的是tabowner下的sequence資訊。
SQL> select count(*) from all_sequences@temp_link where sequence_owner='TABOWNER'
2 /
COUNT(*)
----------
197
這樣就沒有問題了。
建立檢視
create view sequence_summary_v as select *from all_sequences@temp_link where sequence_owner='TABOWNER';
直接暴露檢視也不太好,可以透過同義詞來進行遮蔽
SQL> select count(*)from sequence_summary;
COUNT(*)
----------
197
SQL> create synonym sequence_summary for sequence_summary_v;
Synonym created.
這樣對於開發來說,就能夠查到實時的sequence資訊了。而且也能夠杜絕增長/修改sequence value 的情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-1347104/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 兩個關於許可權設定的問題思考
- 小程式許可權設定(位置)
- 選單許可權和按鈕許可權設定
- [BUG反饋]許可權條目中缺少兩個公開方法的許可權設定
- 關於系統許可權的設計-位操作
- 關於動態許可權
- 關於mysql許可權管理MySql
- ubuntu 許可權管理設定Ubuntu
- postgresql關於許可權的總結SQL
- 關於許可權系統的一些思考
- Linux 如何設定特殊許可權?Linux
- 分享一段Android許可權設定的程式碼Android
- NAS使用者許可權的設定
- 金山文件怎麼設定編輯許可權 金山文件線上編輯許可權設定
- 許可權系統:6個許可權概念模型設計模型
- Vue設定許可權列表目錄Vue
- 基於RBAC的許可權設計模型模型
- 關於公司程式碼許可權的問題
- PostgreSQL物件許可權如何在後設資料中獲取-許可權解讀、定製化匯出許可權SQL物件
- windows10許可權怎麼設定_win10設定使用者許可權的方法WindowsWin10
- 基於位運算的許可權設計
- windows10管理員許可權怎麼設定_win10電腦設定管理員許可權的步驟WindowsWin10
- win10怎麼設定防火牆許可權_win10電腦防火牆許可權如何設定Win10防火牆
- postgresql關於訪問檢視需要的許可權SQL
- mongodb關於使用者許可權的總結MongoDB
- SharePoint Online 站點模板中許可權的設定
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- 微服務中如何設計一個許可權授權服務微服務
- 許可權設計
- 許可權系統:一文搞懂功能許可權、資料許可權
- pg許可權相關
- 如何檢查某個使用者是否具有某個許可權物件上定義的某種許可權物件
- 動態許可權相關的幾個庫分析
- Android14 關於讀寫許可權 (Vivo)Android
- openGauss 設定檔案許可權安全策略
- Bauth許可權系統,基於ThinkPHP5開發 - 一個優秀的整合許可權管理的通用後臺PHP
- Linux 筆記分享八:檔案許可權的設定Linux筆記
- win10 資料夾許可權怎麼設定_win10如何設定資料夾訪問許可權Win10訪問許可權
- 記一次 Laravel日誌許可權許可權問題(定時器導致)Laravel定時器