Skip to content
patrick edited this page Apr 2, 2024 · 9 revisions

权限管理

资源组

功能说明

资源组是一堆资源对象的集合,与用户关联后用来隔离资源访问权限,可以根据项目组进行划分,目前资源组可关联的对象有用户、实例,不同资源组的对象隔离,组成员仅可以查看组关联对象的数据

相关配置

在系统管理-资源组管理页面,进行资源组管理以及资源组关联对象管理,用户必须关联资源组才能访问对应实例等资源信息 添加实例和用户时也可以批量关联资源组

相关issue

#84

权限组

功能说明

权限组是使用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 管理归档申请 可以启用禁用

相关配置

  1. 注册的用户和LDAP登录的用户会被分配到默认权限组,默认权限组权限可在系统配置中修改
  2. 在系统管理-用户管理中编辑用户可以给用户分配不同的权限组
  3. 在系统管理-其他配置管理-权限组管理页面,进行组的维护

集成LDAP

功能说明

对接LDAP认证,无需添加账号即可使用平台功能,开启LDAP后,会在每次登录时同步LDAP用户信息至审核平台

相关配置

  1. 修改配置文件并添加管理员
   ENABLE_LDAP=True
   AUTH_LDAP_BIND_DN = 'cn=xxx,dc=xxx,dc=com'
   AUTH_LDAP_BIND_PASSWORD = '123456'
  1. 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"
}
  1. 设置中仅提供最简配置,具体可参考模块django-auth-ldap,可实现组关联等复杂操作

以下是一个实际使用配置,测试已通过 版本 1.9.1

  • ldap 目录结构如图 image
  • 本地 .env 文件配置如下 /opt/Archery/src/docker-compose/.env image
  • 报错参考 image
  • 搜索路径为默认的 xxx ,这个要自己加
  1. 补充下这里的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',
    }