There are pros and cons to each.
Using a shared service account to authenticate to the database has the advantage of being able to more efficiently pool connections to the database. That is, connections can be re-used between users minimizing the sometimes costly operation of opening a new connection, which you will have to do if each user authenticates separately. A definite con is that you have to be extra careful about validating any SQL the user is running since the permissions on the account have to be able to do what the most powerful user of the system needs to be able to do.
Using an account for each user gives you more flexibility in assigning permissions to various users without having to implement your own custom authorization scheme in your application. Also, it makes auditing the system a little easier because you know who is connected when you check the DB connections. Finally, this approach can reduce your vulnerability to SQL injection, in that you can lock down each user's account (preferably using role-bases security in the DB platform) to only be able to do things that user should be allowed to do.
So, for example, if they somehow inject a DELETE FROM UsersTable, you would have locked that down and the injected command would fail even if it got through your validation logic.
There is another consideration if you have users who know how to use database tools (especially MS Access) and have direct access to the database server. If you use the per-user authorization model you may have trouble with savvy users circumventing your application and working directly against the database. If your users are a bunch of programmers you might want to go with a shared account.
Use a shared service account for DB access if your app is very heavily trafficked by a large number of concurrent users who do small transactions.
Use an account/per user scheme when you have fewer users connecting to the system concurrently or you want more security and/or better control over authorization to objects.