LDAP认证
LDAP认证
Doris 支持 LDAP 验证登录和组授权。
LDAP 验证登录 指的是使用 LDAP 服务检查用户密码登录 Doris 账户。如果 LDAP 服务中不存在对应用户则仍使用 Doris 登录流程,如果 LDAP 检查密码正确但是 Doris 中没有对应账户则创建临时用户登录 Doris。
LDAP 组授权 是将LDAP中的 group 映射到 Doris 中的 Role,如果用户在LDAP中属于多个用户组,登录 Doris 后用户将获得所有组对应 Role 的权限,要求组名与Role 名字相同。
关于 Role 相关介绍,请参阅 权限管理。
启用LDAP认证
目前公有云用户暂不支持 LDAP 认证方式。如有需求,请 联系我们。
FE端配置
需要在 fe/conf/ldap.conf
文件中配置 LDAP 基本信息,另有 LDAP 管理员密码需要使用sql语句进行设置。
-
ldap_authentication_enabled = false
设置值为
true
启用LDAP验证;当值为false
时,不启用LDAP验证,该配置文件的其他配置项都无效。 -
ldap_host = 127.0.0.1
LDAP服务端 IP。
-
ldap_port = 389
LDAP 服务端口,默认明文传输端口为389,目前 Doris 仅支持明文密码传输。
-
ldap_admin_name = cn=admin,dc=domain,dc=com
LDAP管理员账户的
Distinguished Name
(DN)。当用户使用 LDAP 验证登录Doris 时,Doris 会绑定该管理员账户在 LDAP 中搜索用户信息。 -
ldap_user_basedn = ou=people,dc=domain,dc=com
Doris 在 LDAP 中搜索用户信息时的 base ND。
-
ldap_user_filter = (&(uid={login}))
Doris 在 LDAP 中搜索用户信息时的过滤条件,占位符
{login}
会被替换为登录用户名。必须保证通过该过滤条件搜索的用户唯一,否则 Doris 无法通过 LDAP 验证密码,登录时会出现ERROR 5081 (42000): user is not unique in LDAP server.
的错误信息。例如使用 LDAP 用户节点 uid 属性作为登录 Doris 的用户名可以配置该项为:
`ldap_user_filter = (&(uid={login}))`。 使用LDAP用户邮箱前缀作为用户名可配置该项: `ldap_user_filter = (&(mail={login}@baidu.com))`
-
ldap_group_basedn = ou=group,dc=domain,dc=com
Doris 在 LDAP 中搜索组信息时的 base DN。如果不配置该项,将不启用LDAP组授权。
设置 LDAP 管理员密码
配置好 ldap.conf
文件后启动 FE,使用 root 或 admin 账号登录 Doris,执行SQL:
set ldap_admin_password = 'ldap_admin_password';
MySQL 客户端配置
客户端使用 LDAP 验证需要启用 MySQL 客户端明文验证插件,使用命令行登录 Doris 可以使用下面两种方式之一启用 MySQL 明文验证插件:
-
设置环境变量
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN
值1
,Y
或y
例如在linux或者max环境中可以使用:
echo "export LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1" >> ~/.bash_profile
-
每次登录Doris时添加参数
--enable-cleartext-plugin
mysql -hDoris_HOST -PDoris_PORT -u user -p ldap_password --enable-cleartext-plugin
附录1:LDAP 认证详解
开启 LDAP 后,用户登录时 Doris 会先通过 LDAP 服务验证用户密码,如果 LDAP 存在用户且密码正确,Doris 则运行该用户登录;此时 Doris 若存在对应账户则直接登录该账户,如果不存在对应账户则为用户创建临时账户并登录该账户。
如果 LDAP 服务中不存在登录用户,则使用Doris进行密码认证。
以下示例中,假设已开启 LDAP 认证,配置 ldap_user_filter = (&(uid={login}))
,且其他配置项都正确,客户端设置环境变量 LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
-
Dois 和 LDAP 中存在账户
存在Doris账户:
jack@'172.10.1.10'
,密码:123456
LDAP 用户节点存在属性:
uid: jack
用户密码:abcdef
使用以下命令登录 Doris 可以登录 jack@'172.10.1.10'账户:
mysql -hDoris_HOST -PDoris_PORT -ujack -p abcdef
使用以下命令将登录失败:
mysql -hDoris_HOST -PDoris_PORT -ujack -p 123456
-
LDAP中存在用户,Doris中不存在对应账户:
LDAP用户节点存在属性:
uid: jack
用户密码:abcdef
使用以下命令登陆 Doris 后,Doris 将创建临时用户
jack@'%'
。临时用户具有基本权限
DatabasePrivs:Select_priv
, 用户退出登录后Doris将删除该临时用户:mysql -hDoris_HOST -PDoris_PORT -ujack -p abcdef
-
LDAP不存在用户:
存在Doris账户:
jack@'172.10.1.10'
,密码:123456
使用Doris密码登录账户,成功:
mysql -hDoris_HOST -PDoris_PORT -ujack -p 123456
附录2:LDAP 组授权详解
LDAP 组授权是将 LDAP 中的 group 映射到 Doris 中的 Role,并将所有对应的 Role 权限授予登录用户,用户退出登录后 Doris 会撤销对应的 Role 权限。
用户 DN 是 LDAP 组节点的 member
属性则认为用户属于该组,Doris会截取组 DN 的第一个 Rdn 作为组名。
例如用户 DN 为 uid=jack,ou=aidp,dc=baidu,dc=com
,组信息如下:
dn: cn=Doris_rd,ou=group,dc=baidu,dc=com
objectClass: groupOfNames
member: uid=jack,ou=aidp,dc=baidu,dc=com
则组名为 Doris_rd
。
假如 jack 还属于 LDAP 组 Doris_qa
、Doris_pm
。
Doris 存在 Role:Doris_rd
、Doris_qa
、Doris_pm
。
在使用 LDAP 验证登录后,用户不但具有该账户原有的权限,还将获得 Role Doris_rd
、Doris_qa
和 Doris_pm
的权限。