许多现代应用程序将数据拥有架构与用于访问该数据的应用程序服务或运行时帐户分开。此架构提供了职责分离和最小权限模型,并且可以帮助降低访问帐户受到威胁时的风险。但是你如何管理这个列表呢?随着应用程序模式随着时间的推移而变化,您如何保持该列表最新?
此前,开发人员有以下选择:
- 授予应用程序架构中每个表和视图的单独权限
- 授予任何权限:选择任何表、更新任何表等。
第一个选择可能不方便,因为您需要识别每个表或视图,然后单独授予每个运行时或服务用户权限。您可以开发一个脚本,但这是一个额外的步骤。此选项也是处理应用程序架构更改(例如添加新表或视图)的次优方法,因为您现在必须记住进行相应的权限授予。此外,可视化和验证此类详细列表可能会令人望而生畏。
授予 ANY 权限的第二种选择虽然方便,但从安全角度来看并不是最佳选择,因为您授予该用户从数据库中的每个表中进行选择的能力!如果此用户帐户受到威胁,您的整个数据库可能会受到威胁。
Oracle Database 23ai 来救援
为了解决这个问题,Oracle Database 23ai 引入了新的架构级授权。如果您将 SELECT ANY TABLE ON SCHEMA HR TO BOB 授予权限,则该用户可以查看 HR 模式中的所有表和视图 - 并且只能查看 HR 模式中的表和视图。如果将新表添加到架构中,他们立即可以访问该新表。不需要额外的管理,您将继续支持具有适当职责分离的最低权限安全模型。
用户可以在自己的模式上授予模式级权限,而无需任何特殊权限。要授予对其他人架构的架构级权限,您需要 GRANT ANY SCHEMA 或 GRANT ANY PRIVILEGE 系统权限。
要查看已授予哪些模式权限,请使用 DBA_SCHEMA_PRIVS 视图。您还可以使用 ROLE_SCHEMA_PRIVS、USER_SCHEMA_PRIVS 和 SESSION_SCHEMA_PRIVS 视图。
结论
今天就尝试一下吧! Oracle Database 23ai 免费版现已推出。如果您有疑问或建议,请加入 Database 23ai 免费论坛。
有关引导您完成该功能的脚本化教程,请参阅 GitHub 上的 SchemaPrivileges。
作者:Russ Lowenthal
May 2, 2024