-
Notifications
You must be signed in to change notification settings - Fork 1.8k
auth
资源组是一堆资源对象的集合,与用户关联后用来隔离资源访问权限,可以根据项目组进行划分,目前资源组可关联的对象有用户、实例,不同资源组的对象隔离,组成员仅可以查看组关联对象的数据
在系统管理-资源组管理页面,进行资源组管理以及资源组关联对象管理,用户必须关联资源组才能访问对应实例等资源信息 添加实例和用户时也可以批量关联资源组
权限组是使用django自带的权限管理模块,是一堆权限集合,工作流审批依赖权限组,用户可以关联到多个权限组,可以根据职能进行划分,如开发组、项目经理组、DBA组等
目前定义了如下权限,可按照需求自主配置,可使用del_permissions.sql脚本清理系统权限(不建议),仅保留自定义权限,启动菜单开头的对应菜单权限,其他对应功能权限
| 权限CODE | 权限名称 | 权限说明 |
|---|---|---|
| menu_dashboard | 菜单 Dashboard | |
| menu_sqlcheck | 菜单 SQL审核 | |
| menu_sqlworkflow | 菜单 SQL上线 | 默认index页面,必须所有用户都拥有该权限,如果使用自定义index可以自行调整 |
| menu_sqlanalyze | 菜单 SQL分析 | |
| menu_query | 菜单 SQL查询 | |
| menu_sqlquery | 菜单 在线查询 | |
| menu_queryapplylist | 菜单 权限管理 | |
| menu_sqloptimize | 菜单 SQL优化 | |
| menu_sqladvisor | 菜单 优化工具 | |
| menu_slowquery | 菜单 慢查日志 | |
| menu_instance | 菜单 实例管理 | |
| menu_instance_list | 菜单 实例列表 | |
| menu_database | 菜单 数据库管理 | |
| menu_instance_account | 菜单 实例账号管理 | |
| menu_dbdiagnostic | 菜单 会话管理 | |
| menu_param | 菜单 参数配置 | |
| menu_tools | 菜单 工具插件 | |
| menu_archive | 菜单 数据归档 | |
| menu_binlog2sql | 菜单 Binlog2SQL | |
| menu_schemasync | 菜单 SchemaSync | |
| menu_system | 菜单 系统管理 | |
| menu_document | 菜单 相关文档 | |
| sql_submit | 提交SQL上线工单 | 能提交SQL上线工单 |
| sql_review | 审核SQL上线工单 | 可以查看和审核所在资源组的所有SQL上线工单 |
| sql_execute_for_resource_group | 执行SQL上线工单(资源组粒度) | 可以执行所在资源组所有审核通过的SQL上线工单 |
| sql_execute | 执行SQL上线工单(仅自己提交的) | 可以执行自己提交的审核通过的SQL上线工单 |
| sql_analyze | 执行SQL分析 | 可以执行SQL分析功能 |
| optimize_sqladvisor | 执行SQLAdvisor | 可以在优化工具中执行SQLAdvisor获取优化建议 |
| optimize_sqltuning | 执行SQLTuning | 可以在优化工具中执行SQLTuning获取语句执行信息,能够真实执行语句,建议仅开放给DBA |
| optimize_soar | 执行SOAR | 可以在优化工具中执行SOAR获取优化建议 |
| query_applypriv | 申请查询权限 | 可以申请数据查询权限 |
| query_mgtpriv | 管理查询权限 | 可以查看和管理资源组内的用户查询权限,支持修改结果集限制、有效时间以及删除权限 |
| query_review | 审核查询权限 | 可以查看和审核所在资源组的所有查询权限申请工单 |
| query_submit | 提交SQL查询 | 可以使用SQL在线查询 |
| query_all_instances | 可查询所有实例 | 拥有所有实例所有数据的查询权限,无需再次申请 |
| query_resource_group_instance | 可查询所在资源组内的所有实例 | 拥有所在资源组实例所有数据的查询权限,无需再次申请 |
| process_view | 查看会话 | 可以查看实例的会话列表 |
| process_kill | 终止会话 | 可以终止实例会话,建议仅开放给DBA |
| tablespace_view | 查看表空间 | 可以查看实例TOP表空间数据 |
| trxandlocks_view | 查看锁信息 | 可以查看实例锁数据 |
| param_view | 查看实例参数列表 | 可以查看实例参数数据 |
| param_edit | 修改实例参数 | 可以修改实例参数 |
| instance_account_manage | 管理实例账号 | 可以添加、编辑、授权实例账号 |
| data_dictionary_export | 导出数据字典 | 可以库粒度导出数据字典 |
| archive_apply | 提交归档申请 | 可以提交数据归档申请 |
| archive_review | 审核归档申请 | 可以审核数据归档申请 |
| archive_mgt | 管理归档申请 | 可以启用禁用 |
- 注册的用户和LDAP登录的用户会被分配到默认权限组,默认权限组权限可在系统配置中修改
- 在系统管理-用户管理中编辑用户可以给用户分配不同的权限组
- 在系统管理-其他配置管理-权限组管理页面,进行组的维护
对接LDAP认证,无需添加账号即可使用平台功能,开启LDAP后,会在每次登录时同步LDAP用户信息至审核平台
- 修改配置文件并添加管理员
ENABLE_LDAP=True
AUTH_LDAP_BIND_DN = 'cn=xxx,dc=xxx,dc=com'
AUTH_LDAP_BIND_PASSWORD = '123456'
- ldap中自动不能唯一或者查询出现问题
后端可能有的报错 django.db.utils.IntegrityError: (1062, "Duplicate entry '姓名' for key 'sql_users.username'")`
建议改成sAMAccountName来注册
key为archery.sql_users字段名,value为ldap中字段名,用户同步信息
AUTH_LDAP_USER_ATTR_MAP = {
"username": "sAMAccountName",
"display": "displayname",
"email": "mail"
}
- 设置中仅提供最简配置,具体可参考模块django-auth-ldap,可实现组关联等复杂操作
以下是一个实际使用配置,测试已通过 版本 1.9.1
- ldap 目录结构如图
- 本地 .env 文件配置如下
/opt/Archery/src/docker-compose/.env
- 报错参考
- 搜索路径为默认的 xxx ,这个要自己加
- 补充下这里的ldap配置部分,尽量在setting.py中有一份ldap配置,如下(测试版本:1.10.0)
# https://django-auth-ldap.readthedocs.io/en/latest/
AUTH_LDAP_SERVER_URI='ldap://xxx:389'
AUTH_LDAP_BIND_DN='cn=xx,dc=xx,dc=xx'
AUTH_LDAP_BIND_PASSWORD='xx'
AUTH_LDAP_USER_DN_TEMPLATE='uid=%(user)s,ou=people,dc=xx,dc=xx'
AUTH_LDAP_ALWAYS_UPDATE_USER=True
AUTH_LDAP_USER_ATTR_MAP = {
'username': 'cn',
'display': 'displayname',
'email': 'mail',
}
5、补充针对AD域控的详细配置在这里,如下(测试版本:1.10.0) docker部署情况下,在setting.py文件中添加下面代码即可
# -*- coding: UTF-8 -*-
# 在这里写配置可以覆盖 archery/settings.py 内的配置
# DATABASES = {}
ENABLE_LDAP = True
if ENABLE_LDAP:
import ldap
from django_auth_ldap.config import LDAPSearch
AUTHENTICATION_BACKENDS = (
"django_auth_ldap.backend.LDAPBackend", # 配置为先使用LDAP认证,如通过认证则不再使用后面的认证方式
"django.contrib.auth.backends.ModelBackend", # django系统中手动创建的用户也可使用,优先级靠后。注意这2行的顺序
)
AUTH_LDAP_SERVER_URI = 'ldap://xxxxx:端口'
AUTH_LDAP_BIND_DN = 'cn=xxx,ou=xxxx,dc=xxx,dc=cn'
AUTH_LDAP_BIND_PASSWORD = 'xxxxxx'
AUTH_LDAP_USER_SEARCH = LDAPSearch('ou=xxxx,dc=xxxx,dc=cn',ldap.SCOPE_SUBTREE, '(sAMAccountName=%(user)s)')
AUTH_LDAP_ALWAYS_UPDATE_USER = True
AUTH_LDAP_USER_ATTR_MAP = {
'username': 'sAMAccountName',
'display': 'displayname',
'email': 'mail',
}
Enable OIDC 後,無需再 Archery 建立帳號,只要 OIDC 驗證成功後,就會自動創建 Archery 帳號
- OIDC 設定
ENABLE_OIDC=True
OIDC_RP_WELLKNOWN_URL=https://sso.example.com/.well-known/openid-configuration
OIDC_RP_CLIENT_ID=xxxxxxxxxxxx
OIDC_RP_CLIENT_SECRET=xxxxxxxxxxxxxxx
當 ENABLE_OIDC=True,系統會帶入 default OIDC_USER_ATTR_MAP,無需在 .env 中設定
OIDC_USER_ATTR_MAP=username=preferred_username,display=name,email=email
如果要自定義 OIDC_USER_ATTR_MAP,請在 .env 中自行增加。
OIDC_USER_ATTR_MAP 有三個 attribute
username -> 登入 archery 創建帳號,最關鍵
display -> 顯示名
email -> 信箱
e.g.
OIDC_USER_ATTR_MAP=username=email,display=name,email=email
透過更改 username=email,讓用戶以 email 作為帳號。
- 如果有錯誤,可以看 Log.
Missing OIDC fields: foo
請自行確認 attribute 的匹配
