Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да напиша политика в Oracle SQL, която ограничава достъпа до не-собственици за таблица?

Не е нужно да правите абсолютно нищо по въпроса.

Таблиците (и данните, съхранявани в тях) са собственост на потребител A. Никой не може да ги види освен ако потребител A предоставя определени привилегии на други потребители, като потребител B.

Това може да стане чрез предоставяне на привилегия за избор, т.е.

grant select on my_table to user_B;

и потребител B след това ще извлече данни като

select * from user_A.my_table;

Потребител B няма да може да променя данни (тъй като не му е разрешено вмъкване/актуализиране/изтриване).

Освен това вие (като потребител A) можете да създадете изглед който избира само част от данните, напр.

create view v_my_table as 
  select * 
  from my_table
  where score > 4;

grant select on v_my_table to user_B;

Правейки това, потребител B ще види само редове, чийто резултат е по-голям от 4.

Ако има потребител C, той не може да види абсолютно нищо. Ако искате да видите някои данни, ще направите това, което вече сте направили с потребител B - да предоставите определени привилегии.

Има обаче опция да позволите на потребител B да „препраща“ привилегии на други потребители - бихте използвали with grant option , напр.

grant select on my_table to user_B with grant option;

Това би позволило на потребител B да предостави избор на други потребители, напр.

grant select on user_A.my_table to user_C;

И накрая (като говорим за този отговор), ако има много потребители, на които искате да предоставите такива привилегии, можете да създадете роли . След това ще предоставите привилегии на роля и ще предоставите роля на друг потребител(и). Тя ви позволява да променяте ролите в зависимост от вашите (и на други потребители) желания.

create role my_role;
grant select on my_table to my_role;

Например, за начало можете да предоставите select към my_role и след това предоставете my_role към потребители B, C и D.

grant my_role to user_B;
grant my_role to user_C;

По-късно можете да разрешите insert към my_role

grant insert on my_table to my_role;

и всички потребители с предоставена my_role автоматично ще може да вмъква редове в my_table на потребител A.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Задействайте алтернативи за две таблици, които трябва да се актуализират взаимно

  2. Oracle Query за намиране на редове, които не се повтарят

  3. Състезание между избор и актуализация

  4. Продължете MERGE след EXCEPTION

  5. ORA-00932:непоследователни типове данни:очаквано - получено -