【SCRIPTS】將使用者具有的所有許可權盡收眼底
如何快速的在SQL*Plus中獲得特定使用者所具有的所有許可權?
針對這個常見的問題我今天編寫了一段簡單指令碼,供大家參考(當然您也可以在此基礎上做進一步的改動,把它變成自己的一個小武器)。
1.Oracle資料庫中與許可權相關的檢視
dba_role_privs:檢視角色
dba_sys_privs :檢視系統許可權
dba_tab_privs :檢視物件許可權
dba_col_privs :檢視列物件許可權
2.指令碼編寫思想
我們使用union將以上許可權相關的檢視檢視結果連線起來便會得到使用者的所有許可權。
思想有多遠,我們就能走多遠。指令碼編寫進行時……
3.指令碼橫空出世
經過除錯,指令碼內容如下。
$ cat privs.sql
set verify off
set linesize 131
col grantee for a15
col privilege for a30
col column_name for a15
col owner for a20
SELECT 'ROLE' TYPE,
grantee,
granted_role privilege,
admin_option ad,
'/' table_name,
'/' column_name,
'/' owner
FROM dba_role_privs
WHERE grantee = UPPER ('&1')
UNION
SELECT 'SYSTEM' TYPE,
grantee,
privilege privilege,
admin_option ad,
'/' table_name,
'/' column_name,
'/' owner
FROM dba_sys_privs
WHERE grantee = UPPER ('&1')
UNION
SELECT 'TABLE' TYPE,
grantee,
privilege privilege,
grantable ad,
table_name,
'/' column_name,
owner
FROM dba_tab_privs
WHERE grantee = UPPER ('&1')
UNION
SELECT 'COLUMN' TYPE,
grantee,
privilege privilege,
grantable ad,
table_name,
column_name,
owner
FROM dba_col_privs
WHERE grantee = UPPER ('&1')
ORDER BY 1
/
undefine 1
set verify on
4.指令碼使用演示
最後,詳細演示一下這個指令碼的使用。
1)建立測試使用者sec
SQL> drop user sec cascade;
User dropped.
SQL> create user sec identified by sec default tablespace TBS_SEC_D;
User created.
2)給sec使用者授予connect角色
SQL> grant connect to sec;
Grant succeeded.
3)給sec使用者授予物件許可權
SQL> grant select on secooler.t to sec;
Grant succeeded.
4)給sec使用者授予系統“select any table”許可權
SQL> grant select any table to sec;
Grant succeeded.
5)授予sec使用者列物件許可權
SQL> grant insert(x), update(x) on secooler.t to sec;
Grant succeeded.
6)使用指令碼檢視一下效果,是不是感覺清晰了許多。
SQL> @privs sec
TYPE GRANTEE PRIVILEGE AD TABLE_NAME COLUMN_NAME OWNER
------ -------- ----------------- --- ----------- ------------ --------
COLUMN SEC INSERT NO T X SECOOLER
COLUMN SEC UPDATE NO T X SECOOLER
ROLE SEC CONNECT NO / / /
SYSTEM SEC SELECT ANY TABLE NO / / /
TABLE SEC SELECT NO T / SECOOLER
上面得到的資訊與我們授權內容是完全相符。
5.小結
很多常見的問題都可以使用SQL指令碼來處理之,這樣既可以防止出錯,也可以大大的減少問題分析和處理的時間,延長DBA的生命。
Good luck.
-- The End --
針對這個常見的問題我今天編寫了一段簡單指令碼,供大家參考(當然您也可以在此基礎上做進一步的改動,把它變成自己的一個小武器)。
1.Oracle資料庫中與許可權相關的檢視
dba_role_privs:檢視角色
dba_sys_privs :檢視系統許可權
dba_tab_privs :檢視物件許可權
dba_col_privs :檢視列物件許可權
2.指令碼編寫思想
我們使用union將以上許可權相關的檢視檢視結果連線起來便會得到使用者的所有許可權。
思想有多遠,我們就能走多遠。指令碼編寫進行時……
3.指令碼橫空出世
經過除錯,指令碼內容如下。
$ cat privs.sql
set verify off
set linesize 131
col grantee for a15
col privilege for a30
col column_name for a15
col owner for a20
SELECT 'ROLE' TYPE,
grantee,
granted_role privilege,
admin_option ad,
'/' table_name,
'/' column_name,
'/' owner
FROM dba_role_privs
WHERE grantee = UPPER ('&1')
UNION
SELECT 'SYSTEM' TYPE,
grantee,
privilege privilege,
admin_option ad,
'/' table_name,
'/' column_name,
'/' owner
FROM dba_sys_privs
WHERE grantee = UPPER ('&1')
UNION
SELECT 'TABLE' TYPE,
grantee,
privilege privilege,
grantable ad,
table_name,
'/' column_name,
owner
FROM dba_tab_privs
WHERE grantee = UPPER ('&1')
UNION
SELECT 'COLUMN' TYPE,
grantee,
privilege privilege,
grantable ad,
table_name,
column_name,
owner
FROM dba_col_privs
WHERE grantee = UPPER ('&1')
ORDER BY 1
/
undefine 1
set verify on
4.指令碼使用演示
最後,詳細演示一下這個指令碼的使用。
1)建立測試使用者sec
SQL> drop user sec cascade;
User dropped.
SQL> create user sec identified by sec default tablespace TBS_SEC_D;
User created.
2)給sec使用者授予connect角色
SQL> grant connect to sec;
Grant succeeded.
3)給sec使用者授予物件許可權
SQL> grant select on secooler.t to sec;
Grant succeeded.
4)給sec使用者授予系統“select any table”許可權
SQL> grant select any table to sec;
Grant succeeded.
5)授予sec使用者列物件許可權
SQL> grant insert(x), update(x) on secooler.t to sec;
Grant succeeded.
6)使用指令碼檢視一下效果,是不是感覺清晰了許多。
SQL> @privs sec
TYPE GRANTEE PRIVILEGE AD TABLE_NAME COLUMN_NAME OWNER
------ -------- ----------------- --- ----------- ------------ --------
COLUMN SEC INSERT NO T X SECOOLER
COLUMN SEC UPDATE NO T X SECOOLER
ROLE SEC CONNECT NO / / /
SYSTEM SEC SELECT ANY TABLE NO / / /
TABLE SEC SELECT NO T / SECOOLER
上面得到的資訊與我們授權內容是完全相符。
5.小結
很多常見的問題都可以使用SQL指令碼來處理之,這樣既可以防止出錯,也可以大大的減少問題分析和處理的時間,延長DBA的生命。
Good luck.
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-619979/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 檢視不同許可權使用者所擁有的物件物件
- mysql 給了使用者所有許可權ALL PRIVILEGES,但是該使用者沒有grant許可權MySql
- 如何檢視oracle使用者具有的許可權和角色Oracle
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- 根據ID查詢該使用者具備使用許可權對應的所有T-CODE
- MySql給賬戶所有許可權MySql
- 使用者許可權繼承另一使用者的許可權繼承
- 【許可權管理】Oracle中檢視、回收使用者許可權Oracle
- 將一個使用者下所有表的查詢許可權賦給另一個使用者
- 查詢使用者的系統許可權和使用者所擁有的角色
- mysql 命令列安裝並給使用者sa所有許可權MySql命令列
- oracle使用者許可權Oracle
- mysql使用者許可權MySql
- oracle 使用者許可權Oracle
- MSSQL 如何匯出db所有使用者許可權建立語句SQL
- 提取使用者許可權或是不同資料庫使用者許可權的同步資料庫
- 查詢mysql資料庫中所有使用者及使用者許可權MySql資料庫
- mysql使用者許可權管理MySql
- mysql使用者和許可權MySql
- 使用者物件許可權管理物件
- Oracle使用者與許可權Oracle
- 使用者許可權 plsql OracleSQLOracle
- Oracle使用者許可權管理Oracle
- linux使用者許可權Linux
- Oracle 使用者許可權管理與常用許可權資料字典列表Oracle
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- SQL Server如何匯出db所有使用者許可權建立語句SQLServer
- 許可權之選單許可權
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- 淺談PostgreSQL使用者許可權SQL
- MySQL 使用者及許可權管理?MySql
- MySQL使用者及許可權管理MySql
- MongoDB 使用者與許可權管理MongoDB
- 使用者許可權系統管理
- Oracle使用者角色許可權管理Oracle
- Linux — 使用者組、許可權Linux
- mysql匯出使用者許可權MySql
- 配置Mysql使用者許可權命令MySql