代码之家  ›  专栏  ›  技术社区  ›  ThanhHH

使用子音速时在运行时更改Oracle架构

  •  0
  • ThanhHH  · 技术社区  · 16 年前

    在我的项目中,我使用的是Oracle数据库和Dal的子Sonic。我有一个亚音速和甲骨文模式的问题,即:

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

    2 回复  |  直到 16 年前
        1
  •  0
  •   Gary Myers    16 年前

    首先,您的模式不应该是dev。dev是用户或角色。 您的模式名称应该与数据内容相关(如帐户或销售)

    其次,考虑您还是客户将决定模式名。假设你有一种叫燧石的产品。您可以决定模式名应该是Flintstone。但是,您的客户可能希望运行两个产品实例(例如一个用于本地销售,另一个用于国际销售),并使用相同的数据库。所以他们希望fs_local和fs_inter作为模式名。这是你产品的一个特点吗?

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

    通常,我会为应用程序推荐一些模式名称的配置参数,在连接到数据库之后,应用程序应该执行“alter session set current_schema='无论它是什么配置文件'”。应用程序数据库用户需要对应用程序模式中的对象具有适当的插入/更新/删除/选择/执行权限。如果应用程序不能这样做,您可以在数据库中有一个登录触发器。

        2
  •  0
  •   runxc1 Bret Ferrier    16 年前

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