Передача имени пользователя asp.net в базу данных - PullRequest
0 голосов
/ 25 июля 2011

Мне интересно, как решить следующую проблему:

У меня есть веб-приложение asp.net, где используется проверка подлинности с помощью форм, подключенное к Active Directory.Кроме того, у меня есть строка подключения к MS SQL db в веб-приложении, где используется один глобальный пользователь (с данными привилегиями).Проблема заключается в том, что когда я хочу сохранить информацию о пользователе (например, журнал изменения данных) в базе данных, я могу получить только глобальную информацию о пользователе, указанную в строке подключения, а не реального пользователя, вошедшего в систему.

Есть ли возможность войти в веб-приложение с моими личными учетными данными, после того, как использовать глобальные учетные данные пользователя для подключения к базе данных и передать мои личные учетные данные пользователя (но не в качестве параметров в процедуре хранения), эта база данных будет думать, что пользователькто залогинен не глобальный пользователь?

Полагаю, это могло бы быть возможно только в том случае, если бы я также создал тех же пользователей в базе данных и использовал имперсонализацию?

Или любые другие возможности?

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 25 июля 2011

Вы можете использовать роль в вашей базе данных для обработки разрешений, а затем получить нужных вам пользователей в группу в AD и назначить разрешения этой группе AD для доступа к вашей базе данных под ролью, которую вы определяете. (Таким образом, вам не нужно назначать каждого пользователя вашей базе данных при его создании).

После этого вы будете использовать проверку подлинности Windows на всем пути от вашего веб-сайта до базы данных и иметь учетную запись пользователя, необходимую для регистрации. (Вам нужно будет установить идентичность impersonate = "true" в вашей конфигурации).

Я хотел бы отметить, что это будет работать (легко), только если ваши серверы и ваши пользователи находятся в одной сети.

0 голосов
/ 25 июля 2011

Что вы делаете, чтобы получить текущего пользователя?Вы делаете что-то вроде SELECT @user = SYSTEM_USER?Это, очевидно, вернет только пользователя, с которым вы подключаетесь к SQL Server.

Я бы предпочел использовать один логин SQL, который использует приложение, но передавать имя пользователя при внесении изменений, например, черезsproc или обновление таблицы:

CREATE PROCEDURE dbo.DoSomething
    @id INT,
    @username VARCHAR(50)
AS
    -- Make your changes.

    INSERT INTO dbo.[Audit] SELECT 'update', @id, @username
GO

В ASP.NET вы можете получить доступ к зарегистрированному в данный момент пользователю через свойство User.Identity.Name страницы.

...