Uso compartido de acceso de lectura a los datos en una Cuenta de AWS - Amazon Redshift

Uso compartido de acceso de lectura a los datos en una Cuenta de AWS

Puede compartir datos con fines de lectura entre distintos clústeres de Amazon Redshift dentro de una Cuenta de AWS.

Para compartir datos con fines de lectura como administrador del clúster productor o como propietario de la base de datos
  1. Cree datashares en su clúster. Para obtener más información, consulte CREATE DATASHARE.

    CREATE DATASHARE salesshare;

    Los superusuarios de clústeres y los propietarios de bases de datos pueden crear datashares. Cada datashare se asocia a una base de datos durante la creación. Solo los objetos de esa base de datos se pueden compartir en ese datashare. Se pueden crear varios datashares en la misma base de datos con el mismo nivel de detalle de los objetos o uno diferente. No hay límite en cuanto a la cantidad de datashares que puede crear un clúster.

    También puede utilizar la consola de Amazon Redshift para crear datashares. Para obtener más información, consulte Creación de datashares.

  2. Delegue permisos para operar en el datashare. Para obtener más información, consulte GRANT o REVOKE.

    En el siguiente ejemplo, se otorgan permisos a dbuser para salesshare.

    GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;

    Los superusuarios del clúster y los propietarios del recurso compartido de datos pueden otorgar o revocar permisos de modificación sobre este a usuarios adicionales.

  3. Agregue objetos a los datashares o quítelos. Para agregar objetos a un datashare, agregue el esquema antes de agregar los objetos. Cuando se agrega un esquema, Amazon Redshift no agrega todos los objetos que contiene. Asegúrese de agregarlos explícitamente. Para obtener más información, consulte ALTER DATASHARE.

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;

    También se pueden agregar vistas a un datashare.

    CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;

    Utilice ALTER DATASHARE para compartir esquemas, tablas, vistas y funciones de un esquema determinado. Los superusuarios, los propietarios de recursos compartidos de datos o los usuarios que tienen permisos ALTER u ALL sobre el recurso compartido de datos pueden modificarlo para agregarle o quitarle objetos. Los usuarios deben tener los permisos para poder agregar objetos al recurso compartido de datos o quitarlos. Los usuarios también deben ser los propietarios de los objetos o disponer de permisos SELECT, USAGE u ALL sobre ellos.

    También puede utilizar GRANT para agregar objetos al recurso compartido de datos. En este ejemplo, puede ver cómo:

    GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;

    La funcionalidad de esta sintaxis es equivalente a ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;.

    Utilice la cláusula INCLUDENEW para agregar al datashare nuevas tablas, vistas o funciones definidas por el usuario (UDF) de SQL que se crearon en un esquema especificado. Solo los superusuarios pueden modificar esta propiedad para cada par de esquema y datashare.

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;

    También puede utilizar la consola de Amazon Redshift para agregar objetos a los datashares o quitarlos. Para obtener más información, consulte Incorporación de objetos a los datashares, Eliminación de objetos de los datashares y Edición de datashares creados en su cuenta.

  4. Agregue consumidores a los datashares o quítelos. En el siguiente ejemplo, se agrega el espacio de nombres del clúster consumidor a salesshare. El espacio de nombres es el identificador único de carácter general (GUID) del espacio de nombres del clúster consumidor de la cuenta. Para obtener más información, consulte GRANT o REVOKE.

    GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Solo se pueden otorgar permisos a un consumidor de recurso compartido de datos en una instrucción GRANT.

    Los superusuarios de clústeres y los propietarios de objetos del recurso compartido de datos o los usuarios que tienen el permiso SHARE sobre el recurso compartido de datos pueden agregarle consumidores o quitárselos. Para ello, utilizan las instrucciones GRANT USAGE o REVOKE USAGE.

    Para encontrar el espacio de nombres del clúster que ve en este momento, puede utilizar el comando SELECT CURRENT_NAMESPACE. Para encontrar el espacio de nombres de un clúster diferente dentro de la misma Cuenta de AWS, vaya a la página de detalles del clúster en la consola de Amazon Redshift. En esa página, busque el campo de espacio de nombres que se acaba de agregar.

    También puede utilizar la consola de Amazon Redshift para agregar o quitar consumidores de datos en los recursos compartidos de datos. Para obtener más información, consulte Incorporación de consumidores de datos a los datashares y Eliminación de consumidores de datos de los datashares.

  5. (Opcional) Agregue restricciones de seguridad al datashare. En el siguiente ejemplo, se muestra que el clúster consumidor que cuenta con acceso de IP pública tiene permitido leer el datashare. Para obtener más información, consulte ALTER DATASHARE.

    ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;

    Puede modificar las propiedades referidas al tipo de consumidores después de la creación del datashare. Por ejemplo, puede definir que los clústeres que deseen consumir datos de un determinado datashare no puedan ser de acceso público. Las consultas de los clústeres consumidores que no cumplan las restricciones de seguridad especificadas en el recurso compartido de datos se rechazarán en el tiempo de ejecución de la consulta.

    También puede utilizar la consola de Amazon Redshift para modificar datashares. Para obtener más información, consulte Edición de datashares creados en su cuenta.

  6. Enumere los datashares que se hayan creado en el clúster y examine su contenido.

    En el siguiente ejemplo, se muestra la información de un recurso compartido de datos denominado salesshare. Para obtener más información, consulte DESC DATASHARE y SHOW DATASHARES.

    DESC DATASHARE salesshare; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+------------------- 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_category_redshift| 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | schema | public | t 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | view | public.sales_data_summary_view |

    En el siguiente ejemplo, se muestran los datashares salientes de un clúster productor.

    SHOW DATASHARES LIKE 'sales%';

    El resultado tiene un aspecto similar al siguiente.

    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+--------------------------------------- salesshare | 100 | dev | | OUTBOUND | 2020-12-09 02:27:08 | True | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d

    Para obtener más información, consulte DESC DATASHARE y SHOW DATASHARES.

    También puede utilizar SVV_DATASHARES, SVV_DATASHARE_CONSUMERS y SVV_DATASHARE_OBJECTS para ver los datashares, los objetos dentro del datashare y sus consumidores.

  7. Elimine datashares. Para obtener más información, consulte DROP DATASHARE.

    Puede eliminar los objetos del datashare en cualquier momento con DROP DATASHARE. Los superusuarios del clúster y los propietarios de los datashares pueden eliminarlos.

    En el siguiente ejemplo, se elimina un recurso compartido de datos denominado salesshare.

    DROP DATASHARE salesshare;

    También puede utilizar la consola de Amazon Redshift para eliminar los datashares. Para obtener más información, consulte Eliminación de los recursos compartidos de datos de creados en su cuenta.

  8. Utilice ALTER DATASHARE para quitar objetos de los datashares en cualquier parte de este. Utilice REVOKE USAGE ON para revocar los permisos sobre el datashare otorgados a determinados consumidores. Revoca los permisos USAGE de los objetos que se encuentran dentro de un recurso compartido de datos y desactiva de forma instantánea el acceso para todos los clústeres consumidores. Las listas de los datashares y las consultas de metadatos, como las listas de bases de datos y tablas, no devuelven los objetos compartidos después de haber revocado el acceso.

    ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;

    También puede utilizar la consola de Amazon Redshift para modificar datashares. Para obtener más información, consulte Edición de datashares creados en su cuenta.

  9. Revoque el acceso a los datashares desde los espacios de nombres si ya no desea compartir los datos con los consumidores.

    REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    También puede utilizar la consola de Amazon Redshift para modificar datashares. Para obtener más información, consulte Edición de datashares creados en su cuenta.

