I used to be a hard core stored procedure advocate, but recently I have changed position.
One of the problems with stored procedures is that all your queries have to be defined early, and all queries need to be defined in the stored procedure. Say, for example, I wish to query for users with a certain first name, and the last name does not start with "a", and there is not already a stored procedure doing this (probably not), I have to write a new one. And this is one new stored procedure for handling one specific feature. In the last database project I was working on, the number of stored procedures was growing due to new ways of querying for the same data.
In my current application, I dynamically generate SQL queries based on lambda expressions. This allows me to query for any combination of properties on my domain objects, and let the data access layer convert that into a valid SQL query.
I have a lot less code now, it is easier to understand, and most importantly, it is much much faster to implement a new feature. I do however sometimes use stored procedures for inserting and updating data, as they allow me to validate invalid data, and abort the transaction if the data is invalid.
What about security implications? Well traditionally, stored procedures gave a security benefit, as you could hide your tables away, and only expose stored procedures, and specify which user has access to which stored procedure. But who creates applications where the client accesses the database directly anymore?
I would always have some sort of application layer on top of the database running as a service somewhere (web service, windows service, web application, etc), and that service will implement security. No user can directly access the database.