2011-09-21 29 views

Trả lời

40

Một người sử dụng trong một cơ sở dữ liệu Oracle chỉ có những đặc quyền bạn cấp. Vì vậy, bạn có thể tạo người dùng chỉ đọc bằng cách không cấp bất kỳ đặc quyền nào khác.

Khi bạn tạo một người dùng

CREATE USER ro_user 
IDENTIFIED BY ro_user 
DEFAULT TABLESPACE users 
TEMPORARY TABLESPACE temp; 

người dùng thậm chí không có quyền đăng nhập vào cơ sở dữ liệu. Bạn có thể cấp cho rằng

GRANT CREATE SESSION to ro_user 

và sau đó bạn có thể cấp bất kỳ quyền đọc nào bạn muốn. Ví dụ, nếu bạn muốn RO_USER để có thể truy vấn SCHEMA_NAME.TABLE_NAME, bạn sẽ làm cái gì đó như

GRANT SELECT ON schema_name.table_name TO ro_user 

Nói chung, bạn nên tạo ra một vai trò, tuy nhiên, và cấp ưu đãi đối tượng với vai diễn để bạn sau đó có thể cấp vai trò cho những người dùng khác nhau. Một cái gì đó như

Tạo vai trò

CREATE ROLE ro_role; 

Grant vai trò CHỌN truy cập trên tất cả các bảng trong một lược đồ cụ thể

BEGIN 
    FOR x IN (SELECT * FROM dba_tables WHERE owner='SCHEMA_NAME') 
    LOOP 
    EXECUTE IMMEDIATE 'GRANT SELECT ON schema_name.' || x.table_name || 
            ' TO ro_role'; 
    END LOOP; 
END; 

Và sau đó cấp vai trò cho người dùng

GRANT ro_role TO ro_user; 
8
create user ro_role identified by ro_role; 
grant create session, select any table, select any dictionary to ro_role; 
-1

Đó là n ot hoàn toàn có thể trong db mặc định do nhiều thực thi công khai mà mỗi người dùng sẽ tự động nhận được thông qua công khai.

1

Thực hiện các thủ tục sau đây ví dụ như hệ thống người dùng.

Set p_owner cho chủ sở hữu schema và p_readonly đến tên của người sử dụng readonly.

create or replace 
procedure createReadOnlyUser(p_owner in varchar2, p_readonly in varchar2) 
AUTHID CURRENT_USER is 
BEGIN 
    execute immediate 'create user '||p_readonly||' identified by '||p_readonly; 
    execute immediate 'grant create session to '||p_readonly; 
    execute immediate 'grant select any dictionary to '||p_readonly; 
    execute immediate 'grant create synonym to '||p_readonly; 

    FOR R IN (SELECT owner, object_name from all_objects where object_type in('TABLE', 'VIEW') and owner=p_owner) LOOP 
     execute immediate 'grant select on '||p_owner||'.'||R.object_name||' to '||p_readonly; 
    END LOOP; 
    FOR R IN (SELECT owner, object_name from all_objects where object_type in('FUNCTION', 'PROCEDURE') and owner=p_owner) LOOP 
     execute immediate 'grant execute on '||p_owner||'.'||R.object_name||' to '||p_readonly; 
    END LOOP; 
    FOR R IN (SELECT owner, object_name FROM all_objects WHERE object_type in('TABLE', 'VIEW') and owner=p_owner) LOOP 
     EXECUTE IMMEDIATE 'create synonym '||p_readonly||'.'||R.object_name||' for '||R.owner||'."'||R.object_name||'"'; 
    END LOOP; 
    FOR R IN (SELECT owner, object_name from all_objects where object_type in('FUNCTION', 'PROCEDURE') and owner=p_owner) LOOP 
     execute immediate 'create synonym '||p_readonly||'.'||R.object_name||' for '||R.owner||'."'||R.object_name||'"'; 
    END LOOP; 
END; 
0

bạn có thể tạo người dùng và đặc quyền cấp

tạo người dùng READ_ONLY xác định bởi READ_ONLY; cấp phiên tạo, chọn bất kỳ bảng nào để đọc_chỉ;

Các vấn đề liên quan