Core component of SQL Server for storing, processing, and securing data
Thanks for the responses in this thread. Based on the inputs above and some additional research on my end, I've arrived at the approaches outlined below.
For additional business context: the thick-client application uses MSSQL Express as the embedded ISV database (i.e. shipped along with the thick client app) and runs locally on a standalone machine. Depending on the client's deployment environment, this may be set up in an air-gapped network or run in kiosk mode.
Approach-1: 3-tier Architecture
Introduce a middle layer - for example, a web server running on localhost; and grant SQL permissions to the web service only, with the web service itself protected by the application credentials. This is the only fully reliable solution to the existing problem, but it increases the overall complexity of the setup.
Approach-2: Using Application Roles (recommended)
Grant BUILTIN\Users connect permission only (the default public role already provides this), and create an application role secured with a per-machine generated password (and stored encrypted using DPAPI machine key). Permissions on the application database are then granted to this application role only. In this approach, the password stored by the application (even when encrypted) can be decrypted by a skilled, motivated user, because Windows does not support application-level security—that is, a password that can be read by the application but not by the Windows user.
This approach carries a residual risk