關於許可權設定的一個小把戲
現在有一個需求,需要開放一些"特殊“的許可權給開發組。
具體的背景是這樣的:
有三個資料庫使用者,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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 關於Linux許可權設定的一點小總結Linux
- 兩個關於許可權設定的問題思考
- 小程式許可權設定(位置)
- 關於許可權系統的設計
- 如何設定許可權?
- 續:關於許可權系統的設計
- 關於資料許可權設計的一些想法
- 關於動態許可權
- 【轉】關於MySQL許可權MySql
- [BUG反饋]許可權條目中缺少兩個公開方法的許可權設定
- 關於系統許可權的設計-位操作
- ubuntu 許可權管理設定Ubuntu
- Atitit godaddy 檔案許可權 root許可權設定Go
- postgresql關於許可權的總結SQL
- 對關鍵信貸控制欄位設定許可權
- 關於 Laravel 日誌許可權Laravel
- Windows許可權設定詳解Windows
- PHP專案許可權設定PHP
- 請教:一個關於行級資料許可權模型的問題模型
- NAS使用者許可權的設定
- SVN伺服器的許可權設定伺服器
- 適配懸浮窗許可權與系統設定修改許可權
- Vue設定許可權列表目錄Vue
- iOS 10設定應用許可權iOS
- 基於RBAC的許可權設計模型模型
- 關於公司程式碼許可權的問題
- 關於oracle檔案許可權的問題Oracle
- 關於許可權管理的實用指令碼指令碼
- 分享一段Android許可權設定的程式碼Android
- 金山文件怎麼設定編輯許可權 金山文件線上編輯許可權設定
- jboss許可權的設定 大俠賜教
- [SAP BO]BOE的 檔案許可權設定
- java反射——關於許可權和異常Java反射
- PostgreSQL物件許可權如何在後設資料中獲取-許可權解讀、定製化匯出許可權SQL物件
- windows10許可權怎麼設定_win10設定使用者許可權的方法WindowsWin10
- 對定義者許可權和呼叫者許可權的理解
- Serv-U許可權設定規則
- win8.1最高許可權設定方法