2016-04-14 6 views
2

ログインがWindows認証またはSQL Server認証の場合、SQL ServerデータベースにどのOSユーザーがログインするかを確認する必要があります。どのアプリケーションでSQL Serverにログインしたdbアカウントを使用するかは、WHO(クライアントPCのADアカウント)を使用する必要があります。SQL ServerからクライアントOSのユーザー名を取得

問題は、ときに、SQL Serverの認証ユーザーがログイン中に、私は、クライアントのOSのユーザー名を取得できませんでしたです。

たとえば、私はlaptop123、ラップトップ上で、私のADアカウントのドメイン名を使用していました。ドメイン名はStackoverflow、ユーザー名はdeveloper1、Microsoft SQL Server Management Studioを起動し、DBアカウント(SQL Server認証)ERPAPPUSERに接続しました。ドメインユーザーStackoverflow/developer1を記録する必要があります。

ユーザーERPAPPUSERは、Microsoft SQL Server Management Studioを使用してlaptop123から簡単にログインできます。

データベースのログオントリガーを作成して、クライアントのユーザー名、ホスト名、ログオン時刻、アプリケーション名などを取得できましたが、クライアントのOSユーザー名を取得できませんでした。

CREATE TRIGGER DB_ServerLogon 
ON ALL SERVER 
WITH EXECUTE AS 'sa' 
FOR LOGON 
AS 
BEGIN 
    INSERT INTO audit_history.dbo.db_logon_history 
     SELECT 
      ORIGINAL_DB_NAME(), 
      ORIGINAL_LOGIN(), 
      @@SPID,GETDATE(), 
      HOST_NAME(), 
      APP_NAME() 
END 
GO 

多くの感謝!

- 'WITH EXECUTE AS'を ''として追加します。それ以外の場合は、db_logon_historyにアクセスできないユーザーはログインできません。

+2

フェルナンド、SQL Serverにログオンすると、ドメインアカウントでログオンしていないため、ドメインアカウントはSQL Serverに渡されません。どんな種類のデバイスでもログオンできます。信頼できるセキュリティを使用するときにクライアントの詳細をSQL Serverに渡す場合は、フロントエンドからパラメータとして渡す必要があります。ストアドプロシージャまたは同様のものを使用する。途中で良い質問。とよく尋ねた。 – cameront

答えて

0

短い答えは、できません。

SQL Serverでは、2つのセキュリティモードがサポートされています。これらはa)「Windows Authenitcationモード」とb)「Mixed Mode」 - 「SQL ServerとWindows認証モード」です。この2番目のモードは、SQL ServerログインまたはWindowsアカウントでログインできることを意味します。 Windowsアカウントは上記(a)と同じです。 Windowsでログインすると、それは信頼できる接続なので、Windowsアカウント/グループにSQL Serverインスタンスへのアクセスを許可する必要があります。接続は、ユーザーがWindowsにログインしたときに作成されるトークンに対する認証です。このトークンはSQL Serverに渡されるため、上記で説明した情報を返すように解析できます。ただし、SQL Serverモードでログオンすると、ドメインアカウントでログオンしていないため、ドメインアカウントはSQL Serverに渡されません。サーバーのコンテキストで実行されているSQL Serverネイティブアカウントでログインします。これで、Windowsクライアントだけでなく、どんな種類のデバイスでもログオンできます。 SQL Serverモードを使用しているときにクライアントの詳細をSQL Serverに渡す場合は、フロントエンドからパラメータとして渡す必要があります。ストアドプロシージャまたは同様のものを使用する。 (ちなみに良い質問です。)

関連する問題