superset: cannot delete user "Associated data exists, please delete them first"

When trying to delete a user, the error message “Associated data exists, please delete them first” appears. All charts and dashboards created by that account have been deleted. I have also set the user as inactive and deleted its role setting. I am able to edit the user but not delete it.

I found the following similar issue which was marked as stale with no response: https://github.com/apache/superset/issues/8752

Expected results

Successful deletion of a user

Actual results

“Associated data exists, please delete them first” error message

Logs when navigating to user list and trying to delete user (domain has been replaced with deploymentlink.com): 10.4.15.23 - - [25/Feb/2021:19:48:28 +0000] “GET /users/list/ HTTP/1.1” 200 26741 “deploymentlink.com/superset/welcome” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36” 10.4.15.23 - - [25/Feb/2021:19:48:34 +0000] “POST /users/delete/3 HTTP/1.1” 302 299 “deploymentlink.com/users/list” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36” 10.4.15.23 - - [25/Feb/2021:19:48:34 +0000] “GET /users/list/ HTTP/1.1” 200 26786 “-” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.150 Safari/537.36”

Screenshots

Screen Shot 2021-02-25 at 2 42 56 PM

How to reproduce the bug

  1. Go to ‘List Users’
  2. Navigate to user row
  3. Click on ‘Delete’ icon
  4. See error

Environment

(please complete the following information):

  • superset version: superset version: Superset 0.999.0dev
  • python version: python --version: 3.7.9
  • node.js version: node -v: couldn’t find

Checklist

Make sure to follow these steps before submitting your issue - thank you!

  • I have checked the superset logs for python stacktraces and included it here as text if there are any.
  • I have reproduced the issue with at least the latest released version of superset.
  • I have checked the issue tracker for the same issue and I haven’t found one similar.

Additional context

none

About this issue

  • Original URL
  • State: open
  • Created 3 years ago
  • Reactions: 12
  • Comments: 23 (4 by maintainers)

Most upvoted comments

This script has worked for me without problems and I continue to use it. It was written quickly so test it first.

The reason for the select is that I use this with a != on the surname.

delete from favstar where user_id in (select id from ab_user where email = 'users-email');
delete from key_value where changed_by_fk in (select id from ab_user where email = 'users-email');
delete from key_value where created_by_fk in (select id from ab_user where email = 'users-email');
delete from logs where user_id in (select id from ab_user where email = 'users-email');
delete from ab_user_role where user_id in (select id from ab_user where email = 'users-email');
update ab_user set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update ab_user set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
update tables set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update tables set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
delete from sql_metrics where created_by_fk in (select id from ab_user where email = 'users-email');
update table_columns set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
update table_columns set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update sqlatable_user set user_id=null  where user_id in (select id from ab_user where email = 'users-email');
update sl_datasets set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update sl_datasets set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
update sl_columns set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update sl_columns set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');

delete from sl_dataset_users where user_id in (select id from ab_user where email = 'users-email');
update dashboards set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update dashboards set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');

update slices set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update slices set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
delete from dashboard_user where user_id in (select id from ab_user where email = 'users-email');
delete from slice_user where user_id in (select id from ab_user where email = 'users-email');
update slices set last_saved_by_fk=null  where last_saved_by_fk in (select id from ab_user where email = 'users-email');

update sl_tables set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update sl_tables set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');

update annotation_layer set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update annotation_layer set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');

update tab_state set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update tab_state set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
delete from tab_state where user_id in (select id from ab_user where email = 'users-email');

update dbs set created_by_fk=null  where created_by_fk in (select id from ab_user where email = 'users-email');
update dbs set changed_by_fk=null  where changed_by_fk in (select id from ab_user where email = 'users-email');
delete from query where user_id in (select id from ab_user where email = 'users-email');

delete from ab_user where id in (select id from ab_user where email = 'users-email');

puting this here for future use:

-- user to be deleted is id XXX
delete from favstar where user_id=XXX;
delete from key_value where changed_by_fk=XXX;
delete from key_value where created_by_fk=XXX;
delete from logs where user_id=XXX;
delete from ab_user where id=XXX;

Same bug for me on 3.1.0. I have no access to the SuperSet database so I will set the user as inactive. But it should really be fixed.

I ran into the same problem. I can’t delete any user even though the use was recently created and doesn’t own any chart, board or dataset.

How could it be that the user deletion doesn’t cascade through every data like e.g. logs?

Appreciate some solutions (two years after initial report) for how to solve this bug.