繁体   English   中英

使用SubSonic时在运行时更改Oracle模式

[英]Change Oracle Schema at runtime when using SubSonic

在我的项目,我使用的Oracle数据库和亚音速的DAL。 我有亚音速和Oracle模式的一个问题,那就是:

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

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

其次,考虑您还是由客户决定方案名称。 假设你有一个叫打火石的产品。 您可能决定架构名称应为FLINTSTONE。 但是,您的客户可能想要运行您的产品的两个实例(例如,一个用于本地销售,另一个用于国际销售)并使用相同的数据库。 因此,他们希望将FS_LOCAL和FS_INTER作为架构名称。 那是您产品的功能吗?

接下来,确定您的应用程序是否应以架构所有者的身份进行连接。 有充分的安全理由不这样做。 例如,架构所有者具有删除表的权限,通常这是应用程序不执行的操作,因此,按照最小特权的原则,应用程序不应该执行此操作。

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

Gary在您自己的计算机上不使用DEV作为架构是正确的。 在使用Oracle时,我们通常将架构设置为客户端将为其命名的架构。 但是,这不能解决您的问题。 您需要做的是在Oracle中创建一个全局别名,该别名将DEV映射到CLIENTSCHEMA。 您仍应在计算机上重命名架构,但这将使架构不同于客户端。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM