本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
使用須知
若要授予物件的權限,您必須符合下列條件之一:
-
身為物件擁有者。
-
身為超級使用者。
-
具有該物件和權限的授予權限。
例如,以下命令可讓使用者 HR 在 employees 資料表上執行 SELECT 命令,並對其他使用者授予和撤銷相同的權限。
grant select on table employees to HR with grant option;
HR 無法授予 SELECT 以外任何操作的權限,也無法授予 employees 資料表以外任何資料表的權限。
在另一個範例中,以下命令可讓使用者 HR 在 employees 資料表上執行 ALTER 命令,並對其他使用者授予和撤銷相同的權限。
grant ALTER on table employees to HR with grant option;
HR 無法授予 ALTER 以外任何操作的權限,也無法授予 employees 資料表以外任何資料表的權限。
在檢視上授予權限並不表示具有基礎資料表的權限。同樣地,在結構描述上授予權限並不表示具有結構描述中資料表的權限。請改為明確授與基礎資料表的存取權限。
若要將權限授予 AWS Lake Formation 資料表,與資料表外部結構描述相關聯的 IAM 角色必須具有將權限授予外部資料表的許可。下列範例所建立的外部結構描述內含相關聯的 myGrantor
IAM 角色。該 myGrantor
IAM 角色具備將許可授予他人的許可。GRANT 命令會使用與外部結構描述相關聯的 myGrantor
IAM 角色許可,將許可授予 myGrantee
IAM 角色。
create external schema mySchema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myGrantor' create external database if not exists;
grant select on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
如果對 IAM 角色將授予所有權限 (GRANT ALL),則啟用 Lake Formation 的相關 Data Catalog 中將授予個別權限。例如,執行下列 GRANT ALL 的結果是 Lake Formation 主控台中會顯示授予的個別權限 (SELECT、ALTER、DROP、DELETE 和 INSERT)。
grant all on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';
無論是使用 GRANT 或 REVOKE 命令設定物件權限,超級使用者都能存取所有物件。
欄位層級存取控制的使用須知
下列使用須知適用於 Amazon Redshift 資料表和檢視上的資料欄層級權限。這些須知會描述資料表;除非我們明確提到例外,否則相同的須知會適用於檢視。
-
對於 Amazon Redshift 資料表,您只能在資料欄層級授予 SELECT 和 UPDATE 權限。對於 Amazon Redshift 檢視,您只能在資料欄層級授予 SELECT 權限。
-
在資料表上的資料欄層級 GRANT 內容中使用時,ALL 關鍵字是 SELECT 和 UPDATE 權限組合的同義詞。
-
如果您沒有資料表中所有資料欄的 SELECT 權限,執行 SELECT * 操作只會傳回您有權存取的資料欄。使用檢視時,SELECT * 操作會嘗試存取檢視中的所有資料欄。如果您沒有存取所有資料欄的許可,這些查詢會失敗,並出現許可遭拒的錯誤。
-
在以下情況下,SELECT * 不會擴展到僅可存取的資料欄:
-
您無法使用 SELECT * 建立僅具有可存取資料欄的一般檢視。
-
您無法使用 SELECT * 建立僅具有可存取資料欄的具體化視觀表。
-
-
如果您有資料表或檢視的 SELECT 或 UPDATE 權限並新增一個資料欄,則您對資料表或檢視及其所有資料欄仍具有相同的權限。
-
只有資料表的擁有者或超級使用者可以授與資料欄層級權限。
-
資料欄層級權限不支援 WITH GRANT OPTION 子句。
-
您無法同時在資料表層級和資料欄層級擁有相同的權限。例如,使用者
data_scientist
不能同時擁有資料表employee
和資料欄employee.department
的 SELECT 權限。對資料表和資料表內的資料欄授與相同權限時,請考慮下列結果:-
如果使用者具有資料表的資料表層級權限,則在資料欄層級授與相同權限就沒有作用。
-
如果使用者具有資料表的資料表層級權限,對資料表的一或多個資料欄撤銷相同的權限,則會傳回錯誤。請改為在資料表層級撤銷權限。
-
如果使用者具有資料欄層級權限,在資料表層級授與相同的權限,則會傳回錯誤。
-
如果使用者具有資料欄層級權限,在資料表層級撤銷相同的權限,則會撤銷資料表上所有資料欄的資料欄和資料表權限。
-
-
您無法授與延遲繫結檢視的資料欄層級權限。
-
若要建立具體化檢視,您必須具有基礎資料表的資料表層級 SELECT 權限。即使您擁有特定資料欄層級的權限,也無法針對這些資料欄建立具體化檢視。不過,您可以將 SELECT 權限授與具體化檢視的資料欄,與一般檢視類似。
-
若要查閱資料欄層級權限的授與,請使用 PG_ATTRIBUTE_INFO 檢視。
授予 ASSUMEROL 許可的使用須知
下列是在 Amazon Redshift 中授予 ASSUMEROLE 許可的使用須知。
您可以使用 ASSUMEROLE 許可控制資料庫使用者、角色或群組在命令上的 IAM 角色存取許可,例如 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 等命令。將 ASSUMEROLE 許可授予 IAM 角色的使用者、角色或群組之後,使用者、角色或群組就可以在執行命令時擔任該角色。ASSUMEROLE 許可可讓您視需要授予適當命令的存取權。
只有資料庫超級使用者可以授予或撤銷使用者、角色和群組的 ASSUMEROLE 許可。超級使用者始終保有 ASSUMEROLE 許可。
若要為使用者、角色和群組啟用 ASSUMEROLE 許可的使用權,超級使用者會執行下列兩個動作:
-
在叢集上執行下列陳述式一次:
revoke assumerole on all from public for all;
-
將 ASSUMEROLE 許可授予使用者、角色和群組,以使用適當的命令。
授予 ASSUMEROLE 許可時,您可以在 ON 子句中指定角色鏈結。您可以使用逗號來分隔角色鏈中的角色,例如:Role1,Role2,Role3
。如果在授予 ASSUMEROLE 權限時指定角色鏈結,您必須在執行 ASSUMEROLE 許可授予的操作時指定角色鏈結。執行 ASSUMEROLE 許可授予的操作時,您無法指定角色鏈中的個別角色。例如,如果使用者、角色或群組被授予角色鏈結 Role1,Role2,Role3
,則您無法指定僅 Role1
執行操作。
如果使用者嘗試執行 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 操作,但尚未獲得 ASSUMEROLE 許可,則會出現類似下列內容的訊息。
ERROR: User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY
若要列出已透過 ASSUMEROLE 許可授予 IAM 角色和命令存取權的使用者,請參閱。HAS_ASSUMEROLE_PRIVILEGE若要列出已授予所指定使用者的 IAM 角色和命令許可,請參閱 PG_GET_IAM_ROLE_BY_USER。若要列出已授予您指定 IAM 角色存取權的使用者、角色和群組,請參閱 PG_GET_GRANTEE_BY_IAM_ROLE。
授予機器學習許可的使用須知
您無法直接授予或撤銷與 ML 函數相關的許可。ML 函數屬於 ML 模型,而且許可是透過模型控制的。相反地,您可以授予 ML 模型相關的許可。下列範例會示範如何授予許可給所有使用者,以便執行與模型 customer_churn
相關聯的 ML 函數。
GRANT EXECUTE ON MODEL customer_churn TO PUBLIC;
您也可以將 ML 模型 的所有許可授予使用者customer_churn
。
GRANT ALL on MODEL customer_churn TO ml_user;
如果結構描述中有 ML 函數,則授予 ML 函數相關的 EXECUTE
許可將會失敗,即使該 ML 函數已經具有透過 GRANT EXECUTE ON MODEL
取得的 EXECUTE
許可也是一樣。我們建議您在使用 CREATE MODEL
命令時,使用個別的結構描述,將 ML 函數本身保留在不同的結構描述中。下列範例示範如何執行此動作。
CREATE MODEL ml_schema.customer_churn FROM customer_data TARGET churn FUNCTION ml_schema.customer_churn_prediction IAM_ROLE default SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket' );