Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

cannot delete user "Associated data exists, please delete them first" #13345

Open
2 of 3 tasks
maddyobrienjones opened this issue Feb 25, 2021 · 23 comments
Open
2 of 3 tasks
Labels
authentication:RBAC Related to RBAC #bug Bug report P2 Priority item - High

Comments

@maddyobrienjones
Copy link
Contributor

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: #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

@maddyobrienjones maddyobrienjones added the #bug Bug report label Feb 25, 2021
@junlincc junlincc added P2 Priority item - High authentication:RBAC Related to RBAC labels May 21, 2021
@oguzhanyediel
Copy link

Any update?

@maddyobrienjones
Copy link
Contributor Author

no updates from my end

@oguzhanyediel
Copy link

oguzhanyediel commented Oct 3, 2021

Thanks for the quick reply @maddyobrienjones

I encountered the same error a couple of days ago. I don't know what I will do because I can't remove the user although all charts and dashboards created by that user have been deleted.

By the way, the reason that I want for the user removal is the following situation.

add_to_dashboard_error

I don't know again what I will do and I wanted to delete&add the user again. It will be greatly appreciated if anyone knows a solution to this strange situation.

Note: There are many dashboards, and not even one of them appeared in the 'ADD TO DASHBOARD' part.
Superset Version: 0.999.0dev

@oguzhanyediel
Copy link

My second problem is solved by @nytai He told me that any user who wants to add a chart to any dashboard may have to add himself/herself as an owner of the dashboard.

The other error 'Associated data exists, please delete them first' is still ongoing.

@kushmangal
Copy link

Any update here?

@maddyobrienjones
Copy link
Contributor Author

no updates from me. this is low priority in my backlog of tasks.

@nytai
Copy link
Member

nytai commented Jan 27, 2022

I think there's also a logs table. Tbh deleting a user if quite difficult since cascade hasn't been set on a lot of the foreign key relationships, so you’ll have to find them and delete the records manually.

If possible, just mark the user as inactive and change all the fields that might cause issues with unique constraints if the same user is trying to sign up again

@nytai
Copy link
Member

nytai commented Jan 27, 2022

Also this stackoverflow post mentions a query you can run to find all the foreign key constraints on ab_users.id

@Petah
Copy link

Petah commented Mar 8, 2022

I tried to delete a user I just made, and it doesn't work giving this error. How does a new user own anything, and how can I find and delete it?

@sdezza
Copy link

sdezza commented Mar 14, 2022

Same problem here. Really need something to be able to delete a user

@ChangbingChen
Copy link

I think there's also a logs table. Tbh deleting a user if quite difficult since cascade hasn't been set on a lot of the foreign key relationships, so you’ll have to find them and delete the records manually.

If possible, just mark the user as inactive and change all the fields that might cause issues with unique constraints if the same user is trying to sign up again

@nytai , it's great! it works for me. When i tried to delete a user, it took a long time and timed out(log info, [CRITICAL] WORKER TIMEOUT (pid:5783)). So i deleted the records of the logs table, and the user can be deleted normally.

@bjornhauge
Copy link

I'm getting General Error <class 'sqlalchemy.exc.CircularDependencyError'> whenever I try to delete a user. If the delete button doesn't work, then let's just get rid of it. Especially because the UI even has a message saying

"It's not good policy to remove a user, just make it inactive"

@simonvanderveldt
Copy link

Has anything been done for this for 2.0.0?
Deletion should just work, after a warning everything should just automatically be removed, one shouldn't have to manually go through tabs or cleaning up records in a database (to be able to) delete a user.

@bonamim
Copy link

bonamim commented Aug 23, 2022

Hey guys,

The version 2.0.0 has the same problem ⚠️
We were able to reproduce the problem after a user ran a query, and then we were unable to remove this user.

It was necessary to remove the user data in this case from two tables:

  • logs
  • query

@ivan-price-acted
Copy link

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;

@C-monC
Copy link

C-monC commented Oct 20, 2022

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');

@max-addison
Copy link

Still having this issue. The user im trying to delete has never created a chart or dashboard

@C-monC
Copy link

C-monC commented Mar 15, 2023

If you're using the latest version it may be possible that there are new tables.

Run the above script and check what the error message is for the last line. Modify the script accordingly and post it here.
I come grab this snippet whenever I need to delete a user.

@LeoDiep
Copy link

LeoDiep commented Jun 10, 2023

just want to save time for who don't know how to do as C-monC did above,
if you run superset by docker, the default metadata of superset is from the container name 'superset_db' and the image is prosgre. This database is already connected on Superset UI as example database when you load the examples. However you cannot delete records in this database if you haven't eddited its setting and allow DML.

After that, just go to sqllab, find the user_id you want to delete, run 'delete from ab_user where id = ...' , it will show you which table have data associated with this user_id. Then run delete all rows having that user_id of all related tables and run 'delete from ab_user where id = ...' again, you can now remove that user.

@julizet
Copy link

julizet commented Jul 11, 2023

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.

@beeritis
Copy link

beeritis commented Feb 28, 2024

Airflow v2.6.0

Just had the same problem - following worked for me -


delete  from dag_run_note where user_id='<userid>;
delete from ab_user_role where user_id='<userid>';
delete  from ab_user where username='<username>';

Not a fan of force deleting but this is a fundamental bug that needs fixing.

A basic feature to allow updating of a user password should be implemented as this was the only reason I needed to delete a user.

@jaroet
Copy link

jaroet commented Mar 11, 2024

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.

@ziggekatten
Copy link

This is driving me nuts as well. I do not feel comfortable doing deletes outside of the ORM, as it might wreck stuff and make upgrades fail

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
authentication:RBAC Related to RBAC #bug Bug report P2 Priority item - High
Projects
None yet
Development

No branches or pull requests