Skip to content

Commit 53f3904

Browse files
authored
docs(access-control): add business role model and detailed examples (#3071)
* docs(access-control): add business role model and detailed examples * add table case
1 parent 25e51a2 commit 53f3904

2 files changed

Lines changed: 533 additions & 3 deletions

File tree

docs/cn/guides/56-security/access-control/02-roles.md

Lines changed: 268 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,9 @@ CREATE ROLE billing;
7575

7676
角色名称不区分大小写,`billing``Billing` 视为相同。关于该角色的设置和分配步骤,请参阅[授予财务人员访问权限](/guides/cloud/administration/costs#granting-access-to-finance-personnel)
7777

78-
## 使用示例
78+
## 使用示例(基础)
7979

80-
此示例展示了基于角色的权限管理。首先创建一个 `writer` 角色并授予权限,然后将 `writer` 角色授予用户 `eric`,使其继承这些权限。最后,撤销角色的权限,演示其对用户权限的影响
80+
此示例展示了基于角色的权限管理:创建角色并授予权限,再将角色授予用户,最后撤销角色权限以观察权限变化
8181

8282
```sql title='Example:'
8383
-- 创建一个名为 'writer' 的新角色
@@ -108,3 +108,269 @@ REVOKE ALL ON default.* FROM ROLE writer;
108108
-- 由于已从角色中撤销权限,因此不显示任何权限
109109
SHOW GRANTS FOR ROLE writer;
110110
```
111+
112+
## 业务系统对齐的角色模型
113+
114+
将角色与业务系统对齐,默认仅访问本域数据,跨域访问通过协作角色授予。
115+
116+
### 参考架构
117+
118+
```text
119+
┌──────────────┐
120+
│ 身份系统 │
121+
│ 账号/认证 │
122+
└──────┬───────┘
123+
│ 用户/权限
124+
v
125+
┌──────────────┐ 商品/订单 ┌──────────────┐ 支付/清算 ┌──────────────┐
126+
│ 营销增长 │──────────────>│ 交易订单 │──────────────>│ 支付结算 │
127+
│ 投放渠道 │ │ 商品定价 │ │ 清算对账 │
128+
└──────┬───────┘ └──────┬───────┘ └──────┬───────┘
129+
│ │ 履约/库存 │ 对账/核算
130+
│ v v
131+
│ ┌──────────────┐ ┌──────────────┐
132+
│ │ 履约仓储 │ │ 财务核算 │
133+
│ │ 发货配送 │ │ 成本利润 │
134+
│ └──────────────┘ └──────────────┘
135+
136+
│ 客服/反馈
137+
v
138+
┌──────────────┐
139+
│ 客服工单 │
140+
│ 体验满意 │
141+
└──────────────┘
142+
143+
^ 风控监控/策略
144+
145+
┌──────────────┐
146+
│ 风控反欺诈 │
147+
│ 风险事件 │
148+
└──────────────┘
149+
```
150+
151+
### 角色约定
152+
153+
- `<biz>_owner`: 业务域对象所有权角色
154+
- `<biz>_rw`: 写入/建表/变更
155+
- `<biz>_ro`: 只读
156+
- 数据库: `<biz>_raw`, `<biz>_mart`
157+
- Stage: `stage_<biz>_ingest`
158+
159+
### Ownership 行为
160+
161+
对象创建后,Ownership 会自动归属到“创建对象时的当前角色”。请在创建对象前先 `SET ROLE <biz>_owner`。详见 [Ownership](03-ownership.md)
162+
163+
## 使用示例(业务系统)
164+
165+
以下示例基于上述业务协作关系,展示业务系统隔离、Ownership 归属以及跨域协作授权。
166+
167+
```sql title='Example:'
168+
-- 1) 业务系统角色
169+
CREATE ROLE identity_owner;
170+
CREATE ROLE identity_rw;
171+
CREATE ROLE identity_ro;
172+
173+
CREATE ROLE commerce_owner;
174+
CREATE ROLE commerce_rw;
175+
CREATE ROLE commerce_ro;
176+
177+
CREATE ROLE payment_owner;
178+
CREATE ROLE payment_rw;
179+
CREATE ROLE payment_ro;
180+
181+
CREATE ROLE fulfillment_owner;
182+
CREATE ROLE fulfillment_rw;
183+
CREATE ROLE fulfillment_ro;
184+
185+
CREATE ROLE marketing_owner;
186+
CREATE ROLE marketing_rw;
187+
CREATE ROLE marketing_ro;
188+
189+
CREATE ROLE finance_owner;
190+
CREATE ROLE finance_rw;
191+
CREATE ROLE finance_ro;
192+
193+
CREATE ROLE support_owner;
194+
CREATE ROLE support_rw;
195+
CREATE ROLE support_ro;
196+
197+
CREATE ROLE risk_owner;
198+
CREATE ROLE risk_rw;
199+
CREATE ROLE risk_ro;
200+
201+
-- 2) 业务系统资源
202+
CREATE DATABASE identity_raw;
203+
CREATE DATABASE identity_mart;
204+
CREATE STAGE stage_identity_ingest;
205+
206+
CREATE DATABASE commerce_raw;
207+
CREATE DATABASE commerce_mart;
208+
CREATE STAGE stage_commerce_ingest;
209+
210+
CREATE DATABASE payment_raw;
211+
CREATE DATABASE payment_mart;
212+
CREATE STAGE stage_payment_ingest;
213+
214+
CREATE DATABASE fulfillment_raw;
215+
CREATE DATABASE fulfillment_mart;
216+
CREATE STAGE stage_fulfillment_ingest;
217+
218+
CREATE DATABASE marketing_raw;
219+
CREATE DATABASE marketing_mart;
220+
CREATE STAGE stage_marketing_ingest;
221+
222+
CREATE DATABASE finance_raw;
223+
CREATE DATABASE finance_mart;
224+
CREATE STAGE stage_finance_ingest;
225+
226+
CREATE DATABASE support_raw;
227+
CREATE DATABASE support_mart;
228+
CREATE STAGE stage_support_ingest;
229+
230+
CREATE DATABASE risk_raw;
231+
CREATE DATABASE risk_mart;
232+
CREATE STAGE stage_risk_ingest;
233+
234+
-- 3) Ownership 归属给 owner 角色
235+
GRANT OWNERSHIP ON identity_raw.* TO ROLE identity_owner;
236+
GRANT OWNERSHIP ON identity_mart.* TO ROLE identity_owner;
237+
GRANT OWNERSHIP ON STAGE stage_identity_ingest TO ROLE identity_owner;
238+
239+
GRANT OWNERSHIP ON commerce_raw.* TO ROLE commerce_owner;
240+
GRANT OWNERSHIP ON commerce_mart.* TO ROLE commerce_owner;
241+
GRANT OWNERSHIP ON STAGE stage_commerce_ingest TO ROLE commerce_owner;
242+
243+
GRANT OWNERSHIP ON payment_raw.* TO ROLE payment_owner;
244+
GRANT OWNERSHIP ON payment_mart.* TO ROLE payment_owner;
245+
GRANT OWNERSHIP ON STAGE stage_payment_ingest TO ROLE payment_owner;
246+
247+
GRANT OWNERSHIP ON fulfillment_raw.* TO ROLE fulfillment_owner;
248+
GRANT OWNERSHIP ON fulfillment_mart.* TO ROLE fulfillment_owner;
249+
GRANT OWNERSHIP ON STAGE stage_fulfillment_ingest TO ROLE fulfillment_owner;
250+
251+
GRANT OWNERSHIP ON marketing_raw.* TO ROLE marketing_owner;
252+
GRANT OWNERSHIP ON marketing_mart.* TO ROLE marketing_owner;
253+
GRANT OWNERSHIP ON STAGE stage_marketing_ingest TO ROLE marketing_owner;
254+
255+
GRANT OWNERSHIP ON finance_raw.* TO ROLE finance_owner;
256+
GRANT OWNERSHIP ON finance_mart.* TO ROLE finance_owner;
257+
GRANT OWNERSHIP ON STAGE stage_finance_ingest TO ROLE finance_owner;
258+
259+
GRANT OWNERSHIP ON support_raw.* TO ROLE support_owner;
260+
GRANT OWNERSHIP ON support_mart.* TO ROLE support_owner;
261+
GRANT OWNERSHIP ON STAGE stage_support_ingest TO ROLE support_owner;
262+
263+
GRANT OWNERSHIP ON risk_raw.* TO ROLE risk_owner;
264+
GRANT OWNERSHIP ON risk_mart.* TO ROLE risk_owner;
265+
GRANT OWNERSHIP ON STAGE stage_risk_ingest TO ROLE risk_owner;
266+
267+
-- 4) 系统内读写分离
268+
GRANT USAGE ON identity_raw.* TO ROLE identity_rw;
269+
GRANT SELECT ON identity_raw.* TO ROLE identity_rw;
270+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON identity_mart.* TO ROLE identity_rw;
271+
GRANT USAGE ON identity_mart.* TO ROLE identity_ro;
272+
GRANT SELECT ON identity_mart.* TO ROLE identity_ro;
273+
GRANT READ, WRITE ON STAGE stage_identity_ingest TO ROLE identity_rw;
274+
275+
GRANT USAGE ON commerce_raw.* TO ROLE commerce_rw;
276+
GRANT SELECT ON commerce_raw.* TO ROLE commerce_rw;
277+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON commerce_mart.* TO ROLE commerce_rw;
278+
GRANT USAGE ON commerce_mart.* TO ROLE commerce_ro;
279+
GRANT SELECT ON commerce_mart.* TO ROLE commerce_ro;
280+
GRANT READ, WRITE ON STAGE stage_commerce_ingest TO ROLE commerce_rw;
281+
282+
GRANT USAGE ON payment_raw.* TO ROLE payment_rw;
283+
GRANT SELECT ON payment_raw.* TO ROLE payment_rw;
284+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON payment_mart.* TO ROLE payment_rw;
285+
GRANT USAGE ON payment_mart.* TO ROLE payment_ro;
286+
GRANT SELECT ON payment_mart.* TO ROLE payment_ro;
287+
GRANT READ, WRITE ON STAGE stage_payment_ingest TO ROLE payment_rw;
288+
289+
GRANT USAGE ON fulfillment_raw.* TO ROLE fulfillment_rw;
290+
GRANT SELECT ON fulfillment_raw.* TO ROLE fulfillment_rw;
291+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON fulfillment_mart.* TO ROLE fulfillment_rw;
292+
GRANT USAGE ON fulfillment_mart.* TO ROLE fulfillment_ro;
293+
GRANT SELECT ON fulfillment_mart.* TO ROLE fulfillment_ro;
294+
GRANT READ, WRITE ON STAGE stage_fulfillment_ingest TO ROLE fulfillment_rw;
295+
296+
GRANT USAGE ON marketing_raw.* TO ROLE marketing_rw;
297+
GRANT SELECT ON marketing_raw.* TO ROLE marketing_rw;
298+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON marketing_mart.* TO ROLE marketing_rw;
299+
GRANT USAGE ON marketing_mart.* TO ROLE marketing_ro;
300+
GRANT SELECT ON marketing_mart.* TO ROLE marketing_ro;
301+
GRANT READ, WRITE ON STAGE stage_marketing_ingest TO ROLE marketing_rw;
302+
303+
GRANT USAGE ON finance_raw.* TO ROLE finance_rw;
304+
GRANT SELECT ON finance_raw.* TO ROLE finance_rw;
305+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON finance_mart.* TO ROLE finance_rw;
306+
GRANT USAGE ON finance_mart.* TO ROLE finance_ro;
307+
GRANT SELECT ON finance_mart.* TO ROLE finance_ro;
308+
GRANT READ, WRITE ON STAGE stage_finance_ingest TO ROLE finance_rw;
309+
310+
GRANT USAGE ON support_raw.* TO ROLE support_rw;
311+
GRANT SELECT ON support_raw.* TO ROLE support_rw;
312+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON support_mart.* TO ROLE support_rw;
313+
GRANT USAGE ON support_mart.* TO ROLE support_ro;
314+
GRANT SELECT ON support_mart.* TO ROLE support_ro;
315+
GRANT READ, WRITE ON STAGE stage_support_ingest TO ROLE support_rw;
316+
317+
GRANT USAGE ON risk_raw.* TO ROLE risk_rw;
318+
GRANT SELECT ON risk_raw.* TO ROLE risk_rw;
319+
GRANT CREATE, INSERT, UPDATE, DELETE, ALTER, DROP ON risk_mart.* TO ROLE risk_rw;
320+
GRANT USAGE ON risk_mart.* TO ROLE risk_ro;
321+
GRANT SELECT ON risk_mart.* TO ROLE risk_ro;
322+
GRANT READ, WRITE ON STAGE stage_risk_ingest TO ROLE risk_rw;
323+
324+
-- 5) Ownership 自动归属示例
325+
SET ROLE commerce_owner;
326+
CREATE TABLE commerce_mart.orders (
327+
order_id STRING,
328+
user_id STRING,
329+
order_ts TIMESTAMP,
330+
amount DECIMAL(18, 2)
331+
);
332+
333+
SET ROLE payment_owner;
334+
CREATE TABLE payment_mart.transactions (
335+
transaction_id STRING,
336+
order_id STRING,
337+
user_id STRING,
338+
transaction_ts TIMESTAMP,
339+
amount DECIMAL(18, 2)
340+
);
341+
342+
SET ROLE identity_owner;
343+
CREATE TABLE identity_mart.users (
344+
user_id STRING,
345+
email STRING,
346+
created_at TIMESTAMP
347+
);
348+
349+
-- 6) 跨域协作授权
350+
CREATE ROLE collab_marketing_commerce;
351+
GRANT SELECT ON commerce_mart.orders TO ROLE collab_marketing_commerce;
352+
GRANT ROLE collab_marketing_commerce TO ROLE marketing_ro;
353+
354+
CREATE ROLE collab_fulfillment_commerce;
355+
GRANT SELECT ON commerce_mart.orders TO ROLE collab_fulfillment_commerce;
356+
GRANT ROLE collab_fulfillment_commerce TO ROLE fulfillment_ro;
357+
358+
CREATE ROLE collab_payment_commerce;
359+
GRANT SELECT ON commerce_mart.orders TO ROLE collab_payment_commerce;
360+
GRANT ROLE collab_payment_commerce TO ROLE payment_ro;
361+
362+
CREATE ROLE collab_finance_payment;
363+
GRANT SELECT ON payment_mart.transactions TO ROLE collab_finance_payment;
364+
GRANT ROLE collab_finance_payment TO ROLE finance_ro;
365+
366+
CREATE ROLE collab_support_core;
367+
GRANT SELECT ON commerce_mart.orders TO ROLE collab_support_core;
368+
GRANT SELECT ON payment_mart.transactions TO ROLE collab_support_core;
369+
GRANT ROLE collab_support_core TO ROLE support_ro;
370+
371+
CREATE ROLE collab_risk_core;
372+
GRANT SELECT ON identity_mart.users TO ROLE collab_risk_core;
373+
GRANT SELECT ON commerce_mart.orders TO ROLE collab_risk_core;
374+
GRANT SELECT ON payment_mart.transactions TO ROLE collab_risk_core;
375+
GRANT ROLE collab_risk_core TO ROLE risk_ro;
376+
```

0 commit comments

Comments
 (0)