背景
企业A将Dataphin作为数据建设和治理的平台,同时采购了一套BI软件用于数据分析和可视化,两者都对接了公司的统一登录系统。现在管理员期望将所有的数据源权限都集中在Dataphin,不同的BI用户访问Dataphin中的数据时,都仅可以看见该用户有权限的数据,减少权限的冗余管理。
方案介绍
Dataphin JDBC是Dataphin面向上游应用推出的统一数据服务功能,支持上游系统通过JDBC的方式获取Dataphin中的数据,同时支持在连接中传入用户的信息,Dataphin将根据传入的信息动态判断用户是否有访问数据的权限,帮助企业实现统一的权限管理。
Dataphin JDBC支持两种认证模式--简单模式和代理模式:
- 简单模式:采用个人用户的AccessKey ID和AccessKey Secret作为用户名和密码,所有上游用户的访问都采用该个人用户的身份进行;
- 代理模式:采用平台级别的AccessKey ID和AccessKey Secret作为用户名和密码,需要在每次连接中指定真实访问的用户信息,不同用户访问时可根据用户权限返回不同的数据。
接下来将为您介绍,如何在代理模式中动态设置访问的用户信息。
详解代理模式
方案1:在JDBC URL中设置代理用户信息
推荐场景:当上游系统支持在JDBC URL中设置动态参数时,推荐使用此方案。
Dataphin JDBC的URL格式为:jdbc:dataphin://host:port/catalog?[tenant_id=TenantID][&ssl=true][&log_level=Log_Level][&user=UserName][&password=PassWord][&delegation_uid=DelegationUid][&account_type=AccountType][&connect_timeout=ConnectTimeout][&engine=engine_type][compute_project=ProjectName] ,每个参数的含义请点击此处查询:Dataphin JDBC ,其中delegation_uid和account_type是代理模式下重点需要关注的信息:
account_type是Dataphin用于定位用户的属性信息,存在以下三种取值:
- SOURCE_USER_ID:用户在来源账号系统中的唯一标识,当上游系统和Dataphin都对接了公司的统一账号登录时,推荐使用;
- ACCOUNT_NAME:Dataphin的账户名,当上游应用中用户名与Dataphin的账户名一致时,推荐使用;
- USER_ID:Dataphin内部的唯一ID(通常不推荐使用);
delegation_uid是account_type对应的具体值,例如:account_type=SOURCE_USER_ID,则需要在delegation_uid中设置用户在来源系统中的ID。
方案2:通过SET设置连接的代理用户信息
推荐场景:当上游软件支持设置数据源连接后的初始化执行语句时,推荐使用此方案,如下图中Quick BI支持设置每次连接数据源后的初始化SET语句。
如果采用这种方案,您无需在JDBC URL中指定delegation_uid和account_type,仅需通过SET语句,设置本次连接的用户信息,支持两种SET语句:
set dp_delegation_uid = 'target_source_user_uid';
- 通过用户在登录系统中的ID指定本次连接的用户,当上游系统和Dataphin都对接了公司的统一账号登录时,推荐使用,等同于在JDBC URL中设置
account_type=SOURCE_USER_ID;
set dp_delegation_name = 'target_account_name';
- 通过Dataphin的账户名指定本次连接的用户,当上游应用中用户名与Dataphin的账户名一致时,推荐使用,等同于在JDBC URL中设置
account_type=ACCOUNT_NAME。
举例:本地DBeaver通过代理模式连接Dataphin JDBC
为了更直观地展示SET语句的功能,采用本地数据库软件DBeaver连接Dataphin JDBC 作为演示:
- Step 1:获取当前版本的Dataphin JDBC驱动和调用地址
- 点击Dataphin内右上角 中“个人账号”;
- 跳转后点击AccessKey管理,下载Dataphin JDBC的驱动包、复制OpenAPI的调用地址;
- Step 2:在DBeaver中创建Dataphin JDBC驱动
- 上传驱动文件
- 类名:com.aliyun.dataphin.jdbc.DataphinDriver
-
- Step 3:创建Dataphin JDBC数据源
- 参考Dataphin JDBC 文档补充JDBC URL,采用SET语句设置代理用户时,无需指定
delegation_uid和account_type - 联系Dataphin运营同学获取平台级别的AccessKey ID和AccessKey Secret作为用户名和密码;
-
- Step 4:设置单次连接的用户信息
set dp_delegation_name = 'SuperAdmin@dataphin';,通过Dataphin中的账号信息指定本次连接的用户,同时查询用户有权限的表数据;
set dp_delegation_uid = '2293723xxxxx';当前Dataphin实例对接了阿里云RAM作为登录系统,所以dp_delegation_uid取值为当前账号的RAM ID;