在 Azure Synapse 无服务器 SQL 池中管理用户权限
为了保护数据,Azure 存储实现了一个访问控制模型,该模型支持 Azure 基于角色的访问控制 (Azure RBAC) 和用于 Unix 的可移植操作系统接口 (POSIX) 之类的访问控制列表 (ACL)
可将安全主体关联到文件和目录的访问级别。 这些关联在访问控制列表 (ACL) 中捕获。 存储帐户中的每个文件和目录都有一个访问控制列表。 当安全主体尝试对文件或目录执行操作时,ACL 检查将确定安全主体(用户、组、服务主体或托管标识)是否具有执行该操作所需的正确权限级别。
有两种访问控制列表:
访问 ACL
控制对对象的访问。 文件和目录都具有访问 ACL。
默认 ACL
是与目录关联的 ACL 模板,用于确定在该目录下创建的任何子项的访问 ACL。 文件没有默认 ACL。
访问 ACL 和默认 ACL 具有相同的结构。
容器对象权限为“读取”、“写入”和“执行”,可对文件和目录使用这些权限,如下表所示:
权限级别
权限 | 文件 | Directory |
---|---|---|
读取 (R) | 可以读取文件内容 | 需有“读取”和“执行”权限才能列出目录内容 |
写入 (W) | 可以在文件中写入或追加内容 | 需有“写入”和“执行”权限才能在目录中创建子项 |
执行 (X) | 不表示 Data Lake Storage Gen2 上下文中的任何内容 | 需要遍历目录的子项 |
设置 ACL 的指南
始终将 Microsoft Entra 安全组用作 ACL 条目中分配的主体。 拒绝直接分配各个用户或服务主体。 使用此结构,你可以添加和删除用户或服务主体,不需要向整个目录结构重新应用 ACL。 只需从相应的 Microsoft Entra 安全组添加或删除用户和服务主体。
有多种方法可用来设置组。 例如,假设你有一个名为 /LogData 的目录,该目录包含服务器生成的日志数据。 Azure 数据工厂 (ADF) 将数据引入到该文件夹中。 服务工程团队中的特定用户将上传日志并管理此文件夹的其他用户,而各个 Databricks 群集将分析来自该文件夹的日志。
若要启用这些活动,可以创建一个 LogsWriter 组和一个 LogsReader 组。 然后,可以按如下所示分配权限:
- 将 LogsWriter 组添加到 /LogData 目录的具有 rwx 权限的 ACL。
- 将 LogsReader 组添加到 /LogData 目录的具有 rwx 权限的 ACL。
- 向 LogsWriters 组添加用于 ADF 的服务主体对象或托管服务标识 (MSI)。
- 将服务工程团队中的用户添加到 LogsWriters 组。
- 将 Databricks 的服务主体对象或 MSI 添加到 LogsReader 组。
如果服务工程团队中的用户离开了公司,则只需将其从 LogsWriter 组中删除即可。 如果未将该用户添加到组中,而是为该用户添加了专用 ACL 条目,则必须从 /LogData 目录中删除此 ACL 条目。 还必须从 /LogData 目录的整个目录层次结构中的所有子目录和文件中删除此条目。
无服务器 SQL 池用户所需的角色
对于需要“只读”访问权限的用户,你应该分配名为“存储 Blob 数据读取器”的角色。
对于需要“读/写”访问权限的用户,你应该分配名为“存储 Blob 数据参与者”的角色。 如果用户应具有 create external table as select (CETAS) 的权限,则需要读/写访问权限。
注意
如果用户应具有角色所有者或参与者的权限,则该角色不足够。 Azure Data Lake Storage Gen 2 具有应分配的超级角色。
数据库级别权限
若要向用户提供更精细的访问权限,应使用 Transact-SQL 语法创建登录名和用户。
若要向用户授予对单个无服务器 SQL 池数据库的访问权限,请执行此示例中的步骤:
创建登录名
use master CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER;
创建用户
use yourdb -- Use your DB name CREATE USER alias FROM LOGIN [alias@domain.com];
将用户添加到指定角色的成员
use yourdb -- Use your DB name alter role db_datareader Add member alias -- Type USER name from step 2 -- You can use any Database Role which exists -- (examples: db_owner, db_datareader, db_datawriter) -- Replace alias with alias of the user you would like to give access and domain with the company domain you are using.
服务器级别权限
若要向用户授予对所有无服务器 SQL 池数据库的完全访问权限,请执行此示例中的步骤:
CREATE LOGIN [alias@domain.com] FROM EXTERNAL PROVIDER; ALTER SERVER ROLE sysadmin ADD MEMBER [alias@domain.com];