Para compartir datos con fines de lectura como administrador del clúster consumidor
  1. Enumere los datashares que se ponen a su disposición y vea su contenido. Para obtener más información, consulte DESC DATASHARE y SHOW DATASHARES.

    En el siguiente ejemplo, se muestra la información de los datashares entrantes de un espacio de nombres productor específico. Cuando ejecuta DESC DATASHARE como el administrador de un clúster consumidor, debe especificar la opción NAMESPACE para ver los datashares entrantes.

    DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |

    Solo los superusuarios del clúster pueden hacer esto. También puede utilizar SVV_DATASHARES para ver los datashares y SVV_DATASHARE_OBJECTS para ver los objetos que se encuentran dentro del datashare.

    En el siguiente ejemplo, se muestran los datashares entrantes de un clúster consumidor.

    SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
  2. Como superusuario de bases de datos, puede crear bases de datos locales que hacen referencia a los recursos compartidos de datos. Para obtener más información, consulte CREATE DATABASE.

    CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Si desea tener un control más detallado del acceso a los objetos de la base de datos local, utilice la cláusula WITH PERMISSIONS al crear la base de datos. De este modo, podrá conceder permisos en el nivel de objeto para los objetos de la base de datos en el paso 4.

    CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Puede ver las bases de datos que creó a partir del datashare consultando la vista SVV_REDSHIFT_DATABASES. No puede conectarse a estas bases de datos creadas a partir de datashares, que son de solo lectura. No obstante, puede conectarse a una base de datos local del clúster consumidor y efectuar una consulta de distintas bases de datos para consultar los datos de las bases de datos creadas a partir de los datashares. No puede crear un datashare encima de los objetos de base de datos creados a partir de un datashare existente. No obstante, puede copiar los datos en una tabla diferente en el clúster consumidor, llevar a cabo el procesamiento que sea necesario y, a continuación, compartir los objetos nuevos que se hayan creado.

    También puede utilizar la consola de Amazon Redshift para crear bases de datos a partir de datashares. Para obtener más información, consulte Creación de bases de datos a partir de datashares.

  3. (Opcional) Cree esquemas externos para referenciar esquemas específicos de la base de datos consumidora importados en el clúster consumidor y para asignarles permisos pormenorizados. Para obtener más información, consulte CREATE EXTERNAL SCHEMA.

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  4. Conceda permisos en las bases de datos y las referencias de esquema creadas a partir de los recursos compartidos de datos a usuarios y roles del clúster del consumidor según sea necesario. Para obtener más información, consulte GRANT o REVOKE.

    GRANT USAGE ON DATABASE sales_db TO Bob;
    GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

    Si ha creado su base de datos sin WITH PERMISSIONS, solo podrá asignar permisos a toda la base de datos creada a partir del recurso compartido de datos a los usuarios y los roles. En algunos casos, necesita controles pormenorizados sobre un subconjunto de los objetos de base de datos creados a partir del datashare. Si es así, puede crear una referencia de esquema externa que apunte a esquemas específicos del datashare (como se describe en el paso anterior) y proporcionar permisos pormenorizados en el nivel del esquema.

    También puede crear vistas de enlace de tiempo de ejecución encima de los objetos compartidos y utilizarlas para asignar permisos pormenorizados. También puede considerar la posibilidad de indicar a los clústeres productores que creen datashares adicionales en su nombre con el nivel de detalle requerido.

    Si ha creado la base de datos con WITH PERMISSIONS en el paso 2, debe asignar permisos de nivel de objeto a los objetos de la base de datos compartida. Un usuario que solo tenga el permiso USAGE no podrá acceder a ningún objeto de una base de datos creada con WITH PERMISSIONS hasta que se le concedan permisos adicionales en el nivel de objeto.

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  5. Consulte los datos de los objetos compartidos que se encuentran en los datashares.

    Los usuarios y los roles que tengan permisos en las bases de datos del consumidor y los esquemas de los clústeres del consumidor pueden explorar y navegar por los metadatos de cualquier objeto compartido. También pueden navegar por los objetos locales de un clúster consumidor y explorarlos. Para ello, utilizan controladores JDBC u ODBC, o vistas SVV_ALL y SVV_REDSHIFT.

    Los clústeres productores pueden tener muchos esquemas en la base de datos y muchas tablas y vistas dentro de cada esquema. Los usuarios del lado del consumidor solo pueden ver el subconjunto de objetos que se han puesto a disposición a través del datashare. Estos usuarios no pueden ver todos los metadatos del clúster productor. Este enfoque ayuda a proporcionar un control pormenorizado de la seguridad de los metadatos con el uso compartido de datos.

    Continúa conectándose a las bases de datos locales del clúster. No obstante, ahora, también es posible leer de las bases de datos y los esquemas que se crean a partir de los datashares utilizando la notación de tres partes database.schema.table. Puede realizar consultas que abarquen todas las bases de datos visibles para usted. Estas pueden ser bases de datos locales del clúster o bases de datos creadas a partir de los datashares. Los clústeres consumidores no pueden conectarse a las bases de datos que se hayan creado a partir de los datashares.

    Puede acceder a los datos mediante la cualificación completa. Para obtener más información, consulte Ejemplos de uso de una consulta entre bases de datos.

    SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02

    Solo se pueden utilizar las instrucciones SELECT en los objetos compartidos. No obstante, puede crear tablas en el clúster consumidor consultando los datos de los objetos compartidos de una base de datos local diferente.

    Además de las consultas, los consumidores pueden crear vistas en los objetos compartidos. Solo se admiten las vistas de enlace de tiempo de ejecución o las vistas materializadas. Amazon Redshift no admite las vistas normales en los datos compartidos. Las vistas que crean los consumidores pueden abarcar varias bases de datos locales o bases de datos creadas a partir de datashares. Para obtener más información, consulte CREATE VIEW.

    // Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;