跳至內容

如何授予對 Amazon Redshift 中的外部結構描述的存取權?

2 分的閱讀內容
0

我的使用者無法存取 Amazon Redshift 叢集中外部結構描述中的物件。

簡短描述

在 Amazon Redshift 中使用外部結構描述時,您可能會收到以下錯誤訊息:

  • 「Permission denied」(權限遭拒)
  • 「Operation is not supported」(不支援作業)
  • 「External tables are not supported in views」(檢視不支援外部資料表)

不正確的 AWS Lake Formation 權限組態也會導致 Amazon Redshift Spectrum 出現錯誤。若要解決此問題,您必須授予外部結構描述的權限,而不是資料表層級的權限。

解決方法

授予存取外部結構描述中物件的權限

當 Amazon Redshift 使用者無法存取外部結構描述中的物件時,他們可能會收到以下錯誤:

「ERROR: permission denied for schema external_schema_name」(錯誤:對結構描述 external_schema_name 的權限遭拒)

若要授予使用者權限,請完成以下步驟:

  1. 開啟 Amazon Redshift console (Amazon Redshift 主控台)。

  2. 以超級使用者登入。

  3. 執行以下命令來確認使用者對其想要存取的外部結構描述的權限:

    SELECT *
    FROM SVV_SCHEMA_PRIVILEGES
    WHERE identity_name = 'name_of_the_user/role/group' AND namespace_name = 'external_schema_name';

    **注意:**將 name_of_the_user/role/group 替換為您要授予存取權之使用者的名稱、角色或群組。將 external_schema_name 替換為外部結構描述的名稱。

    如果上述命令未傳回 USAGE 權限類型,則表示使用者、角色或群組無權查詢外部結構描述。

  4. 執行下列其中一個 GRANT 命令,以授予使用外部結構描述的權限:

    GRANT USAGE ON SCHEMA external_schema_name TO user_name;
    GRANT USAGE ON SCHEMA external_schema_name TO role role_name;
    GRANT USAGE ON SCHEMA external_schema_name TO group group_name;

    **注意:**將 external_schema_name 替換為外部結構描述的名稱。將 user_namerole_namegroup_name 替換為您要授予存取權的使用者、角色或群組。

解決資料共用權限問題

當您嘗試授予外部結構描述中的物件的權限時,可能會收到以下錯誤訊息:

「ERROR: Operation is not supported through datashares」(錯誤:不支援透過資料共用進行作業)。

此錯誤會在以下情況中發生:

  • 外部結構描述來自您從資料共用建立的資料庫。
  • 原始資料共用不包含 WITH PERMISSIONS 子句。

若要解決此問題,請使用 WITH PERMISSION 子句從資料共用重新建立資料庫。

請完成下列步驟:

  1. 執行以下命令刪除現有的資料共用資料庫:

    DROP database database_created_from_datashare_name;

    **注意:**將 database_created_from_datashare_name 替換為您的資料庫名稱。

  2. 執行以下命令重新建立資料庫:

    CREATE DATABASE database_created_from_datashare_name
    WITH PERMISSIONS
    FROM DATASHARE 'datashare_name'
    OF ACCOUNT 'account_number'
    NAMESPACE 'namespace_uuid';

    **注意:**將 database_created_from_datashare_name 替換為您的資料庫名稱,並將 datashare_name 替換為您的資料共用名稱。將 account number 替換為您的 AWS 帳戶,並將 namespace_uuid 替換為您命名空間的通用唯一識別碼 (UUID)。

  3. 執行以下命令來建立外部結構描述:

    CREATE EXTERNAL SCHEMA external_schema_name
    FROM REDSHIFT DATABASE database_created_from_datashare_name
    SCHEMA schema_in_database_created_from_datashare;

    **注意:**將 external_schema_name 替換為外部結構描述的名稱,並將 database_created_from_datashare_name 替換為您資料庫的名稱。將 schema_in_ database_created_ from_ datashare 替換為您從資料共用所建立結構描述的名稱。

  4. 執行以下命令授予使用權限:

    GRANT USAGE on SCHEMA external_schema_name to user_name;
    GRANT USAGE ON SCHEMA database_created_from_datashare_name.schema_in_datashare_name TO user_name;

    **注意:**將 external_schema_name 替換為外部結構描述名稱。將 user_name 替換為您要授予使用權之使用者的名稱。將 database_created_from_datashare_name 替換為您從資料共用所建立資料庫的名稱,並將 schema_in_datashare_name 替換為您結構描述的名稱。

  5. 執行以下 SELECT 命令,以授予存取特定資料表的權限:

    GRANT SELECT ON
    TABLE database_created_from_datashare_name.schema_in_datashare_name.table_name
    TO user_name;

    **注意:**將 database_created_from_datashare_name 替換為您從資料共用所建立資料庫的名稱,並將 schema_in_datashare_name 替換為您結構描述的名稱。將 table_name 替換為您資料表的名稱,將 user_name 替換為您使用者名稱。

    若要授予對結構描述中所有資料表的存取權,請執行下列命令:

    GRANT SELECT ON
    ALL TABLES IN SCHEMA database_created_from_datashare_name.schema_in_datashare_name
    TO user_name;

    **注意:**將 database_created_from_datashare_name 替換為您從資料共用所建立資料庫的名稱,並將 schema_in_datashare_name 替換為您結構描述的名稱。將 user_name 替換為您的使用者名稱。

解決 Lake Formation 權限的外部結構描述問題

確認您是否為 AWS Glue Data Catalog 啟用了 Lake Formation,並且 Amazon Redshift 叢集的 AWS Identity and Access Management (IAM) 角色具有所需的 AWS Glue Data Catalog 權限。

如需了解更多資訊,請參閱 Redshift Spectrum 和 AWS Lake Formation 以及管理 Lake Formation 權限

使用外部結構描述授予精細的存取控制

使用 Lake Formation 或角色鏈在 Amazon Redshift Spectrum 中授予精細的存取控制。您可以在結構描述、資料表或欄層級授予權限。

如需詳細資訊,請參閱使用角色鏈限制 Amazon Redshift Spectrum 外部資料表對 Amazon Redshift IAM 使用者和群組的存取權授予 Data Catalog 資源的權限

使用外部資料表建立檢視時,請使用 WITH NO SCHEMA BINDING 子句

當您建立參考外部資料表的檢視時,可能會收到下列錯誤訊息:

「ERROR: 「External tables are not supported in views」(錯誤:檢視不支援外部資料表)。

若要解決此問題,請執行下列命令,並使用 WITH NO SCHEMA BINDING 子句來建立檢視:

CREATE OR REPLACE VIEW view_name AS
SELECT * FROM external_schema_name.external_table_name
WITH NO SCHEMA BINDING ;

**注意:**將 external_schema_name 替換為外部結構描述名稱,並將 external_table_name 替換為外部資料表的名稱。

相關資訊

SVV_EXTERNAL_SCHEMAS

使用 CREATE DATABASE 和資料共用的參數

參數

AWS 官方已更新 1 年前