too*_*oop 2 sql database oracle plsql count
我在用户名'staff'的架构'staff'下有'stf_table'表.
我在'employee'架构下有'emp_table'表,用户名为'employee'.
这两个都在相同的数据库SID /主机/端口下,但用户'staff'没有查询架构'employee'下的表,反之亦然(即用户'employee'没有privelege查询表下架构'员工').但是每个用户都可以在自己的架构下查询表.注意:我无法授予额外的权限,我不想将两个表都转储到本地架构中.
是否可以编写一个PL/SQL proc或包来执行以下操作?
select count(*) from stf_table;
select count(*) from emp_table;
Run Code Online (Sandbox Code Playgroud)
然后将两个计数输出到一个文件(即.txt或.dat不关心),如下所示:
stf_table count: 47830
emp_table count: 36462
difference: 11368
counts match: FALSE
Run Code Online (Sandbox Code Playgroud)
如果您不想为任一用户授予其他权限,则您没有很多选项.
您可以创建超级用户拥有的过程,例如具有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;
/
Run Code Online (Sandbox Code Playgroud)
所以关键是AUTHID DEFINER.这意味着该函数以拥有该函数的用户的权限运行; 因为他们具有查询用户可以运行该功能的两个表的必要权限,所以他们授予的任何其他用户也是如此EXECUTE ON GET_DIFF.
这真的是给予你可以逃脱的最低限度.
注意:我没有解决写入文件的问题,因为我并不认为这是你问题的主旨.主要是权限.
"因为用户'工作人员'将计数保存到文件中,所以无法连接proc.然后以用户'employee'连接将计数保存到同一个文件并进行比较?"
不,这不是安全模型的工作方式.
STAFF的数据归STAFF所有,EMPLOYEE的数据归EMPLOYEE所有.默认情况下,STAFF无法查看EMPLOYEE的数据,反之亦然.要改变这种情况,您有两种选择:
显然,第一种方法可能存在数据保护问题.如果这是您关注的问题,那么您可以进行一些改进:
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |