1. 程式人生 > >Oracle 使用者 物件許可權 系統許可權

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 TABLESPACETEMPORARY 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替換為alteralter 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;--使用systemrobinson授予CREATE TABLECREATE 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帳戶登陸併為robinsonusers表空間指定配額後可以建立表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}

--下面的示例中並沒有回收掉原來由