Người dùng trong cơ sở dữ liệu Oracle chỉ có các đặc quyền mà 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 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 điều đó
GRANT CREATE SESSION to ro_user
và sau đó bạn có thể tiếp tục cấp bất kỳ đặc 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 điều gì đó giống như
GRANT SELECT ON schema_name.table_name TO ro_user
Nói chung, bạn nên tạo một vai trò, tuy nhiên, và cấp đặc quyền đối tượng cho vai trò đó để sau đó bạn có thể cấp vai trò đó cho những người dùng khác nhau. Một cái gì đó giống như
Tạo vai trò
CREATE ROLE ro_role;
Cấp quyền truy cập SELECT vai trò trên mọi 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;