SQL Server (2012) grant right to regular user to set database in read-only mode
The simple answer is:

GRANT ALTER ON database::[yourDB] TO [yourLogin];


That may, however, give more permissions than you intend. If you want to lock that down, you could look into module signing. That is, you'd create a stored procedure that, given a database name (or perhaps none at all depending on your use case) flips the state. Then, you "bless" the procedure such that it can run in an elevated context.