I see several design problems:
1
Method "Authenticate" returns some rowset. Why? It is called "authenticate" - not "SelectAuthenticatedUserInfo". I assume this procedure does more than one job.
Split it to real authentication method which gives probably an output variable with session-id or bit flag yes/no = ok/fault. And create another procedure something like dbo.SelectAuthUserProfile
which is called once at application start, calls from within dbo.Authenticate
and if it succeeds - returns rowset with according data.
2
This select looks like a regular work, I mean - it's not likely a one-time "low-level" work on app start or sign-in/sign-out. Why are you performing authenticate method? Are you serious that you want to pass username and (!) password every time you want to select some data? Authentication is a one-time job per session (or even some longer scenarios).
Do authenticate your user, then just check if he is already authenticated or not. Store your session data somewhere, pass only a key or something (or even don't pass anything - there are some tricks with ## or # tables, spid+login time and so on).
3
It does not seem to me that every user may view contents of Users
table. Access can be controlled by internal sql-server's tools.
Create schema for admin-specific stored procs, create role for such super-users, grant'em this schema's procedures. This will exclude any possibility for a regular user to execute such proc.
4
Think further of managing access to different parts of your system. To the question "Is this user permitted to perform such an action?" you are trying to answer "He is authenticated!" Okay, authenticated. So what? Does he have a permission or not?
Authenticate user once, then - control his permissions. There cannot be "authenticate" method inside of a regular proc. But "IsPermitted" I guess is supposed to be. (this item correlates with 1st - to many responsibilities for a proc)
5
Furthermore, think of this: permitted to see these orders, but not permitted to see those. Can you arrange it with a proc call like if exec then
?