问题描述
你好,Asktom团队,
谢谢你所做的一切出色的工作。
您能帮助我们解决以下问题吗?
A.我们是否可以限制或阻止具有DBA角色的用户直接执行特定软件包?这个包是在另一个用户的模式中定义的,可以调用第三方库。由于第三方施加的安全要求,我们需要限制它的执行。
我们知道的一个选项是DB vault。然而,看起来这个选项会影响整个数据库。
B.是否可以在软件包上定义类似访问控制列表的内容,以确保只能由指定用户使用?
比方说,User1定义了很多包,其中有一个名为securepackage1的特殊包。User2,User3和User4使用 “执行任何过程” 特权执行User1的所有包。我们是否有任何机制可以专门定义可以执行SecurePackage1软件包的用户?
谢谢,
AB
谢谢你所做的一切出色的工作。
您能帮助我们解决以下问题吗?
A.我们是否可以限制或阻止具有DBA角色的用户直接执行特定软件包?这个包是在另一个用户的模式中定义的,可以调用第三方库。由于第三方施加的安全要求,我们需要限制它的执行。
我们知道的一个选项是DB vault。然而,看起来这个选项会影响整个数据库。
B.是否可以在软件包上定义类似访问控制列表的内容,以确保只能由指定用户使用?
比方说,User1定义了很多包,其中有一个名为securepackage1的特殊包。User2,User3和User4使用 “执行任何过程” 特权执行User1的所有包。我们是否有任何机制可以专门定义可以执行SecurePackage1软件包的用户?
谢谢,
AB
专家解答
首先要记住的是具有DBA权限的用户基本上可以在数据库中做任何事情。如果有足够的时间,总是有可能绕过你采取的任何措施。
因此,无论您采取什么步骤来限制对安全代码的访问,您还应该:
有关程序的审计执行。虽然这不会阻止人们执行有问题的程序,但你将能够找到是谁执行的。
避免向用户授予DBA!创建自定义角色,这些角色仅具有人们完成工作所需的特权。
也就是说,您可以采取一些步骤来使特权用户更难以执行安全代码。
12.1引入了访问器列表。这些定义了可以执行目标过程的程序单元的逗号分隔列表。然后只能通过列表中的一个执行该过程。
因此,您可以围绕安全包/过程创建包装器。这些可以检查在当前会话中启用了哪些角色。如果这包括DBA或您想要限制访问的任何其他内容,请引发错误以停止执行。
这是一个快速演示。我当前的用户 (Chris) 具有DBA角色。尽管拥有该过程并具有此角色,但可访问的by子句阻止我直接调用protect_me。
调用它的唯一方法是通过privileged_proc。这将检查session_roles以查看是否启用了DBA。如果是,则会引发异常。所以CHRIS & DBAU不能运行protect_me。只是U-只有创建会话并在privileged_proc上执行-可以调用它:
因此,无论您采取什么步骤来限制对安全代码的访问,您还应该:
有关程序的审计执行。虽然这不会阻止人们执行有问题的程序,但你将能够找到是谁执行的。
避免向用户授予DBA!创建自定义角色,这些角色仅具有人们完成工作所需的特权。
也就是说,您可以采取一些步骤来使特权用户更难以执行安全代码。
12.1引入了访问器列表。这些定义了可以执行目标过程的程序单元的逗号分隔列表。然后只能通过列表中的一个执行该过程。
因此,您可以围绕安全包/过程创建包装器。这些可以检查在当前会话中启用了哪些角色。如果这包括DBA或您想要限制访问的任何其他内容,请引发错误以停止执行。
这是一个快速演示。我当前的用户 (Chris) 具有DBA角色。尽管拥有该过程并具有此角色,但可访问的by子句阻止我直接调用protect_me。
调用它的唯一方法是通过privileged_proc。这将检查session_roles以查看是否启用了DBA。如果是,则会引发异常。所以CHRIS & DBAU不能运行protect_me。只是U-只有创建会话并在privileged_proc上执行-可以调用它:
grant dba to dbau identified by dbau; grant create session, create procedure to u identified by u; create or replace procedure protect_me accessible by ( privileged_proc ) authid current_user as begin dbms_output.put_line ( 'Executed' ); end protect_me; / create or replace procedure privileged_proc authid current_user as begin for r in ( select * from session_roles where role = 'DBA' ) loop raise_application_error ( -20001, 'Stop doing this DBA!' ); end loop; chris.protect_me (); end privileged_proc; / exec protect_me(); ORA-06550: line 1, column 7: PLS-00904: insufficient privilege to access object PROTECT_ME exec privileged_proc(); ORA-20001: Stop doing this DBA! grant execute on privileged_proc to u; conn u/u exec chris.protect_me (); ORA-06550: line 1, column 7: PLS-00201: identifier 'CHRIS.PROTECT_ME' must be declared exec chris.privileged_proc(); Executed conn dbau/dbau exec chris.protect_me (); ORA-06550: line 1, column 7: PLS-00904: insufficient privilege to access object PROTECT_ME exec chris.privileged_proc(); ORA-20001: Stop doing this DBA!复制
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
567次阅读
2025-04-15 17:24:06
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
497次阅读
2025-04-18 14:18:38
Oracle SQL 执行计划分析与优化指南
Digital Observer
467次阅读
2025-04-01 11:08:44
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
459次阅读
2025-04-08 09:12:48
墨天轮个人数说知识点合集
JiekeXu
456次阅读
2025-04-01 15:56:03
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
444次阅读
2025-04-22 00:20:37
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
436次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
419次阅读
2025-04-22 00:13:51
Oracle 19c RAC更换IP实战,运维必看!
szrsu
404次阅读
2025-04-08 23:57:08
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
377次阅读
2025-04-17 17:02:24