Если вы не хотите предоставлять дополнительные привилегии ни одному из пользователей, у вас не так много вариантов.
Вы можете создать процедуру, принадлежащую суперпользователю, скажем, учетную запись, которая имеет SELECT ANY TABLE, (но не SYS или SYSTEM), который учитывает и рассчитывает разницу.
create function get_diff
return pls_integer
authid definer
as
c1 pls_integer;
c2 pls_integer;
begin
select count(*)
into c1
from staff.stf_table;
select count(*)
into c2
from employee.emp_table;
return abs(c1-c2);
end get_diff;
/
Итак, решающим моментом здесь является AUTHID DEFINER.Это означает, что функция запускается с разрешениями пользователя, которому принадлежит функция;потому что у них есть необходимые разрешения для запроса обеих таблиц, которые пользователь может запускать функцию, и любой другой пользователь, которому они предоставляют EXECUTE ON GET_DIFF
.
, - это действительно минимальный уровень предоставления, с которым вы можете обойтись..
NB. Я не обращался к вопросу записи в файл, потому что на самом деле не думаю, что это суть вашего вопроса.Главное - это разрешения.
"Нет ли способа, чтобы процесс мог подключиться как пользователь 'staff', сохранить счет в файл. Затем подключиться как пользователь 'employee', сохранить счет в тот же файл и сравнить? "
Нет.Это не так, как работает модель безопасности.
Данные STAFF принадлежат STAFF, а данные EMPLOYEE принадлежат EMPLOYEE.По умолчанию STAFF не может видеть данные РАБОТНИКА и наоборот.Чтобы изменить эту ситуацию, у вас есть два варианта:
- Разрешить STAFF предоставлять SELECT на своей таблице для EMPLOYEE, а EMPLOYEE предоставлять SELECT на своей таблице для STAFF.
- Использовать учетную запись с привилегиямидля работы с таблицами обеих схем.
Очевидно, что при первом подходе могут возникнуть проблемы с защитой данных.Если вас это интересует, вам доступны некоторые уточнения:
- У каждой схемы есть собственное представление, которое просто выбирает количество своих записей и предоставляет привилегии для представлений.
- Если у вас есть Enterprise Edition 10gR2 или выше, вы можете использовать VPD на уровне столбцов: предоставление грантов на столе, поставить политику на место, чтобы скрыть все конфиденциальные данные. Узнать больше .