使用SubSonic时,在运行时更改Oracle Schema

时间:2009-12-03 04:59:12

标签: oracle subsonic schema

在我的项目中,我正在使用Oracle数据库和SubSonic进行DAL。我有SubSonic和Oracle Schema的问题,即:

开发时,我在Oracle数据库中使用了模式DEV,并使用SubSonic生成DAL。 在发布给客户之后,他在Oracle数据库中使用了新的模式TEST并更改了app.config中的连接字符串以连接到Oracle。将出现错误,即“表或视图不存在”。我发现这个错误,并看到表的架构仍然是DEV。 我不希望在更改架构之后和发布给客户时重新生成DAL。请帮帮我。

2 个答案:

答案 0 :(得分:0)

首先,您的架构不应该是DEV。 DEV是用户或角色。 您的模式名称应与数据内容相关(例如ACCOUNTS或SALES)

其次,考虑您或客户是否要决定架构名称。假设您有一款名为FLINTSTONE的产品。您可以确定架构名称应为FLINTSTONE。但是,您的客户可能希望运行两个产品实例(例如,一个用于本地销售,另一个用于国际)并使用相同的数据库。所以他们想要FS_LOCAL和FS_INTER作为模式名称。该选项是否是您产品的一项功能?

接下来,确定您的应用程序是否应作为架构所有者进行连接。不这样做有很好的安全性原因。例如,模式所有者具有删除表的权限,这通常是应用程序不执行的操作,因此,根据最小权限原则,您的应用程序应该没有权限这样做。

通常我会为模式名称的应用程序推荐一些配置参数,并且在连接到数据库之后,应用程序应该执行“ALTER SESSION SET CURRENT_SCHEMA ='无论配置文件是什么'”。应用程序数据库用户需要对应用程序模式中的对象进行适当的插入/更新/删除/选择/执行权限。如果应用程序无法执行此操作,则可以在数据库中使用LOGON触发器。

答案 1 :(得分:0)

Gary在你自己的机器上没有使用DEV作为架构是正确的。在使用Oracle时,我们通常将架构设置为客户端将其架构命名的方式。但是,这并不能解决您的问题。您需要做的是在Oracle中创建一个全局别名,将DEV表示为CLIENTSCHEMA。您仍应在计算机上重命名架构,但这样可以使您的架构与客户端不同。