Db2

如何將架構中所有表的所有權限授予 IBM DB2 中的使用者?

  • October 18, 2017

首先,我想將數據庫從 IBM DB2 AIX 導出到 IBM DB2 視窗中。不幸的是,由於不同的作業系統問題,我無法使用 BACKUP 和 RESTORE 命令。所以我不得不求助於db2move命令。

我使用以下命令從遠端 IBM DB2 AIX 中的dbemp數據庫中導出了****myschema模式和所有表:

db2move dbemp export -sn myschema

當我執行該命令時,我以名為dbuser1的使用者身份登錄。

它在目前文件夾中生成一堆文件。我將文件抓取到安裝了 IBM DB2 LUW 的本地機器(Windows)中。

現在在我本地機器的 IBM DB2 中,我首先使用 IBM Data Studio刪除了現有模式myschema (我也有一個本地****dbemp數據庫)。

然後我使用以下命令導入文件:

db2move dbemp import

它成功地將模式和表導入本地dbemp數據庫。

當我執行上述操作時,我以使用者winuser1身份登錄。

我的本地機器(Windows)中也有一個名為dbuser1的本地使用者。在 IBM Data Studio 中,我創建了一個使用dbuser1使用者連接到本地dbemp的連接配置文件,我可以瀏覽myschema模式和表,但我無法瀏覽表的數據(我得到了權限錯誤)。使用者winuser1可以瀏覽表的數據,但出於開發目的,我必須使用使用者****dbuser1連接到數據庫。

所以我發現我可以像這樣向表上的使用者授予權限:

GRANT ALL ON myschema.table1 TO USER dbuser1

問題是我有 100 個表,我不想為每個表鍵入這些行。不幸的是,也沒有這樣的萬用字元解決方案:

GRANT ALL ON myschema.* TO USER dbuser1 -- this doesn't work

所以問題是如何將模式中所有表的所有權限授予使用者?還是有其他更好的解決方案?也許通過將所有權限從winuser1複製到dbuser1

如果您想訪問所有數據(即所有模式中的所有表),則需要授予數據訪問權限。

db2 grant dataaccess on database to user winuser1

如果您只希望 winuser1 僅訪問您所指架構中的 100 個表,那麼不幸的是,沒有簡單的方法,您需要在每個表上授予 SELECT 權限。話雖如此,它可以通過腳本來完成。

您可以執行以下操作

db2 -tnx "select distinct 'GRANT ALL ON TABLE '||
   '\"'||rtrim(tabschema)||'\".\"'||rtrim(tabname)||'\" TO USER winuser1;'
   from syscat.tables
   where tabschema = 'myschema' "  >> grants.sql

db2 -tvf grants.sql

這利用查詢系統目錄來動態生成腳本來許可事物。這是我們為不想授予數據訪問權限的使用者授予權限的很多方式。

這是DB2 權威的一個很好的頁面

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