oracle - 是否应该为每个创建的应用程序创建/使用新用户?

标签 oracle oracle10g

关闭。这个问题是opinion-based .它目前不接受答案。












想改善这个问题吗?更新问题,以便可以通过 editing this post 用事实和引文回答问题.

7年前关闭。




Improve this question




我有一个“最佳实践”问题。我不是数据库管理员,所以我对此没有深入的了解,但是我们的管理员正在插入我们构建的每个应用程序都需要创建一个新的数据库用户(或者每个“喜欢的用户”)的过程“应用程序),以便他可以识别哪个用户可能正在消耗资源。我理解这个决定背后的理论,但我想知道这是否是一种标准做法。在我看来,这将导致管理噩梦。例如,我们说有 50 多个应用程序在内部运行,因此如果每个应用程序绑定(bind)不同的用户,不仅难以管理,而且我会看到其中很多应用程序具有重叠的权限。确定要使用哪个用户或是否需要为每个新应用创建一个新用户成为一件苦差事。

对此有何想法?

谢谢。

最佳答案

在某种程度上,这取决于您所说的“应用程序”是什么意思,因为这是一个非常有弹性的术语。这还取决于您是在谈论创建新用户,然后将拥有特定应用程序的所有表,还是在谈论创建将用于登录数据库但这些用户将有权访问的新用户存储在单独的(并且可能较小的)用户模式集中的对象。

如果 50 多个应用程序意味着您有 50 多个自包含表集,这些表由 50 个独立的独立代码块访问,那么为每个应用程序创建单独的用户和单独的架构是非常合理的。它可以更轻松地跟踪哪些应用程序使用了最多的磁盘空间,哪些应用程序造成了性能问题等。它还使得锁定每个帐户的权限相对容易,因为每个帐户只需要访问一个模式中的数据并且任何系统级权限授予都将特定于特定应用程序。

另一方面,如果您有 50 多个应用程序访问同一个数据库,那么这些应用程序实际上更像是一个更大的应用程序的组件,最终需要共享对各种对象的访问权限。例如,如果您有一个应用程序让 HR 输入有关新员工、解雇、辞职等的数据,另一个应用程序让经理输入员工评论,以及第三个应用程序让 HR 管理组织结构图,那么很可能所有这三个应用程序都需要访问相同的基本表集,可能会有一些异常(exception)。如果一个用户拥有员工表,而另一个用户拥有存储组织层次结构的表,而第三个用户拥有存储员工评论的表,那将会非常烦人。构建这种系统在技术上是可行的,但管理同义词、特权授予和构建过程会很快变得笨拙,此外,当不同的应用程序将基本相同的数据放入不同的应用程序时,更有可能引入数据完整性问题。表,因为他们不知道其他一些应用程序已经有该实体的表。

此外,您必须考虑诸如应用程序的部署方式之类的事情。如果您有 50 个小型 Java 应用程序,例如,连接到单个 Oracle 数据库的 2 个应用程序服务器,那么至少可以说拥有 50 个独立的 Oracle 用户将使连接池具有挑战性。即使每个连接池只有 5 个数据库连接,您仍然在谈论 50*5*2 = 500 个数据库连接,因为随着您添加应用服务器或应用程序以及随着用户负载的增加,应用服务器启动并创建了更多连接。虽然支持数百或数千个数据库连接当然是可能的,但这种方法也会产生各种管理难题。

根据管理员的具体目标,也可能有更好的方法(替代或补充单独的数据库帐户)。例如,Oracle 提供了 DBMS_APPLICATION_INFO 应用程序可以轻松使用该包添加检测以向 DBA 显示数据库 session 当前正在执行的操作。与简单地拥有单独的数据库帐户相比,这可以为 DBA 提供更细粒度的信息。例如,如果您有一个三层应用程序,很容易调用 SET_CLIENT_INFO当它从连接池中拉出一个连接以传递实际用户名和 SET_MODULE 时的过程定义当前应用程序,甚至用户当前所在应用程序的哪个部分。然后将这些信息放置在 DBA 已经查询的各种 View 中,使 DBA 可以轻松深入了解正在使用的 session 一堆资源,可以看到人类用户是“JustinCave”,他目前在“InventoryManagement”应用程序的“QuarterlyReporting”模块中查询。即使您有可以查阅的应用程序日志来获取所有这些信息,将其直接提供给 DBA 也可以使故障排除更加有效,并有助于使开发组和支持组之间的通信更加有效。 DBA 可以告诉应用程序开发人员,例如,特定应用程序的特定模块似乎正在产生性能问题,或者询问为什么有人在月中出现在 QuarterlyReporting 模块中,而不是简单地说“InventoryManagement 应用程序运行缓慢"或要求其他人查看应用程序日志以找出特定时间点发生的情况。

关于oracle - 是否应该为每个创建的应用程序创建/使用新用户?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8315861/

相关文章:

oracle - 如何在 Oracle 中创建不是 "owned by sys"的表?

sql - 行到列

sql - 如何更改具有 FOREIGN KEY 约束的列的大小?

Oracle 19c Open_cursor 超出问题

sql - 什么是 rowID & rowNum (ROWID vs ROWNUM)

oracle10g - 将数据插入到 Oracle 中的 CLOB 类型

oracle - Oracle user_constraints 表constraint_type 列中的字母代码代表什么?

oracle - 需要获取最新日期的数据

oracle - 更新/删除不存在的行时出现 PL/SQL 异常

java - 我的 SQL 语句有什么问题?无法插入 NULL