簡體   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