How can I delete all blocked users with Drush? - drupal

How can I delete all blocked users with Drush? I have hundreds of blocked users from spammers. I want to delete all these users. I tried doing it through the web interface, but this only works for about 20 users at a time. I have 60 pages to delete, which takes too long and is unsustainable. Also, I want all the relevant callbacks to be run when a blocked user is deleted, and I want all its content deleted. I noticed user-cancel, but this appears to only apply to a single user. Is there a way to make this command work with all blocked users?

Using Drupal 7 and Drush 5.9, the way I did was:
1- Create an alias "#example-local" to your local Drupal installation, as shown here.
2- Create a script file called "delete-blocked-users.script", at, say, "/Users/username/scripts/drush", with the following code:
#!/usr/bin/env drush
$users = db_query("SELECT * FROM {users} WHERE (status = 0)");
foreach ($users as $user) {
exec("drush #example-local user-cancel $user->name -y");
}
3- Make the script file executable with:
chmod +x ~/scripts/drush/delete-blocked-users.script
4- And finally, run the script using:
drush #example-local scr ~/scripts/drush/delete-blocked-users.script
This will delete all the blocked users (users with status = 0), without asking for confirmation (defined by the -y flag).

Drush does not have a simple command to delete all blocked accounts. It would probably be easier to set up a vbo view in you admin interface that lets you filter for blocked users then you can select all and cancel.
You can also run a php script with drush php-script script.php.
So you can set up a php script that does a query for blocked users then loops through though users and calls the user cancel function.

Besides drush, is just easier access to mysql data using user, password and database name that you can find in file drupalhomedir/sites/default/setting.php with command:
mysql -u username-at-setting -ppassword-at-setting database-at-setting
then delete all records on drupal 'user' table with:
DELETE FROM user WHERE status=0;

Related

How to clean all the identites from Sailpoint?

I want to clean all the identities and their accounts roles etc associated with identities.
Is there any way to bulk delete identities?
Do you have shell access?
You can use the iiq console for this:
bash /path/to/iiq/WEB-INF/bin/iiq console
> delete Identity *
This should get rid of all identities except for the ones which are tagged as protected. Also all additional data (links, assignedRoles, scorecards,..) will be deleted.

SQL Job, Linked Server, Domain Account

I think I have tried everything but I can't figure out how to set up an SQL Job that have a T-SQL Step that performs a SELECT on a linked server.
1) I got a Domain user mydomain\SQLJob
2) I got a SQL 2017 server 'JOBSERVER' with the SQL Agent running log on as a domain user mydomain\sv_agent (this cannot be changed). No futher rights should be given to this user either.
3) On the JOBSERVER I created a linked server
EXEC sp_addlinkedserver 'LINKEDSERVER'
4) mydomain\SQLJob is data reader on a database on LINKEDSERVER
5) I am able to do a SELECT * FROM LINKEDSERVER... from JOBSERVER in a regular Query Window.
On JOBSERVER I have tried
ALTER DATABASE MyDatabase SET TRUSTWORTHY ON
And then set the job to execute in MyDatabase
I have also tried
Job Step Properties > Advanced > Run as user > mydomain\SQLJob
I have tried adding mydomain\SQLJob to the linked server on JOBSERVER both with and without Impersonate
Could someone let me know what the correct steps are ?
Thanks
I found another post that stated it could not be done.
What I did instead was changing the T-SQL to a PowerShell script. Here the Run As works just fine.

cloudmonkey with crontab?

i have a Cloudstack 4.2.1 here and would like my VMs to boot from time and shutdown at a scheduled time.
Hence i was thinking if i could integrate Cloudmonkey with CronTab together.
Firstly by creating a Cloudmonkey Script or API call then using crontab to run it at a specific time.
However i have problems creating a Cloudmonkey script/API call...
i haved googled and found this link
http://dlafferty.blogspot.sg/2013/07/using-cloudmonkey-to-automate.html
and had a result of
apiresult=cloudmonkey api stop virtualmachine id="'e10bdf21-2d5c-4277-9d8d-791b82b9e3be'"
unfortunately when i entered this command, nothing happened. If anyone could have an alternative suggestion or rather my API call command is wrong, please correct me and help
Thank you.
CloudMonkey requires some setup before it works (e.g. setting your API key).
Check [1] for the documentation for CloudMoney and follow through the Usage section to setup your environment.
Once your setup is complete and you can interact with CloudStack via CloudMonkey, you should take into account that the VM ids might change, so before you issue a command for a VM, you should first find the correct id, by listing the VMs and picking the right one.
Also, if you run into trouble, post the relevant log from CLoudStack management server (typically in /var/log/cloudstack/management/management-server.log).
[1] - https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+cloudmonkey+CLI
Edit: If you have a working connection via CloudMonkey to CloudStack, you need to configure CloudMonkey in the same way in your shell script. For instance when you configured CloudMonkey you probably set a host, a port and your api and secret keys. So for your scrip to work you need to provide the same configuration to CloudMonkey prior to issuing the commands. My best guess is to use the -c option and provide a config file to set all the relevant parameters (e.g. api an secret key). cloudmonkey -c CONFIG_FILE ....
Edit2: You don't actually need to re-configure cloudmonkey in your script because it will remember your config from the interactive session. I would still advise you to do it, because your script gets more reliable. I've just made an example script like this:
#! /bin/bash
result=$(cloudmonkey list users)
echo $result
Result:
> ./tmp.sh
count = 1 user: id = 678e3a24-082c-11e4-86de-acbdb2423647 account = admin accountid = 678dffe6-082c-11e4-86de-acbdb2423647 accounttype = 1 apikey = T6sDBIpytyJ4_PMgNXYi8YgjMtwTiiDjijbXNB1J78EAZq2foKhCoGKjgJnej5tMaHM0LUvejgTddkhVU63wdw created = 2014-07-10T16:19:13+0200 domain = ROOT domainid = 678dd7b4-082c-11e4-86de-acbdb2423647 email = admin#mailprovider.com firstname = Admin iscallerchilddomain = False isdefault = True lastname = User secretkey = dzOPRecI5vvEVK7Vie2D0tDsQGXunUnpIAczbXnPI3sfMwQ-upWL_bPOisEYg4C-nXi-ldQno2KVZbVR-5NmVw state = enabled username = admin
Maybe you forgot to echothe result?

