Oracle

Oracle“刪除使用者級聯”的 DB2 (LUW) 等效項

  • July 23, 2014

這個問題與為在 LUW (linux-unix-windows) 上執行數據庫的應用程序創建和初始化測試和開發數據庫有關

在 oracle 上,我們有

  • 一個作業系統使用者(在 linux 上)呼叫oracle
  • 管理員 oracle 使用者呼叫 syssystem
  • 一個固定的預定義 oracle 使用者,它是應用程序對象的所有者,我們稱之為appowner
  • oracle使用者是應用程序使用者,即對appowner擁有的對象具有有限的特權,我們稱之為 appuser

每當需要初始化數據庫時,即從頭開始,我們首先使用 oracle 使用者連接到 oracle syssystem然後發出以下命令:

DROP USER appowner CASCADE;

然後我們從頭開始重新創建使用者和它擁有的對象。appuser我們還對由創建的對象授予一些特權appowner

應用程序始終以身份登錄,appuser而不是appowner除非對數據庫執行任何管理任務。

現在我們正在將此應用程序移植到 db2,而這正是我們感到困惑的地方。

對於初學者,db2 創建這些 os 使用者,它們也是 db2 使用者:

dasusr1
db2inst1
db2fenc1

這三個使用者如何映射到sys/system和?appowner``appuser

我相信dasusr1sys/的粗略等價物systemdb2inst1是 的粗略等價物appowner,並且 db2fenc1appuser

(如果我錯了,請糾正我,我完全理解映射不准確)

在這種情況下,如果我必須刪除 擁有的所有對象db2inst1,我是否登錄dasusr1並刪除使用者db2inst1

oracle 使用者和 db2 使用者之間並沒有真正的一對一映射,因為

  • db2inst1可以創建多個數據庫,而appuser在oracle中映射到一個數據庫
  • 在 db2 數據庫中,可以有多個模式,而在 oracle 中,一個使用者映射到一個模式

所以有點混亂。如果在將應用程序從 oracle 移植到 db2 方面有經驗的人能夠闡明 db2 和 oracle 使用者之間的等價性,這將有助於找出 oracle drop user cascade 的 db2 等價物。

@Chris Aldrich 給出了很好的解釋。我將在這裡添加一些內容。

  1. DB2 中沒有“數據庫使用者”的概念。所有身份驗證都發生在數據庫或實例之外,在作業系統中。此外,與 Oracle 不同,使用者 ID 和模式名稱之間沒有直接關係。在 DB2 中,模式只是對象的邏輯分組,它沒有任何特殊的安全特性。任何使用者都可以創建任何架構。例如,當我以mustaccio 身份登錄時,我執行語句create table foo (id int...),這會創建一個模式 MUSTACCIO(如果它不存在)和其中的一個表。如您所見,架構名稱解析預設為我的授權 ID。但是,我不妨執行語句create table alok.foo (id char(3)...),在這種情況下,它會創建一個模式 ALOK 和其中的表。mustaccio將是這兩個表的所有者。

  2. 關於使用者 ID 映射,我可能會說 DAS 所有者dasusr1和受保護的使用者db2fenc1不映射到 Oracle 數據庫中的任何內容。實例所有者db2inst1映射到oracle使用者 ID。創建數據庫的人(例如,可能是db2inst1或其他通過 SYSADM 組成員授權執行該操作的使用者)在該數據庫中獲得 DBADM 和 SECADM 權限,這有點類似於系統和/或sys(我是不太確定Oracle數據庫中兩者之間的區別是什麼)。如果您需要擁有數據庫對象的功能 ID,則創建appowner在作業系統中,授予它適當的權限,並在創建對象時連接到該使用者。類似地,您在作業系統中創建appuser ,授予它對象訪問權限,並讓您的應用程序以該使用者身份連接。

  3. 由於 DB2 中沒有數據庫使用者,所以不能刪除使用者。要刪除特定模式中的對象,您可以使用ADMIN_DROP_SCHEMA() 過程

引用自:https://dba.stackexchange.com/questions/49171