怎樣在加密Amazon Redshift集群時遷移元數據
一位客戶來向我們求助,讓我們幫助其來擴展和修改它們的 Amazon Redshift集群。在響應它們請求的過程中,我們利用了 AWSLabs GitHub倉庫中可用的若干種工具。下面就解釋了你可以如何像我們那樣使用其中的一些工具(這并不是想詳細地描述那個文庫的內容)。
那位客戶正在收購另一家比它自身規模稍小的生產企業。兩家企業都有一個BI基礎設施,它們相信,將各自的平臺進行聯合將會降低成本,簡化操作。它們想將被收購組織的倉庫搬到現有的Amazon Redshift集群中,但是還有一個新的要求。由于被收購企業一些項目的性質,它們有一項加密數據的合同義務。
Amazon Redshift支持靜態數據加密,數據庫中數據的加密,以及關聯快照的加密。要啟動加密功能,在創建數據庫時必須選擇加密。要想在數據庫創建后加密數據庫,必須建立一個新的數據庫,將內容從未加密集群搬移到新集群,在新集群中對內容進行加密。

將你的應用的數據表內容搬移是很簡單的,因為Amazon Redshift提供了實現這種目標的一個UNLOAD特性。
要想確定待卸載的數據表,考慮運行如下所示的一個查詢命令:
SELECT tablename FROM pg_tables WHERE schemaname = ‘public’;
注意,模式名稱需要被擴展來反映你在集群的何處創建了對象。在源集群中運行UNLOAD,在新集群中進行拷貝就可以遷移應用數據了。相當簡單!
UNLOAD (‘SELECT * FROM sample_table’) TO ‘s3://mybucket/sample/sample_Table_’ credentials ‘aws_access_key_id=;aws_secret_access_key=’ manifest;
該命令將一個SELECT語句的結果拆分成一組文件,每個節點一個或多個文件,簡化了數據的平行重載過程。它也創建了一個清單文件,可確保COPY命令向加密集群中加載了所有的必須文件,而且只是必須的文件。在COPY命令中使用清單文件是一種推薦的做法。
你仍然可以使用Amazon Redshift Unload/Copy utility(Amazon Redshift卸載/復制工具)將這一過程繼續簡化。這一工具將數據從源集群中導出到S3中的一個位置,使用Amazon KMS服務對數據進行加密。它也可以將數據導入到另一Amazon Redshift集群中,并清除S3中的數據。
對很多應用來講,Amazon Redshift包含的不僅僅是應用數據。Amazon Redshift支持創建數據庫用戶,用戶組,和向用戶和用戶組分配特權。準確地重新創建這些數據可能是易出錯的,除非所有數據都使用腳本進行創建,且每個腳本都是受源代碼控制的。幸運的是,創建腳本,直接從源集群遷移這些數據,在加密集群中運行這些腳本來復制你所需的數據,是非常簡單的。
在實際創建腳本前,我們開始的最佳位置就是AWSLabs GitHub倉庫。在AdminViews目錄中,已經有若干有用的腳本。你可以為模式,數據表,和視圖創建DDL。你也可以按用戶獲取模式,視圖和表特權清單,查看用戶所屬的用戶組。所有這些都是有用的信息,但是你想做的是,在你的源數據庫中創建SQL語句,并在你的新的加密數據庫中執行這些語句。
你可以如下圖所示,從pg_user表中獲取用戶列表:
SELECT ‘CREATE USER ’|| usename || ‘;’ FROM pg_user WHERE usename 《》 ‘rdsdb’; Produces: CREATE USER acctowner; CREATE USER mrexample; CREATE USER counterexample; CREATE USER mrspremise; CREATE USER mrsconclusion;
你應該向你創建的賬戶分配密碼。沒有方法用來從源數據庫中提取現有的密碼,所以必須創建新的密碼。
從GitHub下載代碼,展開src目錄,在AdminViews目錄中找到腳本。在你的Amazon Redshift集群中創建一個名為admin的模式,運行每一個以v_開始的腳本來創建視圖。你可以如下所示,用SQL語句訪問創建的視圖:
SELECT * FROM admin.v_generate_schema_ddl; Schema name: Admin ddl: Create schema admin
運行v_generate_group_DDL.SQL腳本,在新數據庫中創建用戶組:
SELECT ‘CREATE GROUP ’|| groname ||‘;’ FROM pg_group; Produces: CREATE GROUP chosen; CREATE GROUP readonly;
用戶歸屬于用戶組。你可以使用v_get_users-in_group腳本獲取這些關聯:
SELECT ‘ALTER GROUP ’ ||groname||‘ ADD USER ’||usename||‘;’ FROM admin.v_get_users_in_group; Produces: ALTER GROUP chosen ADD USER mrsconclusion; ALTER GROUP readonly ADD USERmrexample; ALTER GROUP readonly ADD USERmrspremise;
可以運行適當的腳本直接從腳本中生成模式,視圖和數據表DDL:
v_generate_schema_DDL.SQL, v_generate_table_DDL.SQL v_generate_view_DDL.SQL
你需要在新數據庫中為每個模式設置適當的特權。你可以運行如下腳本,在現有數據庫中獲取相關的信息:
SELECT * FROM admin.v_get_schema_priv_by_user WHERE schemaname NOT LIKE ‘pg%’ AND schemaname 《》 ‘information_schema’ AND usename 《》 ‘johnlou’ AND usename 《》 ‘rdsdb’;

在這里你可以看到賦予每個用戶的多個不同權限,這些用戶已經被賦予了模式特權。想要創建運行于新數據庫中的SQL,你可以使用一個UDF(用戶定義的函數)為結果集合中的每一行創建一系列特權。
非常好我支持^.^
(0) 0%
不好我反對
(0) 0%
