Terug naar de beginpaginaCentor Homepage

Tips & Trucs

User Login zonder password


In sommige gevallen zou u wellicht als een bepaalde user willen inloggen om bijvoorbeeld een grant van een bepaald privilege te doen op een object van die user. Maar u weet zijn/haar password niet. Of u wilt in een script een groep users wijzigen, maar wilt niet alle passwords van die gebruikers in het script opnemen.
Er bestaat een ongedocumenteerde feature, 'identified by values', in het 'alter user' commando dat hiervoor gebruikt kan worden. De gecodeerde user-passwords staan in de dba_users tabel en deze kunnen gebruikt worden om een script met alter user commando's te genereren dat gewijzigde passwords weer terug wijzigt naar het origineel.

Oracle meldt hierover:
'Oracle provides an undocumented 'identified by values' clause in the 'alter user' command that can be used for this purpose. Since the dba'users table contains the encoded password for each user, this value can be used to generate an 'alter user' command to reset the user's password back to its original value. Then, from user system or another DBA user, you can alter the user's password to a known value (such as 'whatever'), log into the user's account using 'connect userid/whatever', make the changes that are needed, connect back to the system account, and run the generated 'alter user' command to put the original password back.'

Dit is de SQL om een script te genereren dat de passwords weer terug wijzigt naar de originele waarde:

SPOOL herstelpw.sql SELECT 'alter user ' || username || ' identified by values ''' || password || ''';' FROM dba'users; SPOOL off

Hieronder staat hoe u een script kunt genereren om de passwords voor alle users te wijzigen naar een voor de DBA bekende waarde (bijvoorbeeld Centor):

SPOOL zetpw.sql SELECT 'alter user ' || username || ' identified by Centor;'
FROM dba_users; SPOOL off

Dus nu kunt u herstelpw.sql aanmaken, zetpw.sql draaien, uw wijzigingen uitvoeren en vervolgens herstelpw.sql draaien om de boel weer te herstellen.
Onnodig te zeggen dat gedurende dit proces de betreffende user(s) geen toegang tot de database heeft (hebben). Voor de veiligheid verdient het wellicht aanbeveling om het aanmaken van herstelpw.sql onderdeel te maken van zetpw.sql.