控制普通使用者訪問資料字典
控制普通使用者訪問資料字典
預設情況下普通使用者是不能夠訪問sys schema 中的資料字典的。
SQL> create user testdic identified by test
2 default tablespace users
3 temporary tablespace temp;
User created.
SQL> grant create session to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from user_users;
COUNT(*)
----------
1
SQL> select count(*) from dba_users;--不能訪問位於sys schema 中的資料字典。
select count(*) from dba_users
*
ERROR at line 1:
ORA-00942: 表或檢視不存在
現實中,普通使用者往往需要訪問資料字典來獲得所需要的資訊,這時候可以透過以下的
幾種方式來達到。
一、授予普通使用者select any dictionary 系統許可權。
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> grant select any dictionary to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from dba_users;--可以訪問資料字典了。
COUNT(*)
----------
23
SQL> select count(*) from v$session;
COUNT(*)
----------
22
SQL> select count(*) from hr.employees;--但是不能夠訪問其他schema 中的物件。
select count(*) from hr.employees
*
ERROR at line 1:
ORA-00942: 表或檢視不存在
二、給普通使用者授予select_catalog_role 角色。
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> revoke select any dictionary from testdic;
Revoke succeeded.
SQL> grant select_catalog_role to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from dba_users;
COUNT(*)
----------
23
SQL> select count(*) from V$session;
COUNT(*)
----------
22
三、在o7_dictionary_accessibility 引數設定為 true 的時候,普通使用者獲得select any table 系統許可權也可以訪問sys schema 中的資料字典。
SQL> show parameter o7
NAME TYPE VALUE
------------------------------------ ---------------------- ----------
O7_DICTIONARY_ACCESSIBILITY boolean FALSE
SQL> revoke select_catalog_role from testdic;
Revoke succeeded.
SQL> grant select any table to testdic;
Grant succeeded.
SQL> conn testdic/test
Connected.
SQL> select count(*) from hr.employees;--可以訪問其他普通使用者schema 中的表。
COUNT(*)
----------
107
SQL> select count(*) from dba_users;
select count(*) from dba_users
*
ERROR at line 1:
ORA-00942: 表或檢視不存在
因為o7_dictionary_accessibility 引數設定為 false,所以不能訪問sys schema 中的資料字典。在oracle 9i 起該引數的預設值為false,這樣就可以限制帶有any 的系統許可權訪問 sys 中的物件,在其他更早oracle版本中o7_dictionary_accessibility 是預設為true 的,也不應該透過授予使用者select any table 系統許可權的方式來讓他訪問資料字典,因為這樣使用者可以訪問其他schema 中的物件。留下安全隱患。
注:如果知道普通使用者只需要訪問固定的幾張資料字典,可以透過以下的方式來授予許可權。假如hr 使用者只需要訪問 dba_users 等幾個資料字典表。可以透過一一授予物件許可權的方式或者把這些物件的相應許可權授予role ,再把role 授權給hr.
SQL> conn hr/hr
Connected.
SQL> select count(*) from dba_users;
select count(*) from dba_users
*
ERROR at line 1:
ORA-00942: 表或檢視不存在
SQL> conn sys as sysdba
Enter password:
Connected.
SQL> grant select on dba_users to hr;
Grant succeeded.
SQL> conn hr/hr
Connected.
SQL> select count(*) from dba_users;
COUNT(*)
----------
23
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26110315/viewspace-731271/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 控制資料訪問(一)
- 【體系結構】Oracle 普通使用者查詢資料字典Oracle
- Oracle資料庫訪問控制Oracle資料庫
- 利用NO_MERGE解決資料字典檢視訪問低效
- 不同使用者訪問資料--current schema
- oracle10g database vault 訪問Realms相關的資料字典OracleDatabase
- (zt)利用NO_MERGE解決資料字典檢視訪問低效
- 利用NO_MERGE解決資料字典檢視訪問低效 ZT
- SQLServer控制使用者訪問許可權表SQLServer訪問許可權
- 服務端指南 | 基於資料的訪問控制服務端
- 資料庫mysql如何訪問控制?有哪些階段?資料庫MySql
- 資料訪問模式:資料併發控制(Data Concurrency Control)模式
- SQLServer訪問Oracle(通過同義詞-檢視-資料字典)出現的問題SQLServerOracle
- 資料安全合規需要從基於角色的訪問控制邁向基於屬性的訪問控制
- Mongodb訪問控制MongoDB
- Flask——訪問控制Flask
- RabbitMQ訪問控制MQ
- Nginx訪問控制Nginx
- Swift 訪問控制Swift
- 幽默:資料技術本身真的能控制訪問安全? - ardalis
- 分散式文件儲存資料庫之MongoDB訪問控制分散式資料庫MongoDB
- OCP課程14:SQL之控制使用者訪問SQL
- C++ 訪問說明符詳解:封裝資料,控制訪問,提升安全性C++封裝
- MySQL新增使用者以及資料庫訪問授權MySql資料庫
- 資料訪問層
- BitRhymes:Facebook手機遊戲玩家訪問遊戲次數比普通使用者多65%遊戲
- 檔案和目錄的訪問控制(2)新增訪問控制
- 使用DLL注入繞過“受控制的資料夾訪問”功能
- 關於python訪問字典的方法Python
- python 字典訪問的三種方法Python
- Oracle 資料字典和資料字典檢視Oracle
- ABAC訪問控制模型模型
- JoomlaACL訪問控制列表OOM
- 類的訪問控制
- 資料字典
- Spring資料訪問Spring
- JDBC資料庫訪問JDBC資料庫
- 資料訪問 - EntityFramework整合Framework