Think of these use cases:
User wants to move row up 10 places.
User wants to move 3 rows up 10 places.
How can you simplify both actions?
--> It seems like moving with multiple selection would be a good choice.
How should the user move the rows?
Up/down arrows at the side of the area with the selection.
Drag and drop.
Option 1 could be problematic - you have to make sure up/down buttons stay in view throughout the movement. - If you use this, consider placing the up/down buttons over the selection instead of at the side.
Option 2 requires changing the cursor, so that users know that drag and drop is possible and also requires listening to ESC so the user can abort accidental drags. Option 2 may also be harder to use with touch screens (e.g. smart phones).
Option 3 is the most flexible for users.
You gave two options:
Edit button per row.
One edit button at the side.
Option 1 makes sense if you want to edit one row at the time, yet allow multiple selection (for the sake of dragging or copying multiple rows).
Option 2 makes sense if you want to enable editing multiple rows at a time, however, you will need a detail view that summerizes the selection and enables setting a value for a given field (column in data grid) for entire selection at once (e.g. a property grid).
If you choose option 2, you have to make sure it stays in view (once more, consider placing the button over the selection instead of at the side).