1. 程式人生 > >oracle 使用者建立及授權4

oracle 使用者建立及授權4

oracle 使用者建立及授權

在建立使用者時,需要對使用者授權,可以直接授權,也可以間接授權;

許可權:

create session 允許使用者登入資料庫許可權

create table 允許使用者建立表許可權

unlimited tablespace 允許使用者在其他表空間隨意建表

角色:connect ,resource,dba (一組許可權集合)

CONNECT角色: --是授予終端使用者的典型權利,最基本的權力,能夠連線到ORACLE資料庫中,並在對其他使用者的表有訪問許可權時,做SELECT、UPDATE、INSERTT等操作。

   ALTER SESSION --修改會話
    CREATE CLUSTER --建立聚簇
    CREATE DATABASE LINK --建立資料庫連結
    CREATE SEQUENCE --建立序列
    CREATE SESSION --建立會話
    CREATE SYNONYM --建立同義詞
    CREATE VIEW --建立檢視
    RESOURCE角色: --是授予開發人員的,能在自己的方案中建立表、序列、檢視等。
    CREATE CLUSTER --建立聚簇
    CREATE PROCEDURE --建立過程
    CREATE SEQUENCE --建立序列
    CREATE TABLE --建表
    CREATE TRIGGER --建立觸發器
    CREATE TYPE --建立型別

DBA角色,是授予系統管理員的,擁有該角色的使用者就能成為系統管理員了,它擁有所有的系統許可權

建立表空間

建立資料表空間

create tablespace TEST_DATA
logging 
datafile 'D:\soft\oracle\base\oradata\orcl\test_data.dbf'
size 50m
autoextend on
next 50m maxsize 20480m ;

create tablespace TEST2_DATA  
logging  
datafile '/home/u01/app/oracle/oradata/ytzx/test2_data.dbf'  
size 10240M --50-100G  
autoextend on next 2000M   
maxsize unlimited  
extent management local autoallocate   
segment space management auto ;

建立臨時表空間

create temporary tablespace test1temp  
tempfile'/home/u01/app/oracle/oradata/ytzx/test1temp01.dbf'  
size10240m  
autoextendonnext1024m 
maxsize20480m 
extentmanagementlocal  ;

檢視當前使用者使用的表空間

select username,default_tablespace from user_users;

建立使用者

create user test1 identified by test1  
default tablespace test1  
temporary tablespace test1temp;

刪除使用者

drop user test1 cascade

管理使用者

create user zhangsan;//在管理員帳戶下,建立使用者zhangsan
alert user scott identified by tiger;//修改密碼

授予許可權

新建的使用者必須授予相關的許可權才能登陸,訪問,操作資料庫

grant create session to zhangsan;//授予zhangsan使用者建立session的許可權,即登陸許可權,允許使用者登入資料庫
grant unlimited tablespace to zhangsan;//授予zhangsan使用者使用表空間的許可權
grant create table to zhangsan;//授予建立表的許可權
grante drop table to zhangsan;//授予刪除表的許可權
grant insert table to zhangsan;//插入表的許可權
grant update table to zhangsan;//修改表的許可權
grant all to public;//這條比較重要,授予所有許可權(all)給所有使用者(public)

oralce對許可權管理比較嚴謹,普通使用者之間也是預設不能互相訪問的,需要互相授權

例如A使用者要訪問B使用者的USER表,需要將B使用者的訪問許可權授予A

grant select on tablename to zhangsan;//授予zhangsan使用者檢視指定表的許可權
grant drop on tablename to zhangsan;//授予刪除表的許可權
grant insert on tablename to zhangsan;//授予插入的許可權
grant update on tablename to zhangsan;//授予修改表的許可權
grant insert(id) on tablename to zhangsan;
grant update(id) on tablename to zhangsan;//授予對指定表特定欄位的插入和修改許可權,注意,只能是insert和update
grant alert all table to zhangsan;//授予zhangsan使用者alert任意表的許可權

