Filtros de datos en Lake Formation - AWS Lake Formation

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Filtros de datos en Lake Formation

Puede implementar seguridad a nivel de columna, de fila y de celda mediante el uso de filtros de datos. Selecciona un filtro de datos al conceder el permiso de Lake Formation de SELECT sobre las tablas. Si la tabla contiene estructuras de columnas anidadas, puede definir un filtro de datos incluyendo o excluyendo las columnas secundarias y definir expresiones de filtro a nivel de fila en los atributos anidados.

Cada filtro de celdas de datos pertenece a una tabla específica de un Catálogo de datos. Un filtro de datos incluye la siguiente información:

  • Nombre del filtro

  • Los ID del catálogo de la tabla asociada al filtro

  • Nombre de la tabla

  • Nombre de la base de datos que contiene las tablas que se enumerarán.

  • Especificación de columna: una lista de columnas y columnas anidadas (con tipos de datos struct) para incluir o excluir en los resultados de la consulta.

  • Expresión de filtro de filas: una expresión que especifica las filas que se van a incluir en los resultados de la consulta. Con algunas restricciones, la expresión tiene la sintaxis de una cláusula WHERE en el lenguaje PartiQL. Para especificar todas las filas, seleccione Acceso a todas las filas en Acceso a nivel de fila en la consola o utilice AllRowsWildcard en las llamadas a la API.

    Para obtener más información acerca de lo que se admite en las expresiones de filtro de fila, consulte Compatibilidad con PartiQL en expresiones de filtro de filas.

El nivel de filtrado que recibe depende de cómo rellene el filtro de datos.

  • Al especificar el comodín “todas las columnas” y proporcionar una expresión de filtro de filas, solo se establece la seguridad de fila (filtrado de filas).

  • Al incluir o excluir columnas específicas y columnas anidadas y especificar «todas las filas» con el comodín de todas las filas, solo establece la seguridad a nivel de columna (filtrado de columnas).

  • Cuando se incluyen o excluyen columnas específicas y se proporciona también una expresión de filtro de fila, se establece la seguridad a nivel de celda (filtrado de celdas).

La siguiente captura de pantalla de la consola de Lake Formation muestra un filtro de datos que actúa a nivel de celda. En el caso de las consultas basadas en la tabla orders, restringe el acceso a la columna customer_name y los resultados de la consulta solo muestran las filas en las que la columna product_type contiene «farmacia».

La ventana del filtro de datos contiene estos campos, dispuestos en vertical: nombre del filtro de datos; base de datos de destino; tabla de destino; grupo de botones de opción con las opciones Acceso a todas las columnas, Incluir columnas y Excluir columnas; Seleccionar columnas (lista desplegable); expresión de filtro de filas (cuadro de texto multilínea). La opción Excluir columnas está seleccionada, la columna nombre_cliente está seleccionada para la exclusión y el campo Expresión del filtro de filas contiene 'product_type='pharma'.

Tenga en cuenta el uso de comillas simples para encerrar la cadena literal 'pharma'.

Puede usar la consola de Lake Formation para crear este filtro de datos o proporcionar el siguiente objeto de solicitud a la operación de la API CreateDataCellsFilter.

{ "Name": "restrict-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type='pharma'"}, "ColumnWildcard": { "ExcludedColumnNames": ["customer_name"] } }

Puede crear todos los filtros de datos que necesite para una tabla. Para ello, necesita un permiso SELECT con la opción de concesión que aparece en una tabla. De forma predeterminada, los administradores del lago de datos tienen permiso para crear filtros de datos en todas las tablas de esa cuenta. Normalmente solo se utiliza un subconjunto de los posibles filtros de datos cuando se conceden permisos sobre la tabla a una entidad principal. Por ejemplo, puede crear un segundo filtro de datos para la orders tabla que sea un filtro de datos. row-security-only En referencia a la captura de pantalla anterior, puede elegir la opción Acceso a todas las columnas e incluir una expresión de filtro de filas de product_type<>pharma. El nombre de este filtro de datos podría ser no-pharma. Restringe el acceso a todas las filas cuya product_type columna esté configurada como «pharma».

El objeto de solicitud de la operación de la API CreateDataCellsFilter para este filtro de datos es el siguiente.

{ "Name": "no-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type<>'pharma'"}, "ColumnNames": ["customer_id", "customer_name", "order_num" "product_id", "purchase_date", "product_type", "product_manufacturer", "quantity", "price"] }

A continuación, puede conceder SELECT sobre la tabla restrict-pharma con el filtro de datos orders a un usuario administrativo y SELECT sobre la tabla orders con el filtro de datos no-pharma a los usuarios no administrativos. En el caso de los usuarios del sector sanitario, concedería SELECT en la tabla orders con acceso total a todas las filas y columnas (sin filtro de datos), o quizá con otro filtro de datos que restrinja el acceso a la información sobre precios.

Puede incluir o excluir columnas anidadas al especificar la seguridad a nivel de columna y de fila dentro de un filtro de datos. En el siguiente ejemplo, el acceso al campo product.offer se especifica mediante nombres de columna cualificados (entre comillas dobles). Esto es importante en el caso de los campos anidados para evitar que se produzcan errores cuando los nombres de las columnas contienen caracteres especiales y para mantener la compatibilidad con versiones anteriores de las definiciones de seguridad de nivel columnas superior.

{ "Name": "example_dcf", "DatabaseName": "example_db", "TableName": "example_table", "TableCatalogId": "111122223333", "RowFilter": { "FilterExpression": "customer.customerName <> 'John'" }, "ColumnNames": ["customer", "\"product\".\"offer\""] }