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: 
---

## ✍️ 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]

Reply via email to