案例分析:
測試環境新建了一個B使用者,將之前A使用者下的儲存過程匯入新使用者下,發現其中部分儲存過程編譯報錯;報錯內容為"表或檢視不存在";發現這些表都是C使用者下的,但是直接通過plsqldevelop以select * from C.tablename 的形式的是可以訪問的;經過研究,發現oracle對於在儲存過程中引用其他使用者下的表或者檢視物件有特別的限制,要求B使用者對這個表或者檢視物件具有直接的SELECT 許可權,而不是通過角色,如DBA間接獲取的許可權,否則就會報上述錯誤導致編譯不通過;
產生授權指令碼:

select 'grant select on C.'||t.table_name||' to B;' from user_tables;

撤銷許可權

REVOKE CONNECT, RESOURCE FROM 使用者名稱; 
REVOKE SELECT ON 表名 FROM 使用者名稱; 
REVOKE SELECT, INSERT, DELETE ON表名 FROM 使用者名稱1, 使用者名稱2; 

檢視許可權

select * from user_sys_privs;//檢視當前使用者所有許可權
select * from user_tab_privs;//檢視所用使用者對錶的許可權
select privilege from dba_sys_privs where grantee='TEST'  
union  
select privilege from dba_sys_privs where grantee in (select granted_role from dba_role_privs where grantee='TEST' );

角色

角色即許可權的集合,可以把一個角色授予給使用者

create role myrole;//建立角色
grant create session to myrole;//將建立session的許可權授予myrole
grant myrole to zhangsan;//授予zhangsan使用者myrole的角色
drop role myrole;刪除角色

建立同義詞

建立同義詞的目的是為了簡化對目標物件的訪問,特別是對於分散式資料庫查詢中,可以簡化對查詢語句的編寫,且同義詞不佔用實際儲存空間,如同檢視一樣,只在資料字典中儲存了同義詞的定義

Oracle中,同義詞可以分為如下兩類

1.公用同義詞:能被所有的資料庫使用者訪問的同義詞,毫無疑問只有具有DBA許可權的方案使用者才可以設定;

2、私有同義詞:只能由建立的使用者訪問的同義詞;所以該使用者應該具有建立同義詞的許可權,如果沒有許可權,則需要授權

grant create synonym to scott;      

revoke create synonym from scott;   撤銷許可權

Drop synonym syn_name  ; 刪除同義詞

同義詞語法:

CREATE [PUBLIC] SYNONYM synonym FOR object;

針對上述語法:有以下幾點需要說明:

1、一般來說,Oracle裡,中括號裡面的內容是可選內容,在這裡,如果加上PUBLIC表示公用同義詞,不加的話就是私有同義詞;

2、synonym 這裡表示同義詞的名字

3、object表示要建立同義詞的物件

案例:

A 使用者訪問B使用者的EMP 表

正常的話需要 A使用者登陸後通過 select * from B.EMP 訪問,如果建立同義詞

create synonym emp for B.emp  ;則可以直接訪問了,不需要加使用者名稱

建立DBLINK

兩臺資料庫伺服器(本地)和(遠端10.7.61.184),本地使用者test需要訪問到遠端伺服器下plfp的資料,這時就需要建立DBLink。

①先確定使用者是否有建立DBLink的許可權:

select * from user_sys_privs where privilege like upper('%DATABASE LINK%'); 

如果沒有,則需要使用 sysdba 角色給使用者賦權

grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to test;  

這裡有兩個需要注意的問題:

  1. dblink有三種許可權:

    CREATE DATABASE LINK(所建立的dblink只能是建立者能使用,別的使用者使用不了)
    CREATE PUBLIC DATABASE LINK(public表示所建立的dblink所有使用者都可以使用)
    DROP PUBLIC DATABASE LINK(刪除dblink)

  2. 最後的test是本地資料庫的使用者名稱。

以使用者test登入資料庫,建立DBLink

create public database link lsxdlink
 connect to plfp identified by plfp
 using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 10.7.64.184)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = lsxd)))';

說明
lsxdlink為你建立的dblink的名字;plfp為遠端資料庫使用者的使用者名稱;後邊是plfp對應的密碼;Host=後邊是伺服器的地址;SERVICE_NAME=後邊是遠端資料庫的名稱。
①使用DBLink

select * from [email protected]

查詢、刪除和插入資料和操作本地的資料庫是一樣的,只不過表名需要寫成表名@dblink的名字。

②刪除DBLink

drop  public database link  lsxdlink