Oracle“刪除使用者級聯”的 DB2 (LUW) 等效項
這個問題與為在 LUW (linux-unix-windows) 上執行數據庫的應用程序創建和初始化測試和開發數據庫有關
在 oracle 上,我們有
- 一個作業系統使用者(在 linux 上)呼叫
oracle
,- 管理員 oracle 使用者呼叫
sys
或system
- 一個固定的預定義 oracle 使用者,它是應用程序對象的所有者,我們稱之為
appowner
- oracle使用者是應用程序使用者,即對appowner擁有的對象具有有限的特權,我們稱之為
appuser
每當需要初始化數據庫時,即從頭開始,我們首先使用 oracle 使用者連接到 oracle
sys
,system
然後發出以下命令:DROP USER appowner CASCADE;
然後我們從頭開始重新創建使用者和它擁有的對象。
appuser
我們還對由創建的對象授予一些特權appowner
應用程序始終以身份登錄,
appuser
而不是appowner
除非對數據庫執行任何管理任務。現在我們正在將此應用程序移植到 db2,而這正是我們感到困惑的地方。
對於初學者,db2 創建這些 os 使用者,它們也是 db2 使用者:
dasusr1 db2inst1 db2fenc1
這三個使用者如何映射到
sys
/system
和?appowner``appuser
我相信
dasusr1
是sys
/的粗略等價物system
,db2inst1
是 的粗略等價物appowner
,並且db2fenc1
是appuser
(如果我錯了,請糾正我,我完全理解映射不准確)
在這種情況下,如果我必須刪除 擁有的所有對象
db2inst1
,我是否登錄dasusr1
並刪除使用者db2inst1
?oracle 使用者和 db2 使用者之間並沒有真正的一對一映射,因為
db2inst1
可以創建多個數據庫,而appuser
在oracle中映射到一個數據庫- 在 db2 數據庫中,可以有多個模式,而在 oracle 中,一個使用者映射到一個模式
所以有點混亂。如果在將應用程序從 oracle 移植到 db2 方面有經驗的人能夠闡明 db2 和 oracle 使用者之間的等價性,這將有助於找出 oracle drop user cascade 的 db2 等價物。
@Chris Aldrich 給出了很好的解釋。我將在這裡添加一些內容。
DB2 中沒有“數據庫使用者”的概念。所有身份驗證都發生在數據庫或實例之外,在作業系統中。此外,與 Oracle 不同,使用者 ID 和模式名稱之間沒有直接關係。在 DB2 中,模式只是對象的邏輯分組,它沒有任何特殊的安全特性。任何使用者都可以創建任何架構。例如,當我以mustaccio 身份登錄時,我執行語句
create table foo (id int...)
,這會創建一個模式 MUSTACCIO(如果它不存在)和其中的一個表。如您所見,架構名稱解析預設為我的授權 ID。但是,我不妨執行語句create table alok.foo (id char(3)...)
,在這種情況下,它會創建一個模式 ALOK 和其中的表。mustaccio將是這兩個表的所有者。關於使用者 ID 映射,我可能會說 DAS 所有者dasusr1和受保護的使用者db2fenc1不映射到 Oracle 數據庫中的任何內容。實例所有者db2inst1映射到oracle使用者 ID。創建數據庫的人(例如,可能是db2inst1或其他通過 SYSADM 組成員授權執行該操作的使用者)在該數據庫中獲得 DBADM 和 SECADM 權限,這有點類似於系統和/或sys(我是不太確定Oracle數據庫中兩者之間的區別是什麼)。如果您需要擁有數據庫對象的功能 ID,則創建appowner在作業系統中,授予它適當的權限,並在創建對象時連接到該使用者。類似地,您在作業系統中創建appuser ,授予它對象訪問權限,並讓您的應用程序以該使用者身份連接。
由於 DB2 中沒有數據庫使用者,所以不能刪除使用者。要刪除特定模式中的對象,您可以使用ADMIN_DROP_SCHEMA() 過程。