1

SPSecurity.RunWithElevatedPrivileges を使用しています....スーパーユーザー「sharepoint\system」アカウントの「偽装」を許可します。

「sharepoint\system」アカウントは、現在の Web アプリケーションのアプリ プール ID のエイリアスですか?

アプリ プール ID がカスタム ユーザー (電子メールやその他の情報を含む) である場合、その情報を取得するにはどうすればよいでしょうか? (取得しようとしている情報は電子メール アドレスです...カスタム アプリケーション プール ユーザーの電子メールには値があり、「sharepoint\system」アカウントの電子メールには値がありません!!!)

また、WindowsIdentity.Impersonate(IntPtr.Zero) メソッドを使用して appPool ID を取得しようとしましたが、何もありません!

アイデアはありますか????

4

1 に答える 1

2

注意点:

  • SPSecurity.RunWithElevatedPrivilegesデリゲート メソッドで実行されるコードは、SharePoint\Systemアカウントの下で実行されます
  • SharePoint\Systemアカウントにはスーパー ユーザー権限があります。ただし、SharePoint ランタイム環境内では認識されますが、Windows セキュリティ システムでは認識されません。つまり、AppPool が実行されているアカウントを表していません。
  • サーバー ファイル システム/DB などの SP 環境外のリソースにアクセスしようとすると、AppPool ID のみが表示されます
  • AppPool を実行しているユーザー アカウントの電子メール アドレスにアクセスする場合は、次の方法を試してください。

    SPSecurity.RunWithElevatedPrivileges(delegate {
            using (SPSite siteCollection = new SPSite("Url"))
            {
                using (SPWeb site = siteCollection.OpenWeb())
                {
                    Console.WriteLine(string.Format("Current Logged in User is {0}. And Email Id: {1} ", site.CurrentUser.LoginName ,site.CurrentUser.Email));
                    appPoolAccount = siteCollection.WebApplication.ApplicationPool.Username;
                    SPUser appPoolUser = site.Users[appPoolAccount] as SPUser;
                    Console.WriteLine(string.Format("AppPool User is {0}. And Email Id: {1} ", appPoolUser.LoginName, appPoolUser.Email));
                    Console.ReadKey();
                }
            }
        });
    
  • 出力は次のようになります... ここに画像の説明を入力
  • したがって、本当に AppPool アカウントの EmailId を取得したい場合は、ユーザーを明示的に選択し、上記のようにオブジェクトのEmailプロパティにアクセスしSPUserます..
于 2014-10-17T07:15:13.827 に答える