gpt4 book ai didi

Oracle : check for read/write privileges, 自动化测试

转载 作者:行者123 更新时间:2023-12-05 08:34:53 25 4
gpt4 key购买 nike

我对 Oracle 和检查权限有疑问。

一些背景信息

我写了一些 php 脚本来“测试”我们环境中的各种东西。其中一项任务是检查用户是否对某个过程具有执行权限,以及该过程是否有效/已编译。

这里是查询

select ao.object_name, utp.grantee, ao.status, utp.privilege
from all_objects ao, user_tab_privs utp
where utp.owner = ao.owner and
ao.object_name = utp.table_name and
upper( ao.object_name ) = :object_name and
ao.object_type = 'PACKAGE' and
utp.privilege = 'EXECUTE' and
ao.status = 'VALID'

这很有效,为我们节省了处理特权的时间;我现在确实意识到我还可以仔细检查 all_tab_privs 以检查执行访问权限。

问题

现在我的问题是,如何对表格做类似的事情?我们遇到了一个问题,即某个用户在表上有 SELECT 权限,但没有 UPDATE/INSERT 权限。我如何单独检查这些特权中的每一个。我查看了 all_tab_privs,但没有发现它显示了我想要的内容。它有我可以执行的程序,但是当我检查是否有已知表时,它不存在。例如,我将运行以下命令

select * from all_tab_privs 
where table_name = 'KNOWN_TABLE' and
grantee = 'CURRENT_USER'
and privilege in ( 'SELECT', 'UPDATE', 'INSERT' );

但我 100% 知道我已经可以选择/插入/更新,而不是为表返回 3 行,它什么也不返回。

有什么想法吗?谢谢。

免责声明

我知道我可以尝试插入/更新数据然后删除它,但我不想这样做。我宁愿不留下任何痕迹,因为这些脚本会定期运行,应该是可重复的,并且不应该改变任何数据的状态,即使它只是表上的一个序列。

此外,如果您可以提供一个可能的查询“列表”,我可以用它来确定权限,那很好。例如,要确定我是否具有选择访问权限,请运行查询 1、2 和 3。如果其中一个返回数据,则您可以选择 privs 等等以进行插入/更新。

最佳答案

这对我来说看起来相当乐观,因为角色问题可能会变得非常复杂,特别是如果角色曾经受到密码保护,而且如果不实际尝试 DML,我永远不会真正 100% 信任该方法。

尝试这样的查询可能更简单:

select count(*)
from schema_name.table_name
where 1=0;

insert into schema_name.table_name
select *
from schema_name.table_name
where 1=0;

delete from schema_name.table_name
where 1=0;

update schema_name.table_name
set column_name = column_name
where 1=0;

我相信如果没有授予权限(没有方便的数据库来检查它),这样的查询将失败,并且它们永远不会修改任何数据。

顺便说一句,ANY 权限通常被认为是一个安全问题,因此如果任何用户被授予它们,您可能希望系统失败。

关于Oracle : check for read/write privileges, 自动化测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com