-
Notifications
You must be signed in to change notification settings - Fork 1.7k
auth
patrick edited this page Apr 2, 2024
·
9 revisions
资源组是一堆资源对象的集合,与用户关联后用来隔离资源访问权限,可以根据项目组进行划分,目前资源组可关联的对象有用户、实例,不同资源组的对象隔离,组成员仅可以查看组关联对象的数据
在系统管理-资源组管理页面,进行资源组管理以及资源组关联对象管理,用户必须关联资源组才能访问对应实例等资源信息 添加实例和用户时也可以批量关联资源组
权限组是使用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',
}