

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 权限示例场景
<a name="security-permissions-example-scenario"></a>

以下场景有助于演示如何设置权限以保护对 Amazon Lake Formation中数据的访问。

Shirley 是一名数据管理员。她想为自己的公司建立一个数据湖， AnyCompany。目前，所有数据都存储在 Amazon S3 中。John 是一名营销经理，需要对客户购买信息（包含在 `s3://customerPurchases` 中）进行写入访问。今年夏天，市场分析师 Diego 加入了 John 的团队。John 需要能够授予 Diego 访问权限，以便在不涉及 Shirley 的情况下对数据执行查询。

财务部的 Mateo 需要访问查询会计数据（例如，`s3://transactions`）。他想查询财务团队使用的数据库 (`Finance_DB`) 的表中的交易数据。他的经理 Arnav 可以允许他访问 `Finance_DB`。尽管他不应该能够修改会计数据，但他需要能够将数据转换为适合预测的格式（架构）。此类数据将存储在他可以修改的单独存储桶 (`s3://financeForecasts`) 中。

总结一下：
+ Shirley 是数据湖管理员。
+ John 需要 `CREATE_DATABASE` 和 `CREATE_TABLE` 权限才能在数据目录中创建新的数据库和表。
+ 还需要对自己创建的表具有 `SELECT`、`INSERT` 和 `DELETE` 权限。
+ Diego 需要对表具有 `SELECT` 权限才能运行查询。

的员工 AnyCompany 执行以下操作来设置权限。为清楚起见，本场景中显示的 API 操作显示了简化的语法。

1. Shirley 向 Lake Formation 注册包含客户购买信息的 Amazon S3 路径。

   ```
   RegisterResource(ResourcePath("s3://customerPurchases"), false, Role_ARN )
   ```

1. Shirley 向 John 授予访问包含客户购买信息的 Amazon S3 路径的权限。

   ```
   GrantPermissions(John, S3Location("s3://customerPurchases"), [DATA_LOCATION_ACCESS]) )
   ```

1. Shirley 向 John 授予创建数据库的权限。

   ```
   GrantPermissions(John, catalog, [CREATE_DATABASE]) 
   ```

1. John 创建数据库 `John_DB`。John 自动具有对该数据库的 `CREATE_TABLE` 权限，因为他创建了该数据库。

   ```
   CreateDatabase(John_DB)
   ```

1. John 创建指向 `s3://customerPurchases` 的表 `John_Table`。由于他创建了该表，因此他具有对该表的所有权限，并且可以授予对该表的权限。

   ```
   CreateTable(John_DB, John_Table)
   ```

1. John 允许他的分析师 Diego 访问表 `John_Table`。

   ```
    GrantPermissions(Diego, John_Table, [SELECT])
   ```

1. John 允许他的分析师 Diego 访问 `s3://customerPurchases/London/`。由于 Shirley 已经注册 `s3://customerPurchases`，因此其子文件夹已在 Lake Formation 中注册。

   ```
    GrantDataLakePrivileges( 123456789012/datalake, Diego, [DATA_LOCATION_ACCESS], [], S3Location("s3://customerPurchases/London/") )
   ```

1. John 允许他的分析师 Diego 在数据库 `John_DB` 中创建表。

   ```
    GrantDataLakePrivileges( 123456789012/datalake, Diego, John_DB, [CREATE_TABLE], [] )
   ```

1. Diego 在 `s3://customerPurchases/London/` 处的 `John_DB` 中创建表，并自动获取 `ALTER`、`DROP`、`SELECT`、`INSERT` 和 `DELETE` 权限。

   ```
    CreateTable( 123456789012/datalake, John_DB, Diego_Table )
   ```