如何將架構中所有表的所有權限授予 IBM DB2 中的使用者?
首先,我想將數據庫從 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
這利用查詢系統目錄來動態生成腳本來許可事物。這是我們為不想授予數據訪問權限的使用者授予權限的很多方式。