Ukraine has declared martial law in part of the country after Sunday's capture of three of its naval vessels and 23 crew members by Russia.
Lawmakers backed President Petro Poroshenko's request to introduce it in regions mostly bordering Russia for 30 days starting from 28 November.
The authorities can now restrict public rallies and regulate the media.
Some MPs expressed fears Mr Poroshenko could suspend a presidential poll on 31 March 2019 - a claim he firmly denied.
Sunday's naval clash was off the coast of Crimea, annexed by Russia in 2014. Russian coastguard ships opened fire before special forces stormed the Ukrainian vessels. Between three and six Ukrainians were injured.
Ukraine said it was a Russian "act of aggression". Moscow said the ships had illegally entered its waters.
The naval clash is the first time Russia and Ukraine have come into open conflict in recent years, although Ukrainian forces have been fighting Russian-backed separatists and Russian "volunteers" in the east since 2014.
A number of Western countries condemned Russia's actions.
In New York, the United Nations Security Council met to discuss the crisis - but failed to agree a Russian-proposed agenda amid sharp disagreements between Moscow and the West.
Monday's vote in parliament came after an emotional address by President Poroshenko, who promised not to restrict basic freedoms.
But he stressed he needed firm power in case of a full-scale Russian invasion.
Ukraine's national security and defence council had initially recommended a 60-day martial law.
But Mr Poroshenko said he amended the proposal because he did not want martial law to affect the presidential elections.
Still, critics expressed fears that Mr Poroshenko - whose ratings have plummeted in recent months - could suspend the elections to stay in power.
Russia said the Ukrainian ships were in its waters illegally because Moscow had temporarily closed an area of water for shipping.
Kiev called Russia's actions a flagrant violation of international law, because the Black Sea is free for shipping, and Crimea belongs to Ukraine.
Ukraine also cited a 2003 Russia-Ukraine treaty on unimpeded access to the Kerch Strait and Sea of Azov.
It said it had informed the Russians in advance of its plan to move its ships to Mariupol - a claim denied by Russia.
In recent weeks, two Ukrainian vessels passed through the Kerch Straight without incident.