创建有或没有模式的用户?

时间:2011-07-05 15:32:19

标签: database oracle database-design relational-database

假设我想为简单的书店应用程序创建简单的数据库。我想我应该至少有两个用户:admin,它有权创建,修改和删除对象和用户,只需选择和插入权限。

我在这里有点困惑。我应该使用正常架构还是使用空架构创建用户帐户?用户是否有权从包含表的管理模式中进行选择和查询,或者它是应包含这些表的用户模式?

1 个答案:

答案 0 :(得分:4)

有很多不同的方法可以解决这类问题。所以很大程度上取决于您的应用程序架构。

您通常会创建一个拥有数据库对象的数据库帐户 - 表,包,视图等。让我们将此帐户称为BOOKSTORE_OWNER。此帐户通常会被锁定,因此在定期构建期间,任何人都无法以BOOKSTORE_OWNER其他方式登录。

然而,除了这个起点之外,还有许多合理的方法来处理身份验证和授权。如果您想让数据库同时处理这两个,您将创建两个角色 - BOOKSTORE_USERBOOKSTORE_ADMIN。这些角色将被赋予BOOKSTORE_OWNER拥有的对象的适当权限。然后,您将为可以使用该应用程序的每个人创建一个数据库用户,并为每个新用户授予适当的角色。因此,如果您是管理员且我是用户,则将创建数据库帐户dygi并授予BOOKSTORE_ADMIN角色,同时创建数据库帐户Justin并授予{ {1}}角色。

当人们构建客户端 - 服务器应用程序时,这种方法非常有效。另一方面,如果您使用的是三层应用程序,则希望中间层连接池使用相同的凭据连接到数据库,而不是让每个用户都拥有自己的数据库连接。实现此目的的最简单方法是创建单个BOOKSTORE_USER数据库帐户,授予该帐户BOOKSTORE_APPBOOKSTORE_ADMIN角色的所有权限,然后让应用程序实现逻辑来计算哪个前端用户具有哪些权限。这通常需要BOOKSTORE_USER架构中的USERPRIVILEGEUSER_PRIVILEGE表。这种方法可以很好地工作。不过,缺点是每个应用程序都必须构建自己的逻辑来管理权限,这些权限会随着时间的推移而变得非常复杂。它还可能使报告用户拥有的权限或确保用户离开组织或转移到新角色时用户的权限保持最新有些困难。

Oracle特别通过允许proxy authentication解决了许多这些挑战。这使您可以混合使用客户端 - 服务器方法的好处,其中每个用户都拥有自己的数据库帐户,该帐户利用Oracle现有的权限管理基础结构以及使用共享数据库帐户的连接池优势。这种方法非常有效,但只适用于Oracle,然后只适用于某些协议(OCI和JDBC),所以它并不是非常受欢迎。

当然,除了这些基础知识之外,您还可以进入相当复杂的程度。您可能希望enterprise users Oracle不维护密码,而是允许用户对外部LDAP目录进行身份验证。您可能希望使用LDAP角色管理权限,而不是使用特定于应用程序的表中的行。您可能希望与各种中间层单点登录(SSO)解决方案集成。