解析grant connect, resource to user語句


今天同事問了一個問題:“創建用戶分配的權限是:grant connect,resource to user;,可是建立view的時候失敗了,錯誤是權限不夠,后來我給這個用戶分配了創建view的權限,然后創建view才干夠成功。我有個疑問就是為什么用戶在自己的空間沒辦法直接建立view,還得添加創建view的權限才干夠?”


我們知道,創建一個新用戶時,網上各種的帖子包含書籍中經經常使用到一個grant connect,resource to user;,這樣才干用這個用戶登錄數據庫,那么這條語句的真正作用是什么呢?


1、首先,grant XXX to user;,grant是授權的作用,這里的XXX能夠是一個角色role,也能夠是權限,比如grant role to user;,或grant insert on table to user;。

MOS中給出的標准SQL語句:

創建角色:

create role <role name> [IDENTIFIED BY <password>/USING <package>/EXTERNALLY/GLOBALLY ];

賦予角色權限:

grant <object/system privilege> to <role name>;

從角色收回權限:

revoke <privilege> from <role name>;

將角色賦予還有一個角色或用戶:

grant <role> to <username or role> ;


2、其次,connect和resource是兩個系統內置的角色,和dba是並列的關系。

參考一些帖子的說法,權限能夠分為兩類:

系統權限:系統規定用戶使用數據庫的權限。(系統權限是對用戶而言)。 

實體權限:某種權限用戶對其他用戶的表或視圖的存取權限。(是針對表或視圖而言的)。

接下來看系統權限,

DBA:擁有所有特權,是系統最高權限,僅僅有DBA才干夠創建數據庫結構。

RESOURCE:擁有Resource權限的用戶僅僅能夠創建實體,不能夠創建數據庫結構。

CONNECT:擁有Connect權限的用戶僅僅能夠登錄Oracle,不能夠創建實體,不能夠創建數據庫結構。

對於普通用戶:授予connect, resource權限。 

對於DBA管理用戶:授予connect,resource, dba權限。

系統權限僅僅能由DBA用戶授出:sys, system(最開始僅僅能是這兩個用戶)。普通用戶通過授權能夠具有與system同樣的用戶權限,

但永遠不能達到與sys用戶同樣的權限,system用戶的權限也能夠被回收。

另外,對於WITH ADMIN OPTION級聯授權的問題,

1)假設使用WITH ADMIN OPTION為某個用戶授予系統權限,那么對於被這個用戶授予同樣權限的全部用戶來說,取消該用戶的

系統權限並不會級聯取消這些用戶的同樣權限。 

2)系統權限無級聯,即A授予B權限,B授予C權限,假設A收回B的權限,C的權限不受影響;系統權限能夠跨用戶回收,即A能夠

直接收回C用戶的權限。


3、證明下為什么resource和connect的角色不能創建視圖。

SQL> select role, count(*) from role_sys_privs group by role;

ROLE                                    COUNT(*)

------------------------------ ----------

EXP_FULL_DATABASE            8

DBA                                      160

SCHEDULER_ADMIN             6

RESOURCE                            8

IMP_FULL_DATABASE           68

CONNECT                             1

能夠看到RESOURCE和CONNECT具有的權限個數。


以下看看各自都有什么權限:

SQL> select grantee,privilege from dba_sys_privs where grantee='RESOURCE' order by privilege;

GRANTEE                              PRIVILEGE

------------------------------ ----------------------------------------
RESOURCE                            CREATE CLUSTER
RESOURCE                            CREATE INDEXTYPE
RESOURCE                            CREATE OPERATOR
RESOURCE                            CREATE PROCEDURE
RESOURCE                            CREATE SEQUENCE
RESOURCE                            CREATE TABLE
RESOURCE                            CREATE TRIGGER
RESOURCE                            CREATE TYPE
8 rows selected.

SQL> select grantee,privilege from dba_sys_privs where grantee='CONNECT' order by privilege;

GRANTEE                              PRIVILEGE
------------------------------ ----------------------------------------
CONNECT                             CREATE SESSION


結果不言自明了,CREATE VIEW權限並不在這兩個角色中,因此須要額外grant CREATE VIEW to user;,才干讓這用戶能夠創建視圖。往往實驗是最好的老師,這次又證明了這點。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM