2011-09-21 23 views

Odpowiedz

40

Użytkownik w bazie danych Oracle ma tylko przyznane uprawnienia. Możesz więc utworzyć użytkownika tylko do odczytu, po prostu nie przyznając żadnych innych uprawnień.

Kiedy utworzyć użytkownika

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

użytkownik nawet nie ma uprawnień do logowania się do bazy danych. Możesz przyznać, że możesz uzyskać to uprawnienie do odczytu, a następnie możesz uzyskać przyznane przywileje odczytu. Na przykład, jeśli chcesz RO_USER móc kwerendy SCHEMA_NAME.TABLE_NAME, byś zrobił coś podobnego

GRANT SELECT ON schema_name.table_name TO ro_user 

Generalnie jesteś lepiej tworząc pewną rolę, jednak i przyznawania przywilejów obiektowych do roli, tak aby może następnie przyznać rolę różnym użytkownikom. Coś jak

Tworzenie roli

CREATE ROLE ro_role; 

Grant roli SELECT dostęp na każdym stole w danym schemacie

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; 

A potem przyznać rolę użytkownikowi

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

To jest n w domenie domyślnej jest to możliwe ze względu na wiele publicznych wykonań, które każdy użytkownik uzyskuje automatycznie za pośrednictwem publicznego.

1

Wykonaj następującą procedurę, na przykład jako system użytkownika.

Ustaw p_owner na właściciela schematu i p_readonly na nazwę użytkownika 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

można utworzyć użytkownika i przywilej grant

utworzyć użytkownika READ_ONLY zidentyfikowany przez READ_ONLY; grant create session, wybierz dowolną tabelę do read_only;

Powiązane problemy