Super user error when importing mysqldump?

I've done a mysqldump from our Drupal6/CiviCRM4 Civi DB and am trying to import it into a Drupal7/Civi4 dev install, but keep getting "ERROR 1227 (42000) at line 369: Access denied; you need the SUPER privilege for this operation"
From what I can tell, user has correct permissions as indicated via site's cpanel, all appears correct in the import command. I've not come upon this error before doing similar proceedures on other installs. Help please?
It could be one of a couple of things.
First, if you have MySQL version before 5.1.6, you'll need the SUPER permission no matter what:
http://wiki.civicrm.org/confluence/display/CRMDOC/CiviCRM+MySQL+Permission+Requirements
However, since it has been running fine and you're just trying to import the dump file, I think it's probably that your dump file has functions where the definer is set as the database user for the old site (let's say "foo#localhost"). You aren't allowed to set the definer as someone other than yourself without the SUPER privilege. If the new site has a different user (maybe "bar#localhost"), you're acting as "bar#localost" trying to set a function defined by "foo#localhost".
In your dump, you'll probably see something along the lines of
CREATE DEFINER=`foo`#`localhost` FUNCTION ...
You can do one of two things:
have both databases use the same database user account, or
edit the dump file to replace the old user name with the new user name everywhere it occurs.
You should also be aware that "foo#localhost" and "foo#%" are separate users, even if they have the same name and password.
A Drupal/CiviCrm database uses triggers. The SUPER privilege is needed to recreate the trigger when you import the database. If you've restricted your standard user's privileges to those needed while running Civi, you can create a new MySQL user just for the import and grant that user ALL privileges on the database(s). After the import is complete, remove the user with elevated privileges.

Restoring a database into a different instance of tridion

I have got most of the way but there seems to be a permissions issue somewhere:
Before the restore everything is working fine in my target environment - target has a server login account TCMDBUser which is mapped to my tridion_cm database user TCMDBUser
My source tridion_cm database has user TCMDBUser_DEV.
After restoring the source .bak into my target TCMDBUser_DEV is orphaned.
I edit the TRUSTEES table to correct MTSUser and my admin log accounts for my target environment and run the following to fix up my orphaned database user:
sp_change_users_login #Action='update_one',
#UserNamePattern='TCMDBUser_DEV',
#LoginName='TCMDBUser'
GO
I can log back in to Tridion explorer and see the expected list of publications and can walk through the tree structure but when I come to a folder which should contain items I see nothing with error:
and the corresponding event log error is:
Unable to get list of SDL Tridion Content Manager items.
DESCRIPTION
Error Code:
0x80040000 (-2147221504)
Call stack:
System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String)
System.Data.SqlClient.SqlDataReader.GetOrdinal(String)
System.Data.SqlClient.SqlDataReader.get_Item(String)
Tridion.ContentManager.Data.AdoNet.DatabaseUtilities.ConvertToFieldDictionary(IDataRecord,IDictionary`2)
Tridion.ContentManager.Data.AdoNet.IdentifiableObjectDataMapper.Read(TcmUri,IDataRecord,IDictionary`2)
Tridion.ContentManager.Data.AdoNet.ContentManagement.OrganizationalItemDataMapper.GetListItemsPost(IDataReader,TcmUri,OrganizationalItemItemsFilterData)
Tridion.ContentManager.Data.AdoNet.ContentManagement.OrganizationalItemDataMapper.Tridion.ContentManager.Data.ContentManagement.IOrganizationalItemDataMapper.GetListItems(TcmUri,OrganizationalItemItemsFilterData)
Tridion.ContentManager.ContentManagement.OrganizationalItem.GetListItemsData(OrganizationalItemItemsFilter)
Tridion.ContentManager.ContentManagement.OrganizationalItem.GetListItemsStream(OrganizationalItemItemsFilter)
Tridion.ContentManager.BLFacade.ContentManagement.OrganizationalItemFacade.GetListItemsXml(UserContext,String,ListFilter,ListColumnFilter)
Tridion.ContentManager.BLFacade.ContentManagement.OrganizationalItemFacade.GetListData(UserContext,String,EnumListKind,ListColumnFilter,String)
Folder.GetListItems
You will need to delete/drop the TCMDBUser_DEV form the DB and then create a new one with the same name and password (or reattach it to your cm DB). That should fix your problem.
I normally use the delete method with MS SQL server. I believe this occurs due to the ownership status that the TCMDBUser has on the database Schema.
When complete your TCMDBUser user should have the following permissions on your Tridion_CM database
Like Chris mentioned, I always drop the user from the database and then assign the existing TCMDBUser in SQL Server the rights to the restored database. You can drop the user with the following command (on the restored database):
EXEC sp_dropuser TCMDBUser
Then through the SQL Server - Security - Logins, you request the properties of your TCMDBUser and in the User Mapping add the following database roles: db_datareader, db_datawriter and db_ddladmin.
That's what I've always done in the past and works for me, not sure if its all required, but worth a try I guess
Try creating new user TCMDBUser in the database and run the following command
EXEC sp_change_users_login 'Update_One', 'TCMDBUser', 'TCMDBUser'

Resources