GitHub user melin edited a discussion: Principal、Privilege 、Policy and role support Spark SQL management.
Principal、Privilege 、Policy and role support Spark SQL management, Spark supports the extension of SQL syntax. ref: https://docs.databricks.com/aws/en/sql/language-manual/security-grant Gemini 3.5 Flash: ## 🏗️ 语法设计核心理念 在 Polaris 的安全模型中,核心实体的关系如下: 1. **Principal**(主体:用户或服务)绑定到 **Principal Role**(主体角色)。 2. **Privilege**(权限:如 `READ`、`WRITE`)授予 **Catalog Role**(目录角色)以作用于特定资源。 3. **Principal Role** 授予 **Catalog Role**,从而打通“主体”到“资源权限”的链路。 4. **Policy**(策略:如行过滤/列脱敏)作为附加的安全控制规则。 --- ## ✍️ SQL 语法定义 ### 1. Principal(安全主体)管理 用于创建、删除和查看 Polaris 的安全主体(用户或服务账号)。 ```sql -- 创建安全主体(支持指定类型与属性) CREATE PRINCIPAL <principal_name> TYPE { USER | SERVICE } [ WITH PROPERTIES ( 'key1'='value1', 'key2'='value2' ) ]; -- 删除安全主体 DROP PRINCIPAL <principal_name>; -- 查看所有安全主体 SHOW PRINCIPALS; ``` ### 2. Role(角色)管理 Polaris 区分 **Principal Role** 和 **Catalog Role**,我们需要分别提供管理语法。 ```sql -- 创建与删除 主体角色 CREATE PRINCIPAL ROLE <principal_role_name>; DROP PRINCIPAL ROLE <principal_role_name>; -- 创建与删除 目录角色 CREATE CATALOG ROLE <catalog_role_name>; DROP CATALOG ROLE <catalog_role_name>; -- 将 主体角色 授予 安全主体 GRANT PRINCIPAL ROLE <principal_role_name> TO PRINCIPAL <principal_name>; REVOKE PRINCIPAL ROLE <principal_role_name> FROM PRINCIPAL <principal_name>; -- 将 目录角色 授予 主体角色(核心解耦点) GRANT CATALOG ROLE <catalog_role_name> TO PRINCIPAL ROLE <principal_role_name>; REVOKE CATALOG ROLE <catalog_role_name> FROM PRINCIPAL ROLE <principal_role_name>; ``` ### 3. Privilege(权限)管理 定义如何将具体的资源权限(如库、表、视图的操作权)授予 **Catalog Role**。 ```sql -- 授予权限(支持 CATALOG、NAMESPACE、TABLE、VIEW 等层级) GRANT { CREATE_TABLE | SELECT | INSERT | DROP | ALL PRIVILEGES } ON { CATALOG <catalog_name> | NAMESPACE <ns_name> | TABLE <table_name> } TO CATALOG ROLE <catalog_role_name>; -- 收回权限 REVOKE { SELECT | INSERT | ALL PRIVILEGES } ON TABLE <table_name> FROM CATALOG ROLE <catalog_role_name>; ``` ### 4. Policy(安全策略)管理 用于定义更细粒度的安全控制,例如行级过滤(Row-level filtering)或列级脱敏(Column masking)。 ```sql -- 创建行级过滤策略 CREATE POLICY <policy_name> ON <table_name> FOR SELECT TO CATALOG ROLE <catalog_role_name> USING ( <filter_expression> ); -- 例如:country = 'US' -- 创建列脱敏策略 CREATE POLICY <policy_name> ON <table_name> ( <column_name> ) FOR SELECT TO CATALOG ROLE <catalog_role_name> REPLACE WITH <masking_expression>; -- 例如:sha2(phone, 256) -- 删除策略 DROP POLICY <policy_name> ON <table_name>; ``` GitHub link: https://github.com/apache/polaris/discussions/5244 ---- This is an automatically sent email for [email protected]. To unsubscribe, please send an email to: [email protected]
