Oracle 使用者 物件許可權 系統許可權
--================================
--Oracle 使用者、物件許可權、系統許可權
--================================
一、使用者與模式
使用者:對資料庫的訪問,需要以適當使用者身份通過驗證,並具有相關許可權來完成一系列動作
SYS使用者,預設始終建立,且未被鎖定,擁有資料字典及其關聯的所有物件
SYSTEM使用者,預設始終建立,且未被鎖定,可以訪問資料庫內的所有物件
模式(schema):是某個使用者擁有所有物件的集合。具有建立物件許可權並建立了物件的使用者稱為擁有某個模式
注意:建立資料庫物件(檢視,表等)的任一使用者都擁有一個以該使用者名稱稱開頭的模式,且被視為模式使用者
二、建立及修改使用者
條件:需要具有建立使用者的許可權,如sys,system,sysdba,dba role等
語法:
CREATE USER user
IDENTIFIED {BY password | EXTERNALLY | GLOBALLY AS external name }
[DEFAULT TABLESPACE tablespace_name]
[TEMPORARY TABLESPACE tablespace_name]
[QUOTA {n {[K|M] | UNLIMITED } ON tablespace_name
QUOTA {n {[k|M] | UNLIMITED } ON tablespace_name ... ]
[PASSWORD EXPIRE]
[ACCOUNT { LOCK | UNLOCK }]
[PROFILE { profile_name | DEFAULT }]
eg:
CREATE USERrobinson IDENTIFIED BYtiger;
--省略了DEFAULT TABLESPACE和TEMPORARY TABLESPACE 時,則由database_properties中對應的引數確定
SQL> SELECT property_name,property_value FROM database_properties WHERE property_name LIKE 'DEFAULT%'
PROPERTY_NAMEPROPERTY_VALUE
------------------------------ --------------------------------------------------
DEFAULT_TEMP_TABLESPACETEMP
DEFAULT_PERMANENT_TABLESPACEUSERS
DEFAULT_TBS_TYPESMALLFILE
1.修改使用者
修改使用者的語法同建立使用者,僅僅講關鍵字create替換為alter,alter user可以修改除使用者名稱之外的任一屬性
ALTER USER robinson ACCOUNT LOCK;
2.修改密碼
DBA 可以建立使用者和修改密碼
使用者本人可以使用ALTER USER 語句修改密碼
SQL> ALTER robinsonIDENTIFIED BYnewpassword;
3.刪除使用者:
DROP USER username [CASCADE]
CASECADE 連同使用者建立的物件一併刪除,如果該使用者建立了物件,要加CASCADE刪除,否則刪除不掉
另外,不能刪除當前正在與ORACLE伺服器相連的使用者。
4.改變使用者在表空間上的配額:
ALTER USER usernameQUOTA 0 ON system;
ALTER USER scott QUOTA UNLIMITED ON USERS;
ALTER USER dog QUOTA 30M ON system;
5.檢視使用者表空間配額(dba_ts_quotas):
SQL> SELECT USERNAME,TABLESPACE_NAME,MAX_BYTES/1024/1024 "Max MB"
2FROM dba_ts_quotas WHERE USERNAME='SCOTT';
USERNAMETABLESPACE_NAMEMax MB
------------------------------ --------------------------
SCOTTSYSTEM30
6.檢視特定物件下使用者所擁有的物件
使用dba_objects檢視
SQL> SELECT owner,object_name, object_type FROM dba_objects WHERE owner= 'SCOTT';
三、ORACLE許可權:
系統許可權:允許使用者執行特定的資料庫動作,如建立表、建立索引、連線例項等
物件許可權:允許使用者操縱一些特定的物件,如讀取檢視,可更新某些列、執行儲存過程等
1.系統許可權
超過一百多種有效的許可權(SELECT * FROM SYSTEM_PRIVILEGE_MAP查)
資料庫管理員具有高階許可權以完成管理任務,例如:
–建立新使用者
–刪除使用者
–刪除表
–備份表
a.常用的系統許可權:
CREATE SESSION建立會話
CREATE SEQUENCE建立序列
CREATE SYNONYM建立同名物件
CREATE TABLE在使用者模式中建立表
CREATE ANY TABLE在任何模式中建立表
DROP TABLE在使用者模式中刪除表
DROP ANY TABLE在任何模式中刪除表
CREATE PROCEDURE建立儲存過程
EXECUTE ANY PROCEDURE執行任何模式的儲存過程
CREATE USER建立使用者
DROP USER刪除使用者
CREATE VIEW建立檢視
b.授予使用者系統許可權
GRANT privilege [, privilege...] TO user [, user| role, PUBLIC...]
[WITH ADMIN OPTION];
PUBLIC所有使用者
WITH ADMIN OPTION 使使用者同樣具有分配許可權的權利,可將此許可權授予別人
SQL> GRANT CREATE SESSION,CREATE TABLE,CREATE USER TO scott;
SQL> GRANT EXECUTE ANY PROCEDURE TO scott WITH ADMIN OPTION;
SQL> CONN scott;--scott具有WITH ADMIN OPTION,故可以將EXECUTE ANY PROCEDURE授予robinson
Enter password:
Connected.
SQL> GRANT EXECUTE ANY PROCEDURE TO robinson;
Grant succeeded.
SQL> GRANT EXECUTE ANY PROCEDURE TO PUBLIC; --將EXECUTE ANY PROCEDURE授予所有使用者
Grant succeeded.
SQL> CONN system/redhat;--使用system為robinson授予CREATE TABLE、CREATE SESSION許可權
Connected.
SQL> GRANT CREATE TABLE,CREATE SESSIONTO robinson;
Grant succeeded.
c.使用系統許可權
--使用robinson具有建立會話、建立表
SQL> CREATE TABLE tb1 AS SELECT * FROM USER_TABLES; --下面提示沒有許可權在users表空間建立物件
CREATE TABLE tb1 AS SELECT * FROM USER_TABLES
*
ERROR at line 1:
ORA-01950: no privileges on tablespace 'USERS'
SQL> CONN sys as sysdba;--使用sys帳戶登陸併為robinson在users表空間指定配額後可以建立表tb1
Enter password:
Connected.
SQL> ALTER USER robinson QUOTA 10M ON USERS;
User altered.
SQL> CONN robinson/lion;
Connected.
SQL> CREATE TABLE tb1 AS SELECT * FROM USER_TABLES;
Table created.
d.檢視系統許可權
dba_sys_privs--針對所有使用者被授予的系統許可權
user_sys_privs --針對當前登陸使用者被授予的系統許可權
SQL> SELECT grantee,privilege,admin_option FROM dba_sys_privs
2WHERE grantee IN ('SCOTT','ROBINSON')
3ORDER BY grantee;
GRANTEEPRIVILEGEADM
------------------------------ ---------------------------------------- ---
ROBINSONCREATE SESSIONNO
ROBINSONCREATE TABLENO
ROBINSONEXECUTE ANY PROCEDURENO
SCOTTCREATE PUBLIC SYNONYMNO
SCOTTCREATE SESSIONNO
SCOTT CREATE SYNONYMNO
SCOTTCREATE TABLENO
SCOTTCREATE USERNO
SCOTTCREATE VIEWNO
SCOTTEXECUTE ANY PROCEDUREYES
SCOTTUNLIMITED TABLESPACENO
e.回收系統許可權
REVOKE {privilege | role} FROM {user_name | role_name | PUBLIC}
--下面的示例中並沒有回收掉原來由