【问题标题】:Change Oracle Schema at runtime when using SubSonic使用 SubSonic 时在运行时更改 Oracle 架构
【发布时间】:2010-12-22 16:55:43
【问题描述】:

在我的项目中,我将 Oracle 数据库和 SubSonic 用于 DAL。我对 SubSonic 和 Oracle Schema 有疑问,即:

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

【问题讨论】:

    标签: oracle subsonic schema


    【解决方案1】:

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

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

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

    通常我会为应用程序推荐一些配置参数作为模式名称,并且在连接到数据库后,应用程序应该执行“ALTER SESSION SET CURRENT_SCHEMA = 'whatever is the config file'”。应用程序数据库用户需要对应用程序模式中的对象具有适当的插入/更新/删除/选择/执行权限。如果应用程序不能这样做,您可以在数据库中使用 LOGON 触发器。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 1970-01-01
        • 2017-05-02
        • 2018-04-05
        • 2023-03-11
        相关资源
        最近更新 更多