Security

DB2 9.7 LUW - 當我是 DBADM、SECADM 時如何設置 SESSION_USER?

  • August 13, 2014

根據我之前提出的問題,我正在嘗試按照 mustaccio 的回答推薦的解決方案,據此我有另一個 ID 來創建我的 DDL 對象。

我一直在嘗試遵循名為“DB2 安全性,第 8 部分:十二個 DB2 安全性最佳實踐”的 IBM 開發人員工作文章來嘗試這樣做。我注意到這篇文章當時似乎是為 DB2 8.2 編寫的。我目前正在為 LUW 開發 DB2 9.7 修訂包 4 ESE。具體來說,我在 AIX 上。我目前正在測試如何在我的本地系統上執行此操作,即 Windowx XP SP3 並使用 DB2 9.7 fix pack 4 Express-C for LUW。

在這種情況下,我有一個名為 db2admin 的本地使用者帳戶(即實例所有者)(在我們的 AIX 系統上不是這樣)。此標識屬於 DB2ADMNS 組。由於它與我的 Windows 帳戶不同,我確保首先附加到實例,然後創建我的數據庫以確保在我的數據庫上授予 db2admin DBADM, SECADM, DATAACCESS, ACCESSCTRL

db2 attach to DB2 user db2admin using ********
db2 create database SECTEST automatic storage yes on 'C:\' dbpath on 'C:\'
 using codeset UTF-8 territory US collate using system

之後,我以 db2admin 身份連接到系統

db2 connect to sectest user db2admin using ********

然後為了測試一下,我確保我授予CONNECTSECADM我的 Windows 帳戶

db2 grant connect,secadm on database to user myid

然後我希望設置我的虛假 ID 以在其下創建對象。我有意將此 ID 創建為九個字元,以幫助防止從命令行連接到 DB2,但仍然允許通過SET SESSION_USER. 為了簡單起見,我將我的 ID 命名為 bobabob97。

所以我做了以下事情:

db2 grant CREATETAB,IMPLICIT_SCHEMA,BINDADD,CREATE_NOT_FENCED_ROUTINE,
 CREATE_EXTERNAL_ROUTINE on database to user bobabob97
db2 grant use of tablespace userspace1 to user bobabob97

在這一點上,我認為我已經正確設置了所有內容。我沒有明確授予數據庫bobabob97 權限CONNECT,因為我不希望任何人能夠使用此 ID 連接到數據庫。

所以現在我嘗試切換到該 ID 來創建測試,創建我的對象並在通用 ID 下擁有它們。

db2 set session_user=bobabob97

但後來我收到以下錯誤:

DB21034E 該命令被作為 SQL 語句處理,因為它不是有效的命令行處理器命令。在 SQL 處理期間它返回: SQL0552N “DB2ADMIN” 沒有執行操作 “SET SESSION AUTHORIZATION” 的特權。SQLSTATE=28000

所以,現在我很困惑。我目前以 (db2admin) 身份連接到數據庫的 ID 在數據庫上具有DBADMSECADMDATAACCESSACCESSCTRL(當然它隱含地包含CONNECTCREATETABBINDADDQUIESCE_CONNECTIMPLICIT_SCHEMALOADCREATE_NOT_FENCED_ROUTINECREATE_EXTERNAL_ROUTINE)。我本質上是數據庫上的“神”。為什麼我不能切換到這個ID?

我試過玩GRANT SETSESSIONUSER,但我知道SECADM不能授予自己。我在這裡做什麼?

好的,我想我實際上想出瞭如何處理這個問題。我需要授予我的DBADM,SECADM通過組而不是特定 ID 轉移到任何 ID 的能力。通過這種方式,我繞過了SECADM限制。

db2 grant setsessionuser on public to group DB2ADMNS

由於我的 ID db2admin 在這個組中,它現在可以切換到任何 ID(公共部分)。如果我只想能夠切換到該 ID,我可以使用:

db2 grant setsessionuser on user bobabob97 to group DB2ADMNS

所以現在我可以表演了

db2 set session_user=bobabob97

它有效。

要切換回來,我只需要執行

db2 set session_user=system_user

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