@@ -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-- 由于已从角色中撤销权限,因此不显示任何权限
109109SHOW 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