Come ottenere il nome di accesso a Windows dell'utente del sito Web dalla procedura memorizzata richiamata attraverso il sito Web
-
06-07-2019 - |
Domanda
Ho una pagina web che funziona con un account chiamato WebUser
(IIS funziona con questo account)
Ora il problema qui è che, quando gli utenti (intranet) accedono alla pagina web,
gli utenti vengono autenticati tramite Autenticazione di Windows .
La pagina web chiama una procedura memorizzata, SaveClientInfo
.
Quando stavo cercando di ottenere il nome dell'utente (ad esempio, Utente1 ) che stava chiamando SaveClientInfo
,
Stavo ottenendo WebUser anziché Utente1 tramite SYSTEM_USER
Esiste un modo per ottenere Utente1 da SaveClientInfo
senza dover passare il nome utente alla procedura memorizzata?
Ecco la parte rilevante della definizione di sproc
create procedure SaveClientInfo
@ClientID int
... --; other parameters
as
begin
declare @UserName sysname
--; returns the name of user name that IIS runs under
--; But I would like to log the name of the person
--; who is accesing the site through Windows Authentication
select @UserName = SYSTEM_USER
--; Save client data and the person who saved the info
...
end
GO
Soluzione
A meno che non si usi la rappresentazione nella propria app Web, quindi l'applicazione Web si connette come utente autenticato di Windows, no, non è possibile.
Altri suggerimenti
Il recupero del nome dell'utente da SQL dovrebbe fornire semplicemente il nome utente associato alla connessione, in genere l'account utente utilizzato da ASP.NET.
Sul lato .NET, è possibile utilizzare (C #)
string s = Environment.User.Identity.Name
per recuperare il nome dell'utente che ha effettuato l'accesso al tuo sito. Usiamo questo per tracciare chi sta apportando modifiche al db attraverso il nostro sito di amministrazione, tra gli